Python SocketServer - 获取自己的IP

时间:2014-04-10 19:51:50

标签: python socketserver

我用Python3的socketserver模块创建一个简单的TCP服务器。我想获取服务器所服务的服务器的IP。

我注意到socketserver(而不是BaseServer)中有一个server_address属性,但返回' 0.0.0.0'对于知识产权。我也尝试使用socket对象并运行gethostbyname(),但是python说套接字对象没有属性gethostbyname。例如:

server = socketserver.TCPServer(...)
print(server.server_address) # gives me ('0.0.0.0', [correct port])
print(server.socket.gethostbyname()) # AttributeError

根据我的理解,0.0.0.0保留用于"未知",因此服务器没有看到它的IP。那是对的吗?解决方案可能是什么?

2 个答案:

答案 0 :(得分:1)

在没有外部服务器帮助的情况下,这是不可能的,因为您和另一台计算机之间可能有任意数量的网络地址转换器(NAT)。我想如果你正在使用某种自定义协议,你可以要求客户端断言它所连接的地址。

考虑到这一点(许多人会认为这是一个黑客),但它可以说是唯一的方法 - 你可以做类似的事情:

import urllib.request
external_ip = urllib.request.urlopen('http://ifconfig.me/ip').read()

答案 1 :(得分:1)

套接字服务器中的0.0.0.0意味着您不必配置特定的网络接口IP地址以让服务器监听。现在它正在侦听所有服务器的可用IP地址(网络接口)

要获取服务器IP地址(如果可由DNS解析),您可以使用:

import socket 
socket.gethostbyname(socket.getfqdn())