欢迎访问宙启技术站
智能推送

Python中如何获取系统的IP地址

发布时间:2024-01-17 12:32:17

在Python中可以使用socket模块来获取系统的IP地址。socket模块提供了许多网络编程相关的函数和类。其中,socket.gethostbyname()函数可以用于获取主机名对应的IP地址。

下面是一个使用socket.gethostbyname()函数获取系统IP地址的示例:

import socket

def get_local_ip():
    # 获取本机主机名
    hostname = socket.gethostname()
    # 获取本机IP地址
    ip_address = socket.gethostbyname(hostname)
    return ip_address

if __name__ == '__main__':
    local_ip = get_local_ip()
    print('本机IP地址:', local_ip)

运行上面的代码,会返回本机的IP地址。

另外,如果需要获取多个IP地址,可以使用socket.gethostbyname_ex()函数,它返回一个三元组,其中 项是主机名,第二项是别名列表,第三项是IP地址列表。下面是一个使用socket.gethostbyname_ex()函数获取所有IP地址的示例:

import socket

def get_all_ips():
    # 获取本机主机名
    hostname = socket.gethostname()
    # 获取主机名、别名列表和IP地址列表
    ips = socket.gethostbyname_ex(hostname)[2]
    return ips

if __name__ == '__main__':
    ip_addresses = get_all_ips()
    print('本机所有IP地址:')
    for ip in ip_addresses:
        print(ip)

运行上面的代码,会返回本机的所有IP地址。

需要注意的是,gethostbyname()gethostbyname_ex()函数只能获取本机的IP地址,无法获取其他主机的IP地址。如果需要获取其他主机的IP地址,可以使用subprocess模块执行系统命令ping来获取。下面是一个使用subprocess模块获取其他主机IP地址的示例:

import subprocess

def get_remote_ip(remote_host):
    # 构造ping命令
    command = ['ping', '-c', '1', remote_host]
    # 执行ping命令
    result = subprocess.run(command, capture_output=True, text=True)
    # 提取IP地址
    start_index = result.stdout.find('(') + 1
    end_index = result.stdout.find(')')
    ip_address = result.stdout[start_index:end_index]
    return ip_address

if __name__ == '__main__':
    remote_host = 'www.baidu.com'
    ip_address = get_remote_ip(remote_host)
    print('远程主机{}的IP地址:{}'.format(remote_host, ip_address))

运行上面的代码,会返回远程主机的IP地址。

总结一下,Python中可以使用socket模块的gethostbyname()gethostbyname_ex()函数来获取系统的IP地址。如果需要获取其他主机的IP地址,可以使用subprocess模块执行系统命令ping来获取。