2016-06-15 2 views
1

TCPヘッダーフィールド(シーケンス番号やTCPタイムスタンプフィールドなど)にアクセスする必要があるアプリケーションを作成しています。TCPヘッダーフィールドへのアクセス(ローソケットAPIなし)

rawソケットでリッスンすることなくソケットAPIで操作することで、シーケンス番号(または他のヘッダーフィールド)を取得することはできますか? (私はすべてのパケットをフィルタリングすることを避けたい)。

私はTCP_INFOを見ていますが、情報は限られています。

たとえば、recvmsg()を呼び出してデータバッファを取得した後、その受信データバッファの最後のバイトを配信したセグメントのシーケンス番号を知ることは可能ですか?

ありがとうございます。

答えて

2

パケットをキャプチャするためにlibpcapを使用できます。このlibでは、Wiresharkと同じ構文を使用してパケットフィルタを指定できるため、キャプチャされたパケットを1つの接続に限定することができます。 1つの欠点は、通常の方法でパケットを受信しなければならないことです。これは少し複雑なもので、パフォーマンスのオーバーヘッドが増えます。

アップデート:rawソケットを開き、ソケットオプションSO_ATTACH_FILTERを使用してBerkeley Packet Filterを設定することもできます。詳細はこちら:https://www.kernel.org/doc/Documentation/networking/filter.txt。しかし、あなたのコードにもIPスタックのTCP部分を実装する必要があります。

関連する問題