2010-09-20 11 views
6

Tengo una conexión que está detrás de un firewall restrictivo que solo permite el acceso HTTP (S) a través de un proxy (10.10.1.100:9401). La dirección IP que obtengo es dinámica y la máscara de subred es 255.255.255.255 (lo sé, ¡raro!).Error del socket 'No hay ruta al host'

traté de escribir un simple programa de toma de Python para conectarse al proxy con el fin de enviar algunas peticiones HTTP:

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("10.10.1.100", 9401)) 
s.send("GET /index.html HTTP/1.1\r\nHost: aorotos.com\r\n\r\n") 
d = s.recv(1024) 
print d 
s.close() 

consigo una excepción (113, "No route to host") durante la conexión . Ahora aquí está la parte extraña — Puedo navegar en la web usando la misma configuración proxy, y si verifico los enchufes actualmente conectados a través del netstat -tna veo una conexión ACTIVA a 10.10.1.100:9401.

Intenté un comando simple como export http_proxy='10.10.1.100:9401' && wget aorotos.com/index.html ¡e incluso eso funciona! Si habilito la opción de depuración (-d) en wget, incluso puedo obtener el descriptor de archivo del socket.

Revisé el código fuente de wget, y por lo que puedo ver también usa una declaración de conexión normal y no establece ninguna opción de socket especial (lo revisaré más adelante). Probé el mismo código en C y también falla.

La tabla de enrutamiento proporcionada a través de route es

Destination Gateway  Genmask  Flags Metric Ref Use Iface 
default  *   0.0.0.0  U  0  0  0 gprs0 

¿Alguien tiene alguna idea de lo que podría estar mal?

EDIT: Actualmente mi IP es 10.16.82.250. Y eso es todo lo que hay en la salida route. Si está interesado, mi IP externa es 203.8.8.2.

ifconfig gprs0 -

gprs0  Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
      inet addr:10.17.221.94 P-t-P:10.17.221.94 Mask:255.255.255.255 
      UP POINTOPOINT RUNNING NOARP MTU:1400 Metric:1 
      RX packets:1832 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:1844 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:10 
      RX bytes:1878364 (1.7 MiB) TX bytes:224746 (219.4 KiB) 

EDIT 2: aterricé hasta la instalación de tcpdump y pasando a través de su manual, y finalmente la instalación de Wireshark (estoy en mi N900) sólo para darse cuenta, desde el vertedero de paquetes, que He estado usando el puerto 4901 en lugar de 9401 tanto en el programa C como en el script de python. Doh! Culpo a la pantalla chica y, bueno, a mí mismo.

¿Hay alguna manera de cerrar esta pregunta con un "soy un idiota" o algo así? : P ¡Perdón por tomarse su tiempo! (He pasado más de una semana en esto. No puedo creer que haya pasado la mayor parte del código fuente de wget!)

+0

La salida de la ruta es un poco sospechosa, ¿es la única salida o hay más? Además, ¿puedes dar un ejemplo de dirección IP válida para la interfaz de gprs0? – synthesizerpatel

+0

¿Qué dice 'ifconfig'? – bstpierre

+0

Dado que encontraste el problema usando wireshark, y esto es lo que sugirió la respuesta de doron, parece justo aceptar esa respuesta. – bstpierre

Respuesta

3

No estoy seguro de cuál es el problema, pero intente utilizar Wireshark. Esto al menos le permitirá ver lo que está sucediendo a nivel de red. Debería haber suficiente información de los registros de paquetes Wireshark para diagnosticar su problema.

Cuestiones relacionadas