使用 Python 查看局域网内存活主机

在网络管理和安全领域,了解局域网内的活跃主机是一项非常重要的任务。通过查看局域网内的活跃主机,我们可以快速识别出潜在的安全风险和网络故障点。本文将介绍如何使用 Python 编程语言来查看局域网内的存活主机,并提供相应的代码示例。

什么是局域网?

局域网(Local Area Network,LAN)是指在一个相对较小的地理范围内建立的局部网络。它通常由一个路由器、交换机和连接到这些设备的多台计算机组成。局域网内的计算机可以相互通信和共享资源,例如打印机、文件和互联网连接。

如何查看局域网内的存活主机?

要查看局域网内的存活主机,我们需要发送一个特殊的网络请求,称为“ARP 请求”。ARP 请求是一种用于获取目标主机的 MAC 地址的协议。通过发送 ARP 请求,并等待主机的响应,我们可以确定局域网内的存活主机。

在 Python 中,我们可以使用 scapy 模块来发送和接收网络数据包。scapy 是一个强大的网络数据包处理库,它能够让我们以简洁的方式构建和解析各种网络协议。下面是一个使用 scapy 查看局域网内存活主机的示例代码:

from scapy.all import ARP, Ether, srp

# 创建 ARP 请求数据包
arp = ARP(pdst="192.168.1.0/24")
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether/arp

# 发送 ARP 请求并接收响应
result = srp(packet, timeout=3, verbose=0)[0]

# 解析响应数据包
clients = []
for sent, received in result:
    clients.append({'ip': received.psrc, 'mac': received.hwsrc})

# 打印存活主机的 IP 和 MAC 地址
print("存活主机列表:")
print("IP\t\t\tMAC")
for client in clients:
    print(f"{client['ip']}\t\t{client['mac']}")

上述代码中,我们首先创建了一个 ARP 请求数据包,其中 pdst 参数指定了目标 IP 地址范围(例如 192.168.1.0/24 表示查询 192.168.1.1192.168.1.254 的主机)。然后,我们创建一个以太网数据包,并将 ARP 请求数据包作为其负载。接下来,我们使用 srp 函数发送数据包,并设置超时时间为 3 秒。最后,我们解析接收到的响应数据包,并将存活主机的 IP 地址和 MAC 地址存储在一个列表中,并打印出来。

使用示例

接下来,我们将通过一个具体的示例来演示如何使用上述代码来查看局域网内的存活主机。

假设我们的局域网 IP 地址范围是 192.168.0.0/24,我们可以将上述代码保存为一个名为 scan_hosts.py 的文件,并在终端中执行以下命令来运行它:

python scan_hosts.py

执行完毕后,我们将获得一个存活主机列表,其中包含了局域网内的所有存活主机的 IP 地址和 MAC 地址。

总结

通过使用 Python 编程语言和 scapy 模块,我们可以快速地查看局域网内的存活主机。这对于网络管理和安全监控来说是非常有用的。我们可以根据存活主机列表来识别潜在的网络故障点和安全风险,并及时采取相应的措施。希望本文的内容能够帮助你更好地理解如何使用 Python 查看局域网内存活主机。

本文完。

参考资料