0
我有一個特定的網卡(NetFPGA),它在ICMP Echo Reply數據包的末尾添加了一個8字節的時間戳(忽略校驗和)。當我試圖通過這種方式讀取數據包的原始套接字:在Linux原始套接字中接收完整修改的icmp數據包
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字節的時間戳?
感謝
伊
你可以嘗試使用帶有AF_PACKET選項的socket()嗎? (有關詳情,請參見man 7包)這將幫助您從L2級捕獲數據包,因此丟棄時間戳信息的機會可能會消失。我懷疑您需要在設備驅動程序級別捕獲數據包以獲取時間戳記信息。 –
是的。直到現在,只有第二種選擇(套接字(AF_PACKET,SOCK_RAW,htons(ETH_P_IP)))爲我工作。但是這樣我就必須解析我自己的所有數據,並找出它是否與我有關的ICMP數據包。我尋找更好的L2數據包分辨率,但沒有找到。 – Ido
正在爲您的目的解析問題嗎? –