使用 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()))
Steps for creating Network Scanner –
1. Create an ARP packet using ARP() method.
2. Set the network range using variable.
3. Create an Ethernet packet using Ether() method.
4. Set the destination to broadcast using variable hwdst.
5. Combine ARP request packet and Ethernet frame using ‘/’.
6. Send this to your network and capture the response from different devices.
7. Print the IP and MAC address from the response packets.
下面是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 等
输出:
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。