📜  如何使用 Scapy 在Python构建 WiFi 扫描仪?

📅  最后修改于: 2022-05-13 01:55:49.752000             🧑  作者: Mango

如何使用 Scapy 在Python构建 WiFi 扫描仪?

在本文中,我们将使用 Scapy 在Python构建一个 WiFi 扫描仪。 WiFi 扫描或网络扫描是指扫描我们连接的整个网络,并尝试找出连接到我们网络的所有客户端。我们可以使用他们的 IP 和 MAC 地址来识别每个客户端。我们可以使用 ARP ping 来找出我们网络中的活动系统。

网络扫描器将发送 ARP 请求,指示谁拥有某个特定的 IP 地址,假设为“192.168.1.1”,该 IP 地址的所有者(目标)将自动响应说他是“192.168.1.1”,并带有该响应,MAC地址也将包含在数据包中,这允许我们在发送广播数据包(向网络中的所有设备发送数据包)时同时成功检索所有网络用户的IP和MAC地址。

创建网络扫描仪的一些重要功能:

  • ARP():这个函数定义在 scapy 模块中,它允许我们创建 ARP 数据包(请求或响应)。默认情况下,如果我们调用它,它会为我们创建一个 ARP 请求包。该方法为我们提供了我们创建的数据包的状态。它没有提供关于数据包的详细信息,它只是给了我们基本的概念,比如数据包的类型是什么,数据包的目的地是什么等等。 例如,如果我们想使用 ARP() 创建一个 ARP 数据包scapy 模块中存在的方法并希望查看数据包的摘要,然后我们可以通过创建 ARP 类的对象来完成此操作。
  • show() 方法:此方法与 summary() 方法非常相似。它提供了有关数据包的更多详细信息。此函数的用法也与 summary() 方法非常相似。
  • ls()函数:此方法存在于 scapy 类中。通过使用这种方法,我们可以看到可以为特定数据包设置哪些字段。

我们将创建一个 ARP 数据包,并在 ls()函数的帮助下,我们将看到该数据包的可用字段是什么。

方法:



  • 使用 ARP() 方法创建一个 ARP 数据包。
  • 使用变量设置网络范围。
  • 使用 Ether() 方法创建以太网数据包。
  • 使用变量 hwdst 将目标设置为广播。
  • 使用'/'组合ARP请求包和以太网帧。
  • 将此发送到您的网络并捕获来自不同设备的响应。#scapy.srp()
  • 打印响应数据包中的 IP 和 MAC 地址。

下面是Python实现:

Python3
import scapy.all as scapy 
  
request = scapy.ARP() 
    
request.pdst = '192.168.0.1/24'
broadcast = scapy.Ether() 
    
broadcast.dst = 'ff:ff:ff:ff:ff:ff'
    
request_broadcast = broadcast / request 
clients = scapy.srp(request_broadcast, timeout = 10,verbose = 1)[0] 
for element in clients: 
    print(element[1].psrc + "      " + element[1].hwsrc)


输出:

解释:

这里 x = 网络范围。例如 x = 192.168.0.1/24、172.16.5.1/16 等

  • pdst 是 ARP 数据包应该去的地方(目标),
  • psrc 是要在目标的 arp 表中更新的 IP,
  • hwsrc 是发送方的硬件地址。
  • hwdst 是目标硬件地址