Python中可用requests调用公网API或
获取本机IP地址的API方法详解
获取本机IP地址的常见方式
方法类型 | 适用场景 | 特点描述 |
---|---|---|
系统API调用 | 需要精确控制网络配置的场景 | 直接访问底层网络接口 |
编程语言标准库 | 快速开发跨平台应用 | 封装度高,调用简单 |
第三方网络服务 | 需要获取公网IP或绕过NAT的场景 | 依赖外部服务,存在隐私风险 |
操作系统级API获取方法
Windows系统
import socket def get_windows_ip(): hostname = socket.gethostname() ip = socket.gethostbyname(hostname) return ip print(get_windows_ip())
Linux/macOS系统
# 通过系统命令获取 ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
跨平台通用方法
import socket def get_local_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # 连接Google公共DNS服务器(不实际发送数据) s.connect(("8.8.8.8", 80)) ip = s.getsockname()[0] except Exception: ip = "127.0.0.1" finally: s.close() return ip print(get_local_ip())
编程语言实现对比
语言 | 核心API | 获取方式说明 |
---|---|---|
Python | socket 模块 | 创建UDP连接获取本地socket地址 |
Java | InetAddress 类 | 通过InetAddress.getLocalHost() |
Go | net 包 | 使用InterfaceAddrs() 遍历网卡 |
C# | System.Net 命名空间 | 通过Dns.GetHostEntry 获取 |
注意事项
- 多网卡环境:服务器/虚拟机可能存在多个IP地址,需指定网络接口(如eth0、wlan0)
- NAT环境:内网设备获取的IP通常是私有地址(如192.168.x.x),非公网IP
- 权限要求:部分系统API需要管理员权限才能访问完整网络信息
- IPv6支持:现代系统需同时处理IPv4和IPv6地址格式
相关问题与解答
Q1:如何区分内网IP和公网IP?
- 解答:内网IP范围包括:
- 0.0.0~10.255.255.255
- 16.0.0~172.31.255.255
- 168.0.0~192.168.255.255
公网IP需要通过STUN服务器或公网API验证,示例:import requests
def get_public_ip():
response = requests.get(“https://api.ipify.org?format=json”)
return response.json().get(“ip”)
**Q2:获取的IP地址包含端口号怎么办?**
**解答**:当使用`s.getsockname()`时,返回的是`(ip, port)`元组,需提取第一个元素。
```python
ip, port = s.getsockname()
local_ip = ip
以上就是关于“api 获取本机ip”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复