📜  使用 scapy 模块进行网络扫描 - Python

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

使用 scapy 模块进行网络扫描 - Python

Scapy 是 Python2 和 Python3 都支持的库。它用于与网络上的数据包交互。它具有多种功能,我们可以通过这些功能轻松伪造和操纵数据包。通过 scapy 模块,我们可以创建不同的网络工具,如 ARP Spoofer、网络扫描器、数据包转储器等。该模块可用于创建与网络安全和道德黑客相关的更高级工具。

scapy模块的安装:
由于默认情况下 Python3 库中不包含 scapy 模块,因此我们必须使用 pip 将其添加到我们的Python库中。在您的 Linux 终端中执行此命令以获取 Python3 的 scapy 模块。

pip3 install scapy-python3

什么是网络扫描?
网络扫描是指扫描我们连接的整个网络,并试图找出连接到我们网络的所有客户端。我们可以使用他们的 IP 和 MAC 地址来识别每个客户。我们可以使用 ARP ping 来找出我们网络中的活动系统。

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

ARP():这个函数定义在 scapy 模块中,它允许我们创建 ARP 数据包(请求或响应)。默认情况下,如果我们调用它,它会为我们创建一个 ARP 请求包。

import scapy.all as scapy
  
request = scapy.ARP()

summary():这个方法为我们提供了我们创建的数据包的状态。它不提供有关数据包的详细信息,它只是为我们提供了基本概念,例如数据包的类型、数据包的目的地等。
例如,如果我们想使用 scapy 模块中的ARP()方法创建一个 ARP 数据包,并且想查看数据包的摘要,那么我们可以通过创建 ARP 类的对象来做到这一点。

import scapy.all as scapy
  
request = scapy.ARP()
print(request.summary())

现在我们已经创建了一个 ARP 请求包。这里程序的输出将是这样的——
汇总功能图片

show() 方法:此方法与summary()方法非常相似。它提供了有关数据包的更详细信息。此函数的用法也与summary()方法非常相似。

import scapy.all as scapy
  
request = scapy.ARP()
print(request.show())

ls()函数:此方法存在于 scapy 类中。通过使用这种方法,我们可以看到我们可以为特定数据包设置哪些字段。
在我们的示例中,我们将创建一个 ARP 数据包,并在 ls()函数的帮助下,我们将查看该数据包的可用字段。

import scapy.all as scapy
  
request = scapy.ARP()
print(scapy.ls(scapy.ARP()))

下面是Python的实现——

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

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

输出: