0
我正在使用BSD套接字構建不需要root權限(如跟蹤路徑)的高級traceroute程序。 使用UDP和綁定套接字,我呼籲:從帶有MSG_ERRQUEUE的recvmsg讀取ICMP有效載荷
recvmsg(socket, header, MSG_ERRQUEUE)
我收到關於先前發送的數據包觸發了所謂ICMP通知的信息。 你知道是否可以訪問ICMP有效載荷(應該是之前發送的數據包)?
我從recvmsg手冊頁閱讀:
[..] The payload of the original packet that caused the error
is passed as normal data via msg_iovec. [..]
但我無法找到任何有用的存在,它只是似乎隨機數據(我使用Wireshark的交叉檢查數據)。
我續明白是怎麼回事了所有的地址和指針。例如,您使用「struct sockaddr_in remote;」在堆棧中分配一些空間然後在內存中獲取它的地址並將其轉換爲空指針,然後將其分配給msg.msg_name,然後將數據接收到msg結構中。所以msg結構體得到「struct sockaddr_in remote;」的地址這是由套接字接收的數據過度寫入的。成功的返回狀態究竟是什麼,接收到的總字節數是多少? – 2015-09-08 18:06:18