2012-03-08 8 views
7

私は現在、C#で少しチャットユーティリティを使っています。
問題は、すべてのマシン上の特定のポートのネットワークをスキャンする方法を理解できないことです。私は現在、この方法ConstParams.iPortが、私は(ここでは6910)をスキャンしたいポートであるネットワーク上の接続を待っているポートをスキャンする方法

IPGlobalProperties network = IPGlobalProperties.GetIPGlobalProperties(); 
    IEnumerable<IPEndPoint> connections = network.GetActiveTcpListeners() 
                 .Where(x => x.Port == ConstParams.iPort); 

を使用しています。

問題は、返される値は、ローカルポートおよび「0.0.0.0」のIPアドレス...私は現在、ネットワーク上のすべての開いているポート(6910)をスキャンすることができますどのように

であるということですか?

+1

。 –

答えて

9

よりもむしろポートスキャンを使用して、私はあなたがマルチキャスト/ブロードキャスト通信に基づいて、単純な発見メカニズムを実装することをお勧めします。

起動時に、アプリケーションはIP /ポート情報をブロードキャスト/マルチキャストする必要があります。実行中のすべてのインスタンスは、このメッセージにIP /ポート情報で応答する必要があります。この種の検出メカニズムは実装が簡単で、実行時の方が高速で、ポートスキャンアプローチよりも動的です。

+0

いくつかの例を表示できますか? – rkmax

0

GetIPGlobalPropertiesはローカルマシンに関する情報のみを返します(http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalproperties.getipglobalproperties.aspxを参照)。

ネットワーク上の他のどのマシンがそのポートを開いているかを調べるには、そのポートで接続しようとする一連のIPを反復処理する必要があります。これを照会する中央リポジトリはありません。

この記事は、アプローチを説明しますhttp://www.dijksterhuis.org/building-a-simple-portscanner-in-c/

1

スキャンポートが不適切な場合は、ネットワーク内のマシンのファイアウォールを攻撃者として表示する可能性があります。ネットワーク上の侵入検知システムも同様にトリガされる可能性があります。あなたが必要とするもののために多くのオーバーヘッドがあります。

私は別のオプションは、いずれかのWebサーバ(PHPスクリプト、asp.netページなどで、集中管理サーバーを持っているだろう http://www.codeproject.com/Articles/1705/IP-Multicasting-in-C

他のクライアントを発見するためにUDPを使用してブロードキャストまたはマルチキャストを行うことをお勧めします)またはチャットクライアントが起動時に接続するウェブサービス(REST)であり、それはIP /ポートをリッスンしており、次にネットワーク上の他のクライアントの最近発表されたすべてのIP /ポートのリストを受信する。 IEは5分ごとにPOSTします.IPが10分間POSTしないと、リストから削除されます。あなただけのIPを取得するために、それにWeb要求を送信する必要があると思い http://www.whatismyip.com/faq/automation.asp

は、マシンのパブリックIPを取得するには、このページをチェックしてください可能性があります。非0.0.0.0/127.0.0を取得したい場合。ローカルインタフェースの1 IPは、あなたがこれらの投稿をチェックアウトすることができます:

* nmapの*作品はあなたを助けるかもしれない方法の説明を見ると

Get local IP address

How do I get the Local Network IP address of a computer programmatically? (C#)

関連する問題