如何对比两个pcap文件找出防火墙丢弃的数据包?
防火墙规则验证:自动化对比PCAP文件找出丢弃数据包
用Scapy实现(完全贴合需求,保留PCAP格式处理)
你已经在使用Scapy生成测试包,用它直接实现对比是最优解。核心逻辑是:提取测试包与捕获包的唯一标识,找出预期存在但实际未捕获到的数据包,这类包就是被防火墙丢弃的;同时可反向验证规则是否生效(比如预期拒绝的包是否确实未出现)。
示例代码
from scapy.all import rdpcap, wrpcap def get_packet_unique_key(pkt): # 生成数据包唯一标识,覆盖TCP/UDP/ICMP主流协议 if not pkt.haslayer('IP'): return None src_ip = pkt['IP'].src dst_ip = pkt['IP'].dst proto = pkt['IP'].proto if proto == 6: # TCP return (src_ip, dst_ip, proto, pkt['TCP'].sport, pkt['TCP'].dport) elif proto == 17: # UDP return (src_ip, dst_ip, proto, pkt['UDP'].sport, pkt['UDP'].dport) elif proto == 1: # ICMP return (src_ip, dst_ip, proto, pkt['ICMP'].type, pkt['ICMP'].code) # 其他协议可按需扩展 return None # 加载两个PCAP文件 expected_pkts = rdpcap("expected_test_rules.pcap") captured_pkts = rdpcap("inbound_traffic_captured.pcap") # 提取标识集合 expected_keys = set(get_packet_unique_key(p) for p in expected_pkts if get_packet_unique_key(p)) captured_keys = set(get_packet_unique_key(p) for p in captured_pkts if get_packet_unique_key(p)) # 找出被丢弃的数据包标识及具体包 dropped_keys = expected_keys - captured_keys dropped_pkts = [p for p in expected_pkts if get_packet_unique_key(p) in dropped_keys] # 输出结果并保存被丢弃的数据包为PCAP(保留格式) print(f"共检测到{len(dropped_pkts)}个被防火墙丢弃的数据包") wrpcap("dropped_packets.pcap", dropped_pkts)
Wireshark/tshark辅助实现
Wireshark无原生PCAP对比功能,但可通过tshark导出特征后对比:
- 导出预期PCAP的关键字段到CSV:
tshark -r expected_test_rules.pcap -T fields -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e udp.srcport -e udp.dstport -e icmp.type -e icmp.code -E separator=, > expected.csv - 导出捕获PCAP的字段到CSV:
tshark -r inbound_traffic_captured.pcap -T fields -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e udp.srcport -e udp.dstport -e icmp.type -e icmp.code -E separator=, > captured.csv - 用Python/shell脚本对比两个CSV,找出预期存在但捕获中缺失的条目,对应被丢弃的数据包。
其他替代方案
如果pcap-diff和Wirediff未满足需求,可尝试:
- tcpreplay + 捕获重放:用tcpreplay将预期PCAP重放到防火墙入口,同时捕获防火墙出口流量,再用上述Scapy脚本对比重放包与捕获包,排除原捕获的干扰因素。
- Suricata规则匹配:编写简单规则匹配所有预期允许的数据包,用Suricata分析捕获PCAP,统计未被匹配到的规则对应的数据包,即为被丢弃的包。
内容的提问来源于stack exchange,提问作者Payflow
相关产品推荐
相关产品推荐

