Recherche d’un port TCP ouvert sur un réseau

J’essaie de créer une application netowrk. J’ai réussi à créer un serveur qui envoie et reçoit des paquets. Jusqu’à présent, les tests ont été effectués sur un ordinateur pointant vers 127.0.0.1 (aucun endroit comme chez nous). Maintenant, je veux passer au réseau. Comment trouver des ordinateurs sur un réseau LAN qui écoutent mon port spécifique?

Le service doit écouter les messages diffusés sur un port connu (si vous voulez être vraiment sage, vous pouvez enregistrer le programme et le numéro de port auprès de l’IANA ). Lorsqu’il entend un message diffusé, il répond à l’expéditeur à l’adresse IP du serveur et quel port le service écoute pour les connexions entrantes.

Voici un exemple simple tiré du lien ci-dessus. Il est simplement imprimé sur la console qui a connecté et sur quel port, mais vous pouvez utiliser ces informations pour établir une connexion TCP ou UDP entre les deux ordinateurs d’extrémité.

using System; using System.Net; using System.Net.Sockets; using System.Text; class RecvBroadcst { public static void Main() { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050); sock.Bind(iep); EndPoint ep = (EndPoint)iep; Console.WriteLine("Ready to receive…"); byte[] data = new byte[1024]; int recv = sock.ReceiveFrom(data, ref ep); ssortingng ssortingngData = Encoding.ASCII.GetSsortingng(data, 0, recv); Console.WriteLine("received: {0} from: {1}", ssortingngData, ep.ToSsortingng()); data = new byte[1024]; recv = sock.ReceiveFrom(data, ref ep); ssortingngData = Encoding.ASCII.GetSsortingng(data, 0, recv); Console.WriteLine("received: {0} from: {1}", ssortingngData, ep.ToSsortingng()); sock.Close(); } } 

Comme exemple de psudo, voici la séquence d’événements sur la façon dont je le ferais.

Pour cet exemple, disons que nous avons un réseau avec une adresse IP de 192.168.1.0 et un sous-réseau de 255.255.255.0 . Nous avons deux serveurs, Server1 à 192.168.1.2 avec le service à l’écoute sur le port 1234 et Server2 à 192.168.1.3 avec un port à 4567 pour le service. Les deux sont listés sur le port 3000 pour les messages diffusés. Le client se connectant sera à l’IP 192.168.1.4

  1. Le client choisit un port aléatoire dans la plage de ports dynamics (49152-65535) et le lie sur UDP (le port 50123 pour cet exemple) et écoute.
  2. Le client diffuse à l’adresse de diffusion et au port connu de son sous-réseau local ( 192.168.1.255:3000 ) en utilisant le même port pour l’envoi à l’écoute. Il envoie une sorte de charge utile pour que les serveurs renvoient uniquement à vos clients, à la place de quelqu’un d’autre qui utilise le même port que vous. (Disons qu’il envoie la chaîne Send me your info for XYZ app! )
  3. Server1 reçoit la diffusion. Vérifie que le message est Send me your info for XYZ app! et envoie le message UDP Name:Server1 IP:192.168.1.2 Port:1234 à la combinaison adresse IP et port source de l’expéditeur ( 192.168.1.4:50123 )
  4. Server2 reçoit également la diffusion. Vérifie que le message est Send me your info for XYZ app! et envoie le message UDP Name:Server2 IP:192.168.1.3 Port:4567 Message Name:Server2 IP:192.168.1.3 Port:4567 retour au port source de l’expéditeur et à la combinaison IP ( 192.168.1.4:50123 )
  5. Le client reçoit deux messages UDP sur le même port sur lequel il a envoyé le message. Il parsing les réponses et affiche à l’utilisateur les deux serveurs disponibles pour se connecter.