函数sniff()中可以使用多个参数,下面先来了解其中几个比较重要参数的含义。

(1)count:表示要捕获数据包的数量。默认值为0,表示不限制数量。

(2)store:表示是否要保存捕获到的数据包,默认值为1

(3)prn:这个参数是一个函数,这个函数将会应用在每一个捕获到的数据包上。

如果这个函数有返回值,将会显示出来。默认是空; 返回一个数据包信息

(4)iface:表示要使用的网卡或者网卡列表。

sniff()还支持了过滤器的使用

这个过滤器使用了一种功能非常强大的过滤语法——“伯克利包过滤”语法。
这个规则简称为 BPF,利用它可以确定该获取和检查哪些流量,忽略哪些流量。
BPF可以帮助我们通过比较各个层协议中数据字段值的方法对流量进行过滤。
BPF的主要特点是使用一个名为“原语”的方法来完成对网络数据包的描述,
例如,可以使用“host”来描述主机,“port”来描述端口,同时也支持“与”“或”“非”等逻辑运算。可以限定的内容包括地址、协议等。

一些常见的过滤器。

(1)只捕获与网络中某一个IP的主机进行交互的流量:“host 192.168.1.1”。
(2)只捕获与网络中某一个MAC地址的主机交互的流量:“ether host 00-1a-a0-52-e2-a0”。
(3)只捕获来自网络中某一个IP的主机的流量:“src host 192.168.1.1”。
(4)只捕获去往网络中某一个IP的主机的流量:“dst host 192.168.1.1”,host也可以省略。
(5)只捕获23端口的流量:“port 23”。
(6)捕获除了23端口以外的流量:“!23” 。
(7)只捕获目的端口为80的流量:“dst port 80”。
(8)只捕获ICMP流量:“icmp”。
(9)只捕获type为3,code为0的ICMP流量:“icmp[0] = 3 &&icmp[1] = 0”。

步骤:

在kali上执行脚本,嗅探192.168.72.131,也就是本机,同时在另一个终端保持长ping,用来执行脚本时抓取ping包

        脚本放到最后

python中FCBF_module下载 python ffn包 详细_python

python中FCBF_module下载 python ffn包 详细_IP_02

接着会返回到当前目录一个catch.pacp文件,我们使用wireshark打开

python中FCBF_module下载 python ffn包 详细_网络安全_03

可以看到抓到了去往www.baidu.com(33.156.66.14)的icmp请求和应答报文

python中FCBF_module下载 python ffn包 详细_wireshark_04

python脚本:


from scapy.all import *
import sys

if len(sys.argv) != 2:
    print("Usage: catchPackets<IP>:\neg: catchPackets 192.168.1.1")
    sys.exit()

# 定义IP地址
ip = sys.argv[1]


# 定义callback 回调函数
def callBack(packet):
    print(packet.show())


packets = sniff(filter="host " + ip, prn=callBack, count=5)
# filter表示调用过滤器,规则为BPF,
# prn指定回调函数,每当一个符合filter的报文被探测到时,就会执行回调函数,
# count指定最多嗅探多少个报文(是指符合filter条件的报文,而非全部报文)
# 将抓取的信息 封装成一个 .pcap文件
wrpcap("catch.pcap", packets)