Я новичок в libpcap. Прямо сейчас я пишу программу C для захвата, изменения и внедрения пакетов. У меня есть три компьютера: A, B, C. A отправляет ENIP-пакеты на B с интервалом 10 мс. C перехватывает пакеты, отправленные A, и модифицирует пакеты путем: 1) увеличения бита последовательности на 1; 2) изменение полезной нагрузки. Например, A отправляет пакеты с seq = 1. C перехватывает этот пакет, изменяет его бит seq на 2, изменяет полезную нагрузку и вводит ее в сеть. Я надеюсь, что компьютер B сможет получить этот пакет, отправленный C, прежде чем получит пакет с seq = 2, отправленный A.
Моя программа c использует pcap_loop для захвата пакетов и pcap_inject для внедрения пакета. Этот процесс занимает всего несколько микросекунд. Однако B не мог получить пакеты, отправленные C, до получения пакетов, отправленных B. Что я наблюдал на компьютере B, так это то, что B получает несколько пакетов, отправленных A (например, с seq = 1,2,3,... 30), затем B получает несколько пакетов, отправленных C (seq = 2,3,4,...,31), затем пакеты, отправленные A (seq = 31,32,...90), затем пакеты, отправленные C (seq = 32,...91)...
Если я изменю интервал A на 1 секунду, этой проблемы не будет...
Я думаю, может быть, есть какое-то время прерывания для pcap_loop? Может, pcap_loop перехватывает пакеты 0,5 секунды и потом пачкой отправляет их в сеть? Я не уверена...