Python获取本机IP的三种常用方法:公网、Socket与第三方库
本文介绍了Python中获取本机IP地址的三种常用方法。第一种通过访问第三方网站获取公网IP,支持命令行curl;第二种利用内置socket库获取局域网IP,需注意其局限性;第三种使用netifaces第三方库遍历所有网络接口。文章提供了具体代码示例及注意事项,帮助开发者根据实际需求选择合适方案。
方法一:通过专用网站查询
此方法主要用于获取公网IP地址。
常用的查询网址为:http://myip.ipip.net
对应的Python实现代码如下:
import requests
res = requests.get('http://myip.ipip.net', timeout=5).text
print(res)该方式较为便捷,且在命令行环境中同样可用。
curl http://myip.ipip.net

方法二:使用内置socket库
此方式获取的是局域网IP地址。
import socket
# 函数 gethostname() 返回当前正在执行 Python 的系统主机名
res = socket.gethostbyname(socket.gethostname())
print(res)需要注意的是,上述方法无法获取公网IP,且结果可能不稳定(例如在虚拟机环境下可能获取到虚拟机的IP),因此不建议作为首选方案。

如果计算机设备存在指向Internet的路由,可以尝试以下代码:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])该方式同样获取的是局域网IP。

你可以使用ipconfig命令进行核对验证。

另一种适用于所有网络接口的方法,同时也适用于所有公共、私有及外部IP地址。该方案在Linux、Windows和OSX系统上均有效。
import socket
def extract_ip():
st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
st.connect(('10.255.255.255', 1))
IP = st.getsockname()[0]
except Exception:
IP = '127.0.0.1'
finally:
st.close()
return IP
print(extract_ip())注意:若本机局域网IP即为公网IP,则通过此方法获取的结果可视为公网IP。
方法三:使用第三方netifaces库
此方式获取的是局域网IP。
netifaces模块主要用于提供关于网络接口及其状态的信息。
具体代码实现如下:
若未安装该库,需先执行安装命令。
pip3 install netifaces
安装完成后,使用以下代码:
from netifaces import interfaces, ifaddresses, AF_INET
for ifaceName in interfaces():
addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
print(' '.join(addresses))
关于Python获取本机IP地址的几种方法介绍至此,更多相关Python获取本机IP方法内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













