Python的SocketServer赢得了握手

时间:2014-11-25 11:11:23

标签: python tcp wireshark handshake socketserver

问题

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

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

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

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

使用telnet正常工作

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

1号航站楼:

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

2号航站楼:

manos@box:~$ netcat 10.2.203.26 9999
test

1 个答案:

答案 0 :(得分:3)

您绑定到localhost,它不允许指定机器接口的IP地址/ es作为连接主机上的目标。

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

有关localhost127.0.0.10.0.0.0之间差异的详情,请参阅this answerthis one