赞
踩
这次的作业要求是分析 ICMP 包的数量与比例,使用 Scapy 库一把梭了…
运行截图如下
scapy 是 python 中能用于网络嗅探的非常强大的第三方库。可以用于构建、发送、解码和分析网络数据包。之前为了获取同一局域网下的其他主机的 IP 和 MAC,就使用了 “利用 scapy 伪造 arp 请求及解析回传数据包” 这种方法。
Scapy 库可以直接在命令行使用,进入 Scapy 后显示如下页面就是安装成功了。
相关命令如下
# 查看所有支持的协议
ls()
# 列出ICMP协议头部字段格式 (只要想查看哪个协议的参数 括号里就填哪个协议
ls(ICMP)
# 列出ICMP包的信息
ICMP().show()
# 列出scapy的所有命令
lsc()
# 列出scapy的配置参数
conf
# 退出scapy
exit()
抓取一段时间的流量包,分析并输出其中 ICMP 包的数量及占比。
使用 sniff 函数可以进行实时抓包和网络数据包分析,例如检测网络攻击、网络性能测试和协议分析等。函数返回值是一个流量包的列表。函数还有很多参数可以设置,函数定义如下
def sniff(count=0, store=1, offline=None, prn=None, filter=None, L2socket=None, timeout=None, opened_socket=None, stop_filter=None, iface=None, *args, **kargs)
记录下部分参数的使用
filter:用于指定过滤条件,只有符合条件的数据包才会被抓取。使用wireshark里面的过滤语法。
iface:用于指定监听的网络接口,即写入要检测的网卡名。默认情况下将监听所有的网络接口。
prn:用于指定抓取到每个数据包后执行的函数。可以在该函数中对抓取到的数据包进行处理或分析。
count:用于指定抓取数据包的数量。默认值为0,表示持续监听。
timeout:用于指定抓取数据包的超时时间,即在给定的时间后停止嗅探。默认情况下将持续监听。
store:用于指定将抓取到的数据包保存或者丢弃,1保存,0丢弃。
监听 WLAN 接口的流量包(网卡名可以在 更改适配器选项 里面看),监听时间是 60s
from scapy.all import sniff def count_packets(pkt): global icmp_count if pkt.haslayer('ICMP'): icmp_count += 1 icmp_count = 0 pkt = sniff(iface='Intel(R) Wi-Fi 6 AX200 160MHz', timeout=60, prn=count_packets) print(pkt) sum = len(pkt) icmp_percent = (icmp_count / sum) * 100 print("一分钟内抓取到的流量包的总数: %d\nICMP包的数量: %d; 占比:%.2f%%" % (sum, icmp_count, icmp_percent))
监听所有接口的流量包,抓够100个包后结束
pkt = sniff(count=100, prn=count_packets)
在 wireshark 抓个包并导出 pcap/pcapng 文件,直接对此文件进行分析
import scapy.all as scapy def count_packets(pkt): global icmp_count for packet in pkt: if packet.haslayer('ICMP'): icmp_count += 1 # pkt = scapy.rdpcap("./test.pcap") pkt = scapy.rdpcap("./test.pcapng") icmp_count = 0 count_packets(pkt) print(pkt) sum = len(pkt) icmp_percent = (icmp_count / sum) * 100 print("流量包的总数: %d\nICMP包的数量: %d; 占比:%.2f%%" % (sum, icmp_count, icmp_percent))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。