编写网络嗅探工具
count
:表示要捕获的数据包的数量。默认值为0,不限制数量。store
:表示是否要保存捕获到的数据包,默认值为1.prm
:此参数是一个函数,会应用到每一个捕获到的数据包上,如果这个函数呦返回值,将会显示出来。默认为空。iface
:表示要使用的网卡或者网卡列表。
- sniff()函数支持过滤器,可以使用BPF规则(伯克里克过滤语法),BPF使用“原语”对数据包进行描述,可以使用“host”描述主机,“port”描述端口,也支持“与、或、非”等逻辑运算。使用这种语法的过滤器称为BPF表达式,每一个表达式包含一个或多个原语,每一个原语有包含一个或多个限定词,如:
Type
:用来规定使用名字或数字代表的类型。如host、net、port。Dir
:规定流量的方向,例如:src、dst、src and dst。Proto
:规定匹配的协议,例如:ip、tcp、arp。
- 只捕获与网络中某一IP主机进行交互的流量: host 192.168.1.6
- 只捕获与网络中某一个MAC地址的主机交互的流量:ether host 00-1z-z0-52-e2-w0
- 只捕获来自网络中某一个IP的主机的流量: src host 102.168.1.6
- 只捕获去往网络中某一个IP的主机的流量:dst host 192.168.1.6,host可省略。
- 只捕获23端口的流量:port 23
- 捕获除了23端口2的流量:!23
- 只捕获目的端口为80的流量:dst port 80
- 只捕获ICMP流量:icmp
- 只捕获type为3,code为0,的ICMP流量:icmp[0] = 3 && icmp[1] =0
- 实例:源地址为192.168.1.6,端口为80的tcp报文。
>>> sniff(filter = "dst 192.168.1.6 and tcp port 80",prn = lambda x:x.summary())
>>> sniff(filter = "dst 192.168.1.6 and tcp port 80",prn = lambda x:x[IP].src,count =5)
>>>def Callback(packet):
printpacket.show()
>>>sniff(prn = Callback)
>>>packet = sniff(count =3) *
>>>wrpcap("demo.pacp",packet)
调用WireShark查看数据包
- 在Scapy中产生一个数据包
packets = IP(dst = "www.baidu.com")/ICMP()
- 在wireshark中打开
wireshark(packets)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200409120300807.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg4OTY1NQ==,size_16,color_FFFFFF,t_70)
- 1是数据包列表,2是数据包详细信息,3是数据包原始信息。
- 2中,数据包一共三层,依次为Frame、IP、ICMP