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地址