如何在Python平台中独立查找本地IP地址(即192.168.x.x或10.0.x.x),只使用标准库?
发布于 2008-10-03 12:06:51
import socket
socket.gethostbyname(socket.gethostname())
这并不总是有效的(在/etc/hosts
中主机名为127.0.0.1
的机器上返回127.0.0.1
),gimel显示的是被动的,请改用socket.getfqdn()
。当然,您的机器需要一个可解析的主机名。
发布于 2008-10-03 12:35:14
我刚刚发现了这个,但它看起来有点老土,但是他们说我在nix上试过了,我在windows上试过了,它起作用了。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
s.close()
这假设您有internet访问权限,并且没有本地代理。
发布于 2012-02-14 04:52:32
在Linux上:
>>> import socket, struct, fcntl
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sockfd = sock.fileno()
>>> SIOCGIFADDR = 0x8915
>>>
>>> def get_ip(iface = 'eth0'):
... ifreq = struct.pack('16sH14s', iface, socket.AF_INET, '\x00'*14)
... try:
... res = fcntl.ioctl(sockfd, SIOCGIFADDR, ifreq)
... except:
... return None
... ip = struct.unpack('16sH2x4s8x', res)[2]
... return socket.inet_ntoa(ip)
...
>>> get_ip('eth0')
'10.80.40.234'
>>>
https://stackoverflow.com/questions/166506
复制相似问题