tcpdump вывода tcpreplay не соответствует вводу
У меня возникла проблема, из-за которой на некоторых машинах количество байтов, которое tcpdump сообщает о выводе tcpreplay, не соответствует вводу tcpreplay.
В частности, tcpdump всегда сообщает на 14 байт больше, чем pcap, данный tcpreplay.
Для репликации я создал простой пакет в scapy, используя команду:
packet = Ether()/IP(dst='1.2.3.4')/TCP()/Raw(load='S:' + ('-' * 64) + ':E')
wrpcap("tcp.pcap", packet)
Я установил виртуальные интерфейсы с:
ip link add front1 type veth peer name back1
ifconfig back1 up
ifconfig front1 up
Контролируйте ввод в интерфейс с помощью:
sudo tcpdump -XX -Q out -i front1
Затем отправьте сгенерированный пакет с:
sudo tcpreplay -i front1 tcp.pcap
Монитор tcpdump производит:
0x0000: d4ae 52c1 2005 2c59 e547 2ca4 0800 4500 ..R...,Y.G,...E.
0x0010: 006c 0001 0000 4006 d31c 9e82 04e7 0102 .l....@.........
0x0020: 0304 0014 0050 0000 0000 0000 0000 5002 .....P........P.
0x0030: 2000 b4a6 0000 533a 2d2d 2d2d 2d2d 2d2d ......S:--------
0x0040: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------
0x0050: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------
0x0060: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------
0x0070: 2d2d 2d2d 2d2d 2d2d 3a45 0000 0000 5400 --------:E....T.
0x0080: 0000 0000 0000 0000 ........
Принимая во внимание, что tcpdump исходного файла производит:
0x0000: d4ae 52c1 2005 2c59 e547 2ca4 0800 4500 ..R...,Y.G,...E.
0x0010: 006c 0001 0000 4006 d31c 9e82 04e7 0102 .l....@.........
0x0020: 0304 0014 0050 0000 0000 0000 0000 5002 .....P........P.
0x0030: 2000 b4a6 0000 533a 2d2d 2d2d 2d2d 2d2d ......S:--------
0x0040: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------
0x0050: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------
0x0060: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------
0x0070: 2d2d 2d2d 2d2d 2d2d 3a45 --------:E
То есть монитор выдает содержимое, идентичное файлу, с добавлением 14 дополнительных байтов.
Похоже, это происходит независимо от размера ввода.
Я проверил, что эта проблема не возникает на других машинах, но не могу определить параметры, которые вызывают ее.
Некоторая информация о версии:
$ tcpreplay -V
tcpreplay version: 3.4.4 (build 2450) (debug)
Copyright 2000-2010 by Aaron Turner <aturner at synfin dot net>
Cache file supported: 04
Not compiled with libdnet.
Compiled against libpcap: 1.7.4
64 bit packet counters: enabled
Verbose printing via tcpdump: enabled
Packet editing: disabled
Fragroute engine: disabled
Injection method: PF_PACKET send()
$ tcpdump --version
tcpdump version 4.9.2
libpcap version 1.7.4
OpenSSL 1.0.2g 1 Mar 2016
Работает на Ubuntu 16.04.5
1 ответ
Это связано с ошибкой в ядре Linux 4.15.0, о которой сообщалось в следующем отчете об ошибке:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1782544