Я заметил, что для передачи однопакетного файла с удаленного FTP-сайта на локальный хост в Linux Wireshark всегда может захватывать пакеты в правильном порядке, но не в tcpdump/libpcap или просто recvfrom на RAW_PACKET с беспорядочным режимом.Разный порядок пакетов в Wireshark vs tcpdump/libpcap?
В первом ответе «полная передача» всегда перед одним пакетом данных (в разных соединениях, поэтому нет переупорядочения TCP), но в последнем случае пакет данных всегда поступает первым - что явно неверно в соответствии с протоколом и реализация FTP-серверов, так как «передача завершена» отправляется после данные отправляются - и если клиент получил ее перед данными, она перестала бы ждать подключения к данным, чего не было, так как я вижу данных. Таким образом, libpcap/tcpdump фактически захватывает пакеты в неправильном порядке, но такой проблемы нет в Wireshark?
Как это возможно ??? Wireshark также использует libpcap ...
Я обнаружил, что если сырые пакеты захватываются «ETH_P_IP» (только IP-пакет), порядок от пакетов из разных соединений будет правильным (как в Wireshark), но не «ETH_P_ALL», который захватывает все! Тем не менее ETH_P_ALL является значением по умолчанию в tcpdump, так что он действительно сломан? – AqD
Оба Wireshark и tcpdump используют libpcap для захвата трафика, а libpcap *** ALWAYS *** использует 'ETH_P_ALL'. –