代码之家  ›  专栏  ›  技术社区  ›  Vishesh Handa

套接字“没有到主机的路由”错误

  •  6
  • Vishesh Handa  · 技术社区  · 16 年前

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

    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

    export http_proxy='10.10.1.100:9401' && wget aorotos.com/index.html 即使这样也行!如果我启用调试选项( -d )在wget中,我甚至可以得到套接字的文件描述符。

    通过提供的路由表 route

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

    有人知道可能出了什么问题吗?

    编辑:目前我的IP是10.16.82.250。世界上只有这些 路线

    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)
    

    我安装了tcpdump并阅读了它的手册,最后安装了wireshark(我使用的是N900),结果从数据包转储中发现,在C程序和python脚本中,我一直在使用端口4901而不是9401!哦!我怪小屏幕,还有我自己。

    有没有办法用“我是个白痴”之类的话来结束这个问题?:页 抱歉占用你的时间!)我花了一个多星期的时间。我不敢相信我经历了大部分的 wget 的源代码!)

    1 回复  |  直到 16 年前
        1
  •  3
  •   doron    16 年前

    我不知道是什么问题,但尝试使用 Wireshark . 这至少可以让您看到网络级别上发生了什么。Wireshark数据包日志中应该有足够的信息来诊断您的问题。