2011-01-06 14 views
2

最近私は、自分のオープンソースプログラムのパケットを監視し、プログラミングとネットワークについてもっと学びたいと思うプログラムに取り掛かった。また、外部コントロールパネルのようにソースを編集することなく、プログラムに機能を追加したいと考えています。C#ソケットIDを見つけるには?

(私はあなたが疑問に思った場合にはパケットをフィルタリングするためにWPE Proを使用しましたが、WireSharkはそのような単純な作業にはあまりにも面倒です)。

私はそれが何であるかを知っている、と私は前にそれについて質問をしてきましたが、私は1 /インターセプト1を割り当てる/それを使用する方法を見つけ出す傾けます。

右のソケットIDがなければ、私のプログラムでは、それはあなたがパケットをキャプチャしたら、使用しているものソケットIDのソケットを見つけることが可能ですので、もし、私の質問は、何もすることができる文句を言いませんか?

そうでない場合、他のやり方はありますか? - またはVisual Basicのような他の言語が可能ですか?

ありがとうございます。

+0

重複するhttp://stackoverflow.com/questions/2742763/how-to-get-socket-id-handle-descriptor-for-an-already-open-connection-net-c – dzendras

+0

答えは間違っていますSharpPcapはソケットIDを取得できません。私が間違っているなら、それは私が探しているものなので、答えの形で私を修正してください。 – Nick

答えて

4

ソケットIDによって、あなたはsocket()関数の呼び出しが成功の戻り値を意味し、場合、私は方法がないと思います。

すでに知っているように、各IPパケットにはタプル(IPアドレス、ポート)で記述された宛先があり、システム内では1つのソケットのみが正常にバインドできるため、プロセスIDが得られますそのタプルに。 TCPViewのようなユーティリティは、IPタプルをプロセスにマップすることができるので、その情報があなたのために十分な場合は、が存在します

そうでない場合、ターゲットアプリケーションがコラボレーションでない場合、が必要なソケットIDを取得する方法がわかりません。

+0

まず、お返事ありがとうございます。 WPE Proを使用してパケットをフィルタリングする場合、各パケットには接続を一意に識別する同じ「ソケットID」があります。したがって、正しく理解すれば、このソケットIDはプログラムのプロセスIDと同じである可能性があります。プログラムのソースコードが私を助けてくれることを願っていますが、ソケット接続の作成に関連するものは何も見つかりません。 – Nick

+0

さて、私はWPE Proを見ました。それは(また)DLL注入を使用するようです。パケットからソケットIDを取得しません。それはまったく別の話です... – Simone

+0

私は興味深い関数を見つけました:WSADuplicateSocket()、しかしどこでもまともなサンプルを見つけることはできません。 – Nick

0

socket()は、これはあなたがソケットIDとを参照しているものであるならば、Windows上のプロセスのコラボレーションせずにこれを取得する方法が限られているファイル記述子を返します。 linux open FD上のFWIWは、procファイルシステムに列挙されています。

あなたがfdでできることは、ソケットから追加情報を送信することだけです。 fdから読み取ることもできますが、この方法で読み取られたデータはではなく、がソケットを所有するアプリケーションに送信されます。いくつかの調整がなければ、それはちょうどビットとデータの一部を取得するようにあなたが望むものではないでしょう。

ちょうどあなたのプログラムのトラフィックを盗聴することができるようにしたい場合は、私はあなたが実際にそれのために真ん中の男のようにすることができるようにしたいと仮定して、その後、パケットフィルタリングのようなもので十分です。

このような場合は、その後、行うための最善のことは、実際にあなたの他のサービスの代理として、あなたのアプリケーションを設定することです。

これは、リスニングポートを開き、接続が開始されたときに接続を受け付けるプログラムを作成することです。事前に設定されたIP:ポートの組み合わせへの接続をすぐに開き、トラフィックの転送を開始する必要があります。これが書かれたら、それを転送する前にトラフィックを検査し、場合によってはそれを変更するのは簡単なことです。

プログラムがサーバーの場合は、非標準ポートで実行し、このアプリケーションを構成してサーバーの通常のポートを開き、localhostで設定した非標準ポートに接続を転送します。

プログラムがクライアントの場合は、インターセプターアプリケーションをサーバーでポイントし、ボックスでランダムなリスンポートを選択するだけです。次に、このリスンポートにサーバーとして接続するようにクライアントを構成します。

これはほとんど何でも動作します。唯一の注意点は、トラフィックが暗号化されている場合は、(明らかに)それを検査/変更できないことです。これは、アプリケーションをNATの背後に置くことと事実上同じです。

1

このライブラリ:SharpPcapは、C#およびVB.NET(more info)などの任意の.NET言語を使用して、キャプチャ、注入、分析、およびビルドを行うことを約束します。

Wiresharkで使用されているライブラリであり、確実にキャプチャして解析できるライブラリです。

+0

そう、クリスチャンは言った。私はあなたの助けを感謝しますが、SharpPcapはこのようなオプションを不幸に持っていません。 – Nick

関連する問題