Python 获取本机外网IP
在实际开发中,有时候我们需要获取本机的外网IP地址。本文将介绍使用Python编程语言来获取本机的外网IP地址,并给出相应的代码示例。
IP地址简介
IP地址是指互联网协议地址,用于唯一标识互联网上的设备。IP地址分为两种类型:内网IP和外网IP。
- 内网IP地址:用于局域网中的设备之间通信。通常由路由器分配,其范围在私有IP地址范围内。
- 外网IP地址:用于设备与互联网之间的通信。通常由互联网服务提供商(ISP)分配。
在本文中,我们将重点关注如何获取本机的外网IP地址。
获取本机外网IP的方法
获取本机的外网IP地址有多种方法,本文将介绍两种常用的方法。
方法一:使用HTTP请求API
许多网站提供了获取本机外网IP地址的API接口,我们可以通过发送HTTP请求获取相应的IP地址数据。下面是一个使用requests
库发送HTTP请求,并解析返回的JSON数据的示例代码:
import requests
def get_public_ip():
url = "
response = requests.get(url)
data = response.json()
ip = data["ip"]
return ip
在上述代码中,我们使用了[ipify](
方法二:解析路由器信息
如果你有路由器的管理员权限,还可以通过解析路由器的信息来获取本机的外网IP地址。不同的路由器品牌和型号可能有所不同,但一般的方法是通过登录路由器的管理页面,查找WAN口的IP地址。下面是一个使用telnetlib
库登录路由器并获取WAN口IP地址的示例代码:
import telnetlib
def get_router_ip():
# 修改为你的路由器IP地址和登录信息
router_ip = "192.168.1.1"
username = "admin"
password = "password"
# 登录路由器
tn = telnetlib.Telnet(router_ip)
tn.read_until(b"Username: ")
tn.write(username.encode('ascii') + b"\n")
tn.read_until(b"Password: ")
tn.write(password.encode('ascii') + b"\n")
# 获取WAN口IP地址
tn.write(b"ifconfig eth0\n")
result = tn.read_until(b"rx bytes")
lines = result.decode('ascii').split("\n")
wan_ip = None
for line in lines:
if "inet addr:" in line:
wan_ip = line.split("inet addr:")[1].split()[0]
break
# 关闭连接
tn.write(b"exit\n")
tn.close()
return wan_ip
在上述代码中,我们使用了telnetlib
库登录路由器,并发送命令ifconfig eth0
来获取WAN口的IP地址。
示例代码
下面是一个完整的示例代码,使用了上述第一种方法获取本机的外网IP地址:
import requests
def get_public_ip():
url = "
response = requests.get(url)
data = response.json()
ip = data["ip"]
return ip
if __name__ == "__main__":
public_ip = get_public_ip()
print("本机的外网IP地址是:" + public_ip)
在上述代码中,我们定义了一个get_public_ip
函数来获取外网IP地址,并在if __name__ == "__main__"
中调用该函数打印获取到的IP地址。
总结
本文介绍了如何使用Python编程语言获取本机的外网IP地址。我们通过HTTP请求API和解析路由器信息的方法来实现了获取IP地址的功能,并给出了相应的代码示例。在实际开发中,根据具体的需求和环境选择适合的方法即可。
erDiagram
IP地址 ||--|{ 内网IP地址
IP地址 ||--|{ 外网IP地址