2009-08-05 10 views
5

Usando .NET, ¿cómo puedo escuchar los paquetes de difusión udp enviados a .255 en cualquier puerto sin la necesidad de vincularlos a un puerto específico?¿Cómo se escuchan los paquetes de difusión en cualquier puerto?

+0

Creo que la naturaleza de la unión explícitamente evita este escenario, pero desbordamiento de pila me enseña todo tipo de cosas que no sabía. Esperando escuchar las respuestas sobre este ... – grenade

Respuesta

4

Creo que tendrá que tener un nivel inferior al UDP para lograr esto.

Si realmente quería hacer esto, me gustaría empezar por la descarga de un analizador de código abierto analizador de paquetes/red (Ethereal.com viene a la mente) y leer la fuente para ver cómo leen los paquetes.

Mirando más, me pareció un poco acerca de la captura de paquetes en tcpdump.org.

Lo siento, no puedo dar fragmentos de código específicos, siempre he querido vincular a un puerto específico.

0

Tendrá que utilizar WinPCap o similar a oler los paquetes en el nivel de enlace, luego se filtra para las difusiones UDP. Lo siento, no creo que haya ninguna API de nivel superior para esto.

6

Encontré una manera yo mismo. Así es como funciona:

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

En el controlador asincrónico, hago un mainSocket.EndReceive (...), analizar los datos y comenzar una nueva BeginReceive si se desea (controlado desde fuera del receptor multiproceso).

Funciona como un encanto. Los créditos van a Hitesh Sharma (http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx)

Cuestiones relacionadas