2011-01-13 7 views
0

Ich verwende C# Sockets, um eine Verbindung zwischen einem Gerät (Client) und einem Computer (Server) herzustellen. Alles funktioniert gut, abgesehen von der Tatsache, dass ich versuche, den Benutzer zu vermeiden, die IP-Adresse und die Portnummer einzugeben, mit der auf dem Gerät verbunden werden soll. Stattdessen möchte ich eine Liste oder Dropdown-Liste aller IP-Adressen mit hörenden Sockets. Frage mich nur, ob es eine Möglichkeit gibt, alle IP-Adressen und Port-Nummern von Hosts mit Listening (Socket) zu bekommen?C# Sockets, Wie bekomme ich IP-Adressen und Port # aller abhörenden (Sockets) Computer

Danke für jede Hilfe! :)

+0

Sie möchten also wissen, wie man einen Portscan durchführt? – SRM

+0

Oder haben Sie feste Port-Nummer und Sie möchten alle Computer im Netzwerk überprüfen, wenn sie auf den bestimmten Port hören? – dzendras

+0

Wie unten erwähnt, Port-Scan ist eine schlechte Idee. Also, Dzendras, wie ist es mit einer festen Port-Nummer wird sich von Port-Scan unterscheiden? Danke :) – Jeff

Antwort

2

Was Sie tun möchten, ist ein Port-Scan. Es beinhaltet grundsätzlich das Testen jeder IP-Adresse in einem Bereich und jedem Port und das Melden des Erfolgs dieses Versuchs. Es ist langsam und es werden viele Alarme ausgelöst, wenn im Netzwerk eine Bedrohung überwacht wird, da das Scannen von Ports eine der Möglichkeiten ist, mit denen Angreifer versuchen, Netzwerkschwachstellen zu finden.

Also kurz gesagt, das ist eine schlechte Idee und wird wahrscheinlich nicht reaktionsfähig genug sein, dass Sie für diesen Zweck verwenden. Stattdessen sollten Sie einen zentralen Server als "Verzeichnis" verwenden, bei dem sich jeder Server registrieren würde.

Oder Sie können send out a broadcast in Ihrem Subnetz und warten auf Server reagieren. So funktioniert beispielsweise das Peer-Networking in Windows. Beachten Sie, dass davon ausgegangen wird, dass Sie auch der Entwickler des Servers sind und dass Sie die erforderliche Logik hinzufügen können, damit der Server auf Broadcasts wartet.

+0

+1 "Sende eine Sendung" –

0

Mithilfe von UDP-Broadcast können Sie die Daten an den Server senden, die am festen Port empfangsbereit sind. Das folgende ist das Arbeitsbeispiel.

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);