忽略时间戳,快速对比tcpreplay和tcpdump数据包pcap数据包一致性
tcpdump
使用 `tcpdump` 提取数据包内容
tcpdump -r capture.pcap -n -e -tttt -l | sed 's/^\([0-9:.]*\) IP [^ ]* > [^ ]*: / /'
解释:
- `-r capture.pcap` 读取捕获文件。
- `-n` 仅显示 IP 地址和端口,不进行 DNS 解析。
- `-e` 显示以太网头部。
- `-tttt` 显示时间戳。
- `-l` 使输出行缓冲(可以实时查看输出)。
- `sed` 用来移除时间戳部分。
tshark
tshark -r capture.pcap -T fields -e ip.src -e ip.dst -e udp.srcport -e udp.dstport -e data > packet_data.txt
解释:
- `-r capture.pcap` 读取捕获文件。
- `-T fields` 输出特定字段。
- `-e` 指定需要的字段(如源 IP、目的 IP、源端口、目的端口和数据)。
- `> packet_data.txt` 将结果写入文件。
diff比较数据包内容
假设你已经有两个文件 `data1.txt` 和 `data2.txt`,分别是 `tcpreplay` 和 `tcpdump` 数据包的提取内容,使用 `diff` 比较:
diff data1.txt data2.txt
使用工具进行比较.比如 `Wireshark` 的 `MergeCap` 工具
也可以使用一些专门的网络数据包比较工具,比如 `Wireshark` 的 `MergeCap` 工具,
Python脚本
import redef extract_data_from_line(line):# 正则表达式提取数据包内容match = re.match(r"IP (\S+) > (\S+): (\S+), length (\d+)", line)if match:return f"{match.group(1)} {match.group(2)} {match.group(3)} {match.group(4)}"return Nonedef extract_data_from_file(filename):with open(filename, 'r') as file:data = [extract_data_from_line(line) for line in file if extract_data_from_line(line)]return datadef compare_files(file1, file2):data1 = extract_data_from_file(file1)data2 = extract_data_from_file(file2)set1 = set(data1)set2 = set(data2)only_in_file1 = set1 - set2only_in_file2 = set2 - set1if only_in_file1:print("Only in file 1:")for item in only_in_file1:print(item)if only_in_file2:print("Only in file 2:")for item in only_in_file2:print(item)if __name__ == "__main__":compare_files('data1.txt', 'data2.txt')