3

プロセスで使用されるTCPシーケンス番号を取得する方法(rawソケットなどを使用)はありますか?たとえば、プロセスがアクティブでTCP接続がアクティブな場合、プロセスが開始された時点からそのプロセスのTCPシーケンス番号を取得することは可能ですか、または少なくともプロセスが送受信した最後の確認応答番号を取得することはできますか?もしそうなら、Cまたは低水準言語を使用してそれをどのように行うのですか?

事実上、次のことができます。

  • ProcessAは、アクティブなProcessBに関連付けられた(ProcessAが開始するまでに)すでに送信されているTCPシーケンス番号を検出しますか?

または

  • ProcessAは、事後にProcessAによって受信または送信された最後のACK番号を検出できますか?
4

3 に答える 3

0

winpcap(http://www.winpcap.org/ )を使用して、TCPデータパケットをキャプチャできます。NICを行き来するすべてのパケットにアクセスできるAPIがあります。パケット全体にアクセスできるので、そこから好きな情報を抽出できます。

ただし、もちろん、シーケンス番号を知るには接続を監視する必要があります。ライブパケットからシーケンス番号を抽出する必要があります。すでに実行中の接続に侵入することにした場合は、次のパケットが情報を取得するのを待つ必要があります。

于 2012-11-30T16:30:02.790 に答える
0

プロセスで使用されるシーケンス番号と確認応答番号の値を確認するには、パケットアナライザが必要です。wiresharkは、すべてのプラットフォームで機能するよく知られたパケットアナライザです。

独自のパケットアナライザを作成する場合は、Windows用のライブラリwinpcap、Linux用のpcapを使用する必要があります。

このプログラムをダウンロードして実行します。sniffex

パケットの監視とキャプチャについて多くのアイデアを得ることができます。

于 2013-04-03T16:24:09.930 に答える
0

すでに述べたオプションの中で、libpcapは、プラットフォームに依存しないパケットキャプチャ方法を提供するため、最適です。

ただし、Linuxで私が気に入っている別のオプションは、iptables NFQUEUEターゲットを使用して、関心のあるパケットをユーザースペースに送信することです(おそらくteeと組み合わせて)。この手法を使用すると、iptablesの能力を使用して、関心のあるパケット(たとえば、SYNまたは確率に基づくランダムパケット)のみを取得できます。

NFQUEUEの使用方法の例は、ここここにあります。rawテーブルでNFQUEUEを使用して、すべてのパケットが評価されていることを確認します。Libnetfilter_queueは、パケットの受信プロセスを容易にするために使用する必要があります。

于 2013-04-03T20:18:50.177 に答える