2014-11-25 26 views
2

问题

我试图使用SocketServer附带Python的,但我在握手阶段的一些问题。只要使用localhost或127.0.0.1,握手就可以正常工作。但是,当我把我的eth0卡的IP,它只是不会握手。我测试的官方示例代码found herePython的SocketServer的won''t握手

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() 

终端片段:

[email protected]:~$ netcat 10.2.203.26 9999 
[email protected]:~$ 
[email protected]:~$ netcat localhost 9999 
test 

正如您在摘要中看到,尝试连接到10.2.293.26这是我的网卡不工作的IP。只要我尝试连接到localhost,它工作正常!

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

通过telnet

工作正常,我的第一个猜测是,这是重新连接的路由器。然而事实并非如此,因为我可以telnet罚款:

端子1:

[email protected]:~/tmp/test$ netcat -l 9999 
(waiting) 
test 

2号航站楼:

[email protected]:~$ netcat 10.2.203.26 9999 
test 

+0

只是一个快速建议,您是否正确设置了端口转发? – redspidermkv 2014-11-25 11:23:21

+0

@redspidermkv那么'telneting'不会工作,如果这是问题.. – Pithikos 2014-11-25 11:36:53

回答

3

你结合localhost,不允许指定机器接口的IP地址/ s作为连接主机上的目的地。

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

有关localhost127.0.0.10.0.0.0之间的区别的详细信息请参阅this answerthis one

+0

谢谢加载! – Pithikos 2014-11-25 14:07:28