У меня есть определенная сетевая карта (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.