查询外网IP地址 python
时间: 2024-12-31 20:39:09 浏览: 13
### 如何使用Python获取公网IP地址
#### 方法一:利用 `socket` 库连接外部服务器
通过创建一个 UDP 套接字并尝试连接到一个已知的外部 IP 地址(如 Google 的 DNS 服务),可以间接获得本机用于访问该目标的服务端口所绑定的真实外网出口 IP。
```python
import socket
dgram = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
dgram.connect(('8.8.8.8', 80))
ip = dgram.getsockname()[0]
finally:
dgram.close()
print(f"My public IP address via socket is: {ip}")
```
这种方法适用于大多数情况,但在某些复杂的 NAT 或代理环境下可能无法得到预期的结果[^1]。
#### 方法二:借助第三方 API 请求返回自身的公网 IP
另一种更可靠的方式是从提供此类信息服务的网站请求数据。这些站点会将客户端发起 HTTP/HTTPS 请求时携带的信息反馈给用户,其中包括了实际使用的公有 IP 地址。
```python
from requests import get
response = get('https://api.myip.la')
if response.status_code == 200:
ip = response.text.strip()
else:
raise Exception("Failed to retrieve the public IP")
print(f'My public IP address via third-party service is: {ip}')
```
这种方式相对简单直接,并且不受本地网络环境的影响较大程度上能保证准确性[^3]。
另外还有一种基于标准库 urllib 实现的方法也可以考虑:
```python
from urllib.request import urlopen
with urlopen('http://checkip.amazonaws.com/') as f:
external_ip = f.read().decode('utf-8').strip()
print(f'Public IP using AWS check IP endpoint: {external_ip}')
```
此段代码同样能够有效地取得用户的公网 IP 地址[^2]。
阅读全文