У меня есть конкретная сетевая карта (NetFPGA), которая добавляет 8-байтовую временную метку в конец пакета ICMP Echo Reply (контрольная сумма игнорируется). Когда я попытался прочитать пакет в raw-сокете следующим образом:
recvsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
Я получил только данные IP + ICMP без добавленной метки времени.
Я старался:
recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));
Таким образом, я получаю все и не могу связать ни один адрес.
Также попробовал:
recvsock = socket(AF_INET, SOCK_RAW, htons(ETH_P_IP));
Но ничего не было поймано ..
Любая идея, как я могу открыть необработанный сокет, который будет перехватывать только определенные пакеты эхо-ответа ICMP, но не будет пропускать добавленную 8-байтовую метку времени?
Спасибо
Я делаю
Из того, что я обнаружил, очевидно, нет способа перехватить полный пакет в необработанном сокете и все же заставить сокет выполнить фильтрацию за вас. Что мне нужно было сделать, так это открыть сокет:
recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));
Для перехвата всех входящих IP-пакетов, а затем для фильтрации моих ICMP-пакетов на основе возможностей фильтрации libpcap.
Других решений пока нет …