En utilisant .NET, comment puis-je écouter les paquets de diffusion udp envoyés à .255 sur n'importe quel port sans avoir besoin de se lier à un port spécifique?Comment écouter les paquets de diffusion sur n'importe quel port?
Répondre
Je pense que vous aurez besoin d'être plus bas que UDP pour accomplir ceci. Si je voulais vraiment faire cela, je commencerais par télécharger un analyseur de réseau/analyseur de réseau open source (Ethereal.com) et parcourir la source pour voir comment ils lisent les paquets. En regardant plus loin, j'ai trouvé pas mal de choses sur la capture de paquets au tcpdump.org.
Désolé, je ne peux pas donner d'extraits de code spécifiques, j'ai toujours voulu me lier à un port spécifique.
Vous devrez utiliser WinPCap ou similaire aux paquets sniff au niveau de la liaison, puis filtrer pour les diffusions UDP. Désolé, je ne pense pas qu'il existe une API de plus haut niveau pour cela.
J'ai trouvé un moyen moi-même. Voici comment cela fonctionne:
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
mainSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 0));
mainSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
byte[] byOut = new byte[4] { 1, 0, 0, 0 };
// Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
mainSocket.IOControl(IOControlCode.ReceiveAll, //Equivalent to SIO_RCVALL constant of Winsock 2
byTrue,
byOut);
//Start receiving the packets asynchronously
mainSocket.BeginReceive(byteData,0,byteData.Length,SocketFlags.None,new AsyncCallback(OnReceive),null);
Dans le gestionnaire async, je fais mainSocket.EndReceive (...), analyser les données et commencer une nouvelle BeginReceive si on le souhaite (contrôlé à partir de l'extérieur du récepteur multithread).
Fonctionne comme un charme. Crédits vont à Hitesh Sharma (http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx)
Je pense que la nature de la liaison empêche explicitement ce scénario, mais Stack Overflow m'apprend toutes sortes de choses que je n'ai jamais connues. En attendant d'entendre les réponses sur celui-ci ... – grenade