Получение полного модифицированного пакета icmp в сокете Linux raw

У меня есть конкретная сетевая карта (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-байтовую метку времени?

Спасибо
Я делаю

0

Решение

Из того, что я обнаружил, очевидно, нет способа перехватить полный пакет в необработанном сокете и все же заставить сокет выполнить фильтрацию за вас. Что мне нужно было сделать, так это открыть сокет:

recvsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP));

Для перехвата всех входящих IP-пакетов, а затем для фильтрации моих ICMP-пакетов на основе возможностей фильтрации libpcap.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]