在 Python 中,可以使用scapy
库的sniff
函数进行抓包,并通过设置过滤器来筛选感兴趣的数据包。sniff
函数的过滤器使用 Berkeley Packet Filter (BPF)语法,以下是一些常用的过滤器示例:
- 捕获特定主机的数据包:
host 192.168.1.1
- 捕获特定端口的数据包:
port 80
- 捕获除特定端口外的数据包:
!port 80
- 捕获 ICMP 数据包:
icmp
- 捕获 TCP 数据包:
tcp
- 捕获源地址为特定主机的数据包:
src host 192.168.1.1
- 捕获目的地址为特定主机的数据包:
dst host 192.168.1.1
你可以根据具体的需求组合这些过滤器,例如:filter="tcp and host 192.168.1.1 and port 80"
表示捕获源地址为192.168.1.1
、目的端口为80
的 TCP 数据包。
以下是一个使用sniff
函数进行抓包并设置过滤器的示例代码:
python
from scapy.all import *
# 定义抓包回调函数
def packet_callback(packet):
print(packet.summary())
# 设置过滤器
filter_condition = "tcp and port 80"
# 开始抓包
sniff(filter=filter_condition, prn=packet_callback)
在上述代码中,首先定义了一个抓包回调函数packet_callback
,用于打印抓到的数据包的摘要信息。然后,设置了过滤器filter_condition
,只捕获 TCP 协议且端口为80
的数据包。最后,使用sniff
函数开始抓包,并将过滤器和回调函数作为参数传递给它。
请确保已经安装了scapy
库。你可以使用以下命令来安装:
plaintext
pip install scapy
运行上述代码后,它将开始抓取网络上符合过滤器条件的数据包,并打印出每个数据包的摘要信息。你可以根据需要进一步处理和分析抓取到的数据包。