首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python的stdlib查找本地IP地址

使用Python的stdlib查找本地IP地址
EN

Stack Overflow用户
提问于 2008-10-03 20:03:37
回答 39查看 824.5K关注 0票数 626

如何在Python平台中独立查找本地IP地址(即192.168.x.x或10.0.x.x),只使用标准库?

EN

回答 39

Stack Overflow用户

回答已采纳

发布于 2008-10-03 12:06:51

代码语言:javascript
复制
import socket
socket.gethostbyname(socket.gethostname())

这并不总是有效的(在/etc/hosts中主机名为127.0.0.1的机器上返回127.0.0.1 ),gimel显示的是被动的,请改用socket.getfqdn()。当然,您的机器需要一个可解析的主机名。

票数 522
EN

Stack Overflow用户

发布于 2008-10-03 12:35:14

我刚刚发现了这个,但它看起来有点老土,但是他们说我在nix上试过了,我在windows上试过了,它起作用了。

代码语言:javascript
复制
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访问权限,并且没有本地代理。

票数 558
EN

Stack Overflow用户

发布于 2012-02-14 04:52:32

在Linux上:

代码语言:javascript
复制
>>> 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'
>>> 
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/166506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档