私は最近、ICMP ネットワークに到達できない [タイプ 1、コード 3 - 宛先に到達できないことを意味します。これは、トレース ルートの動作に関して正しいです。以下の rfc リンクを参照してください] パケットは、送信されたバイト数が 'X を超えた場合にのみドロップされます。 ' [ある] バイト。
** この RFC のセクション 3.1 を確認してください - https://www.rfc-editor.org/rfc/rfc4443#section-3.1 **
たとえば [ソース: FreeBSD ベースのトレース ルート コード]、
i = sendto(sndsock, (char *)outpacket,outpacketlength, 0,
(struct sockaddr *)&Dst, Dst.sin6_len); // to send packet of length "outpacketlength", from source buffer "outpacket" and to destination "Dst".
...
retval = recvmsg(rcvsock, mhdr, 0); // use recvmsg for receiving reply.
質問
'X' バイトのデータを malloc して送信すると、受信バッファーに応答が受信されますが、その制限を超えません。つまり、「X」バイトのバッファを malloc してリセットしても、「outpacketlen」が「X」バイトより大きい場合、retval は常に 0 です。しかし、パケット キャプチャを使用すると、ホストで受信したパケットが表示されます。つまり、パケットを受信しましたが、受信バッファーにありません。どのように/いつこれが可能になりますか [不正なパケット情報はありますか?]?
この問題をデバッグするにはどうすればよいですか?
このようなシナリオをデバッグするために使用できるツールはありますか? BSD で「truss」ユーティリティを使用しました。これを処理するより良い方法はありますか?
インターフェイスとアプリケーションの間で失われたパケットを調査するにはどうすればよいですか? あなたの経験に基づいて、どのツール/ユーティリティ/テクニックを効率的に選択できますか?
何か不足していますか?お時間とご意見をお寄せいただきありがとうございます。それは有り難いです。