Python的SocketServer不会握手



问题

我正在尝试使用Python附带的SocketServer,但是在握手阶段遇到了一些问题。只要我使用 localhost 或 127.0.0.1,握手就可以正常工作。但是,当我输入eth0卡的IP时,它就不会握手。我测试了这里找到的官方示例代码:

import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        self.request.sendall(self.data.upper())
if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

终端代码段:

manos@box:~$ netcat 10.2.203.26 9999
manos@box:~$
manos@box:~$ netcat localhost 9999
test

正如您在代码片段中看到的,尝试连接到10.2.293.26我的网卡的 IP 不起作用。一旦我尝试连接到localhost,它就可以正常工作!

在 Wireshark 上,我在第一个 SYN 从客户端发送到服务器(在初始握手阶段)后得到一个[RST, ACK]

与远程登录配合良好

我的第一个猜测是这是路由器重置连接。然而,事实并非如此,因为我可以telnet很好:

1号航站楼:

manos@box:~/tmp/test$ netcat -l 9999
(waiting)
test

2号航站楼:

manos@box:~$ netcat 10.2.203.26 9999
test

绑定到 localhost ,这不允许将计算机接口的 IP 地址指定为连接主机上的目标。

您应该在绑定操作(示例中的 HOST 参数)中指定0.0.0.0或空字符串作为计算机的地址,以便允许远程主机将计算机的任何 IP 地址指定为目标。

有关localhost127.0.0.10.0.0.0 之间区别的更多信息,请参阅此答案或此答案。

相关内容

  • 没有找到相关文章

最新更新