Python程序:查找客户端的IP地址

2025年1月5日 | 阅读6分钟

引言

连接到 TCP/IP 网络的所有设备(计算机、路由器、手机等)都会被分配一个 IP(Internet Protocol)地址,该地址允许节点相互通信。它有助于在网络中识别和查找设备。在 IPv4 中,192.168.1.35 是一个 32 位 IP 地址的示例。通常,IP 地址以人类可读的格式显示。Python 的 `socket` 模块可用于确定客户端的 IP 地址。为此,需要创建一个基本服务器,该服务器使用 `getpeername()` 函数获取客户端的 IP 地址并监听传入连接。

使用 Socket 库查找 IP 地址

Python 用户可以利用 `socket` 库来获取与网络相关的函数,例如确定客户端的 IP 地址。为此,需要创建一个监听给定端口以接收传入连接的基本服务器。通过使用 `getpeername()` 函数,服务器可以获取并显示连接到它的客户端的 IP 地址。借助此 `socket` 库方法,可以更轻松地获取远程终端的地址。这种方法在需要了解客户端 IP 地址的情况下非常有用,例如网络诊断和日志记录。`socket` 库可以更轻松、更有效地检索客户端信息。

示例

输出

Waiting for a connection...
Client IP Address: 192.168.1.35

说明

为了确定客户端的 IP 地址,该脚本利用了 Python 的 `socket` 包。使用 `socket`,首先创建一个套接字对象,`socket` 和 `AF_INET` (IPv4)。`sock stream` (TCP)。套接字绑定到端口 12345 和所有 0.0.0.0 网络接口。服务器可以使用 `listen(1)` 函数一次接受一个传入连接。随后,服务器显示“等待连接…”,同时等待客户端连接。当客户端连接时,`accept()` 会返回一个用于连接的新套接字对象以及客户端的地址。打印 `Addr[0]` - 客户端的 IP 地址。为了确保正确释放资源,连接和服务器套接字会在最后关闭。网络监控和诊断可以从这个过程中受益。

使用 OS 模块查找 IP 地址

您可以使用 Python 的 `os` 模块,该模块提供了与操作系统交互的接口,来确定计算机的 IP 地址。您可以通过使用 `os.popen()` 或 `os.system()` 来运行系统命令,从而获取有关网络配置(包括 IP 地址)的信息。例如,Windows 上可以使用 `ipconfig` 命令,而类 Unix 系统上可以使用 `ifconfig` 或 `ip addr display` 命令。通过使用此技术,可以捕获这些命令的输出,并通过解析提取 IP 地址。此方法非常适用于需要适应不同操作系统或网络库可能不存在的脚本。此方法非常适用于需要适应不同操作系统或网络库可能不存在的脚本,提供了灵活性和适应性。此外,这种方法可确保跨不同环境的兼容性,使其成为网络配置任务的通用解决方案。

示例

输出

Windows IP Configuration

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : example.com
   IPv4 Address. . . . . . . . . . . : 192.168.1.100
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.1

Ethernet adapter VirtualBox Host-Only Network:

   Connection-specific DNS Suffix  . :
   IPv4 Address. . . . . . . . . . . : 192.168.56.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0

根据运行脚本的计算机的网络配置,此输出可能会有所不同。

说明

当脚本在 Windows 计算机上运行时,其输出与在命令提示符中运行 `ipconfig` 命令时得到的输出有些相似。根据系统中可用的网络接口,输出包括 IP 地址、子网掩码、默认网关等详细网络配置信息。

通过运行 `ipconfig` 命令并借助 `os` 模块解析结果,此 Python 脚本可以找到 Windows 主机的 IP 地址。使用 `os.popen('ipconfig')` 命令运行 `ipconfig` 命令来获取网络配置详细信息,然后读取输出。脚本使用的正则表达式 `re.findall(r'IPv4 Address[^\:]*\: (\d+\.\d+\.\d+\.\d+)', output)` 用于在命令的输出中查找 IPv4 地址格式。如果未找到 IP 地址,则会显示一条通知;如果找到了 IP 地址,则会将其打印到控制台。通过利用操作系统的内置功能,可以有效地检索网络信息。

使用 OS 模块查找 IP 地址

Python 用户可以使用 `requests` 模块与提供公共 IP 地址的外部服务进行通信,以获取计算机的 IP 地址。要使用此方法,您必须向 httpbin.org 或 ipify.org 等网站发送 HTTP 请求,网站将响应计算机的公共 IP 地址。`requests` 模块通过简化管理响应和发送 HTTP 请求,使得获取 IP 地址的过程变得高效。当本地方法可能无法产生可靠结果时,这种策略对于确定受防火墙或 NAT 保护的计算机的公共 IP 地址尤其有用。

Python 的 `requests` 模块允许用户与公开计算机公共 IP 地址的外部服务进行交互。此方法涉及向网站(例如 httpbin.org 或 ipify.org)发送 HTTP 请求,并接收计算机的公共 IP 地址作为响应。`requests` 模块通过方便地发送和处理 HTTP 请求和响应来简化此过程,这使得获取 IP 地址成为一项简单有效的活动。当本地方法可能无法产生准确结果时,这种策略对于查找防火墙或网络地址转换 (NAT) 背后的系统的公共 IP 地址特别有用。用户可以通过使用 `requests` 模块获得准确的公共 IP 信息,这使他们能够绕过本地网络配置施加的限制。这对于各种互联网服务、远程访问和网络诊断是必需的。此外,此技术确保检索到的 IP 地址反映的是计算机在互联网上的身份,而不仅仅是在本地网络上的身份。

示例

输出

Public IP Address: 203.0.113.42

说明

此 Python 脚本使用 `requests` 模块来查找计算机的公共 IP 地址。在收到 HTTP GET 请求后,ipify API 以 JSON 格式返回公共 IP 地址。脚本从 JSON 响应中检索并发布 IP 地址。当计算机受到防火墙或 NAT 的保护时,本地方法可能无法提供准确的信息。在这种情况下,此策略对于获取公共 IP 地址特别有用。该脚本通过利用 `requests` 模块,确保与外部在线服务交互和检索关键网络数据既简单又有效。

结论

总而言之,有几种方法可以使用 Python 来确定计算机的 IP 地址,每种方法都有其独特的优势。对于网络监控和诊断,`socket` 库通过建立基本服务器提供了一种获取客户端 IP 地址的简单方法。`os` 模块可用于运行 `ifconfig` 或 `ipconfig` 等系统命令来检索 IP 地址,因此它与各种操作系统兼容。此外,`requests` 模块通过联系外部 Web 服务提供了一种查找公共 IP 地址的简单方法;这对于受到防火墙或 NAT 保护的计算机特别有用。每种技术都有其独特的功能,可以根据特定需求和网络环境进行选择。了解这些技术可以有效地提高使用 Python 管理和诊断网络配置的能力。