python - 套接字 'No route to host' 错误

标签 python c sockets routing

我有一个位于限制性防火墙后面的连接,该防火墙仅允许通过代理 (10.10.1.100:9401) 进行 HTTP(S) 访问。我获得的 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 的事件连接。

我尝试了一个简单的命令,例如 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 程序和 python 脚本!呸!我责怪小屏幕,好吧,我自己。

有没有办法用“我是个白痴”之类的话来结束这个问题? :P 很抱歉占用您的时间! (我已经在这上面花了一个多星期了。我不敢相信我浏览了大部分 wget 的源代码!)

最佳答案

我不确定问题出在哪里,但请尝试使用 Wireshark .这至少会让你看到网络层面发生了什么。 Wireshark 数据包日志中应该有足够的信息来诊断您的问题。

关于python - 套接字 'No route to host' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3752231/

相关文章:

python - 使用哈希比较列表中的相似性?

c++ - 将 Lua 变量传递给 C

c++ - 输入奇数时打印空字符

c# - 如果未检测到换行符,则服务器的套接字阻塞,但未检测到客户端的套接字

python-3.x - 我应该如何与pyaudio直播

python - 如何在Python中的大集合变量中找到最接近的字符串匹配?

python - PyQt:仅适用于整数或仅字符串和长度限制的 QLineEdit 输入掩码

谁能逐行解释这个简单的 'binary representation of a number with recursion' 程序是如何运行的?

c# - 测试链接的最有效方法

python - 使用 BeautifulSoup 在 HTML 文件中查找第一个标签