如何使用python扫描本地局域网ip占用?

Published on Aug. 22, 2023, 12:14 p.m.

你可以使用 Python 的 socket 和 subprocess 模块来扫描本地局域网中 IP 的使用情况。

以下是一个可能的代码示例,它使用 ping 命令扫描本地网络中的 IP 地址:

import socket
import subprocess

# 获取主机名
host = socket.gethostname() 

# 获取本地 IP 地址
ip = socket.gethostbyname(host) 
prefix = '.'.join(ip.split('.')[:-1]) + '.'

# 扫描 1-255 范围内的 IP
for i in range(1, 256):
    # 构造 IP 地址
    test_ip = prefix + str(i)
    # 使用 ping 命令测试 IP 是否可达
    ping = subprocess.Popen(['ping', '-c', '1', '-W', '1', test_ip], stdout=subprocess.PIPE)
    ping.wait()
    if ping.returncode == 0:
        print(f'{test_ip} is up!')
    else:
        print(f'{test_ip} is down.')

该代码使用 socket.gethostname() 获取本地主机名,再使用 socket.gethostbyname() 获取本地 IP 地址。然后,它使用循环构造可能的 IP 地址并使用 subprocess.Popen() 运行 ping 命令来检查 IP 是否可达。

注意,这种方法仅适用于本地局域网中的计算机,对于外部网络或具有防火墙保护的计算机,可能会产生错误或不准确的结果。

Tags: