2011-01-13 16 views
0

デバイス(クライアント)とコンピュータ(サーバー)を接続するためにC#ソケットを使用しています。 私は、デバイスに接続するIPアドレスとポート番号をユーザーが入力しないようにしようとしていることを除いて、すべてがうまくいきます。代わりに、リスンボックスを使用するすべてのIPアドレスのリストボックスまたはドロップダウンリストが必要です。リッスン(ソケット)したホストのIPアドレスとポート番号をすべて取得する方法があるのだろうか?C#ソケット、すべてのリスニング(ソケット)コンピュータのIPアドレスとポート番号を取得する方法

ありがとうございました! :)

+0

ポートスキャンを行う方法を知りたい場合は、 – SRM

+0

または、特定のポートでリッスンしている場合、ネットワーク内のすべてのコンピュータを確認したい場合は、ポート番号を固定しますか? – dzendras

+0

以下に述べるように、ポートスキャンは悪い考えです。だからdzendras、どのように固定ポート番号を持つことはポートスキャンと異なるでしょうか?ありがとう:) – Jeff

答えて

2

あなたがしたいことは、ポートスキャンと呼ばれています。基本的には、ある範囲内の各IPアドレスと各ポートをテストし、その試みの成功を報告します。ポートスキャンは攻撃者がネットワークの脆弱性を見つけようとする方法の1つであるため、ネットワーク上で何らかの種類の脅威監視があると、多くのアラームが発生します。

要するに、これは悪い考えであり、この目的で使用するには十分な反応が得られない可能性があります。その代わりに、各サーバーが登録する「ディレクトリ」として中央サーバーを使用することを検討してください。

サブネット上でsend out a broadcastを実行し、サーバーが応答するのを待つことができます。これは、たとえばピアツーピアネットワークのいくつかがWindowsで動作する方法です。これはあなたがサーバーの開発者であることを前提としており、サーバーがブロードキャストを待機するために必要なロジックを追加することができます。

+0

+1 "ブロードキャストを送信する" –

0

UDPブロードキャストを使用すると、固定ポートで受信しているデータをサーバーに送信できます。以下はその実例です。

foreach (IPAddress ip in allLocalNetworkAddresses.AddressList) 
     { 
      Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 


      //Allow sending broadcast messages 
      client.SetSocketOption(SocketOptionLevel.Socket, 
      SocketOptionName.Broadcast, 1); 

       //Create endpoint, broadcast. 
      IPEndPoint AllEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);      

      byte[] sendData = Encoding.ASCII.GetBytes("1"); 
      //Send message to everyone on this network 
      client.SendTo(sendData, AllEndPoint); 
      Console.Write("Client send '1' to " + AllEndPoint.ToString() + 
      Environment.NewLine); 
関連する問題