套接字“无主机路由”错误

时间:2010-09-20 14:07:38

标签: python c sockets routing

我有一个限制性防火墙后面的连接,它只允许通过代理进行HTTP(S)访问(10.10.1.100:9401)。我得到的IP地址是动态的,子网掩码是255.255.255.255(我知道,很奇怪!)。

我尝试编写一个简单的Python套接字程序来连接代理,以便发送一些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()

我在连接期间遇到异常(113,“无主机路由”)。现在这里是奇怪的部分 - 我可以使用相同的代理设置浏览网页,如果通过netstat -tna检查当前连接的套接字,我看到与10.10.1.100:9401的ACTIVE连接。

我尝试了一个简单的命令,如export http_proxy='10.10.1.100:9401' && wget aorotos.com/index.html甚至可行!如果我在wget中启用调试选项(-d),我甚至可以获得套接字的文件描述符。

我浏览了wget源代码,从我所看到的它也使用了一个普通的连接语句,并没有设置任何特殊的套接字选项(稍后我将详细介绍)。我在C中尝试了相同的代码,它也失败了。

通过route提供的路由表是

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

有没有人知道可能出现什么问题?

编辑:目前我的IP是10.16.82.250。这就是route输出中的所有内容。如果您感兴趣我的外部IP是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)

编辑2: 我安装了tcpdump并通过它的手册,最后安装wireshark(我在我的N900上)只是为了实现从数据包转储中我在C程序中使用端口4901而不是9401 python脚本!卫生署!我责怪小屏幕,好吧,我自己。

有没有办法用“我是白痴”或其他什么来关闭这个问题? :P 抱歉占用你的时间! (我花了一个多星期的时间。我无法相信我经历了大部分wget的源代码!)

1 个答案:

答案 0 :(得分:3)

我不确定问题是什么,但请尝试使用Wireshark。这至少可以让您了解网络层面的情况。应该有来自Wireshark数据包日志的足够信息来诊断您的问题。