2009-08-05 17 views
5

Korzystając z platformy .NET, w jaki sposób mogę odsłuchiwać pakiety rozgłoszeniowe udp wysłane do .255 na dowolnym porcie bez potrzeby wiązania do określonego portu?Jak słuchać pakietów emisji na dowolnym porcie?

+0

Myślę, że charakter wiązania wyraźnie zapobiega temu scenariuszowi, ale Stack Overflow uczy mnie różnych rzeczy, których nigdy nie znałem. Czekam na odpowiedź na ten temat ... – grenade

Odpowiedz

4

Uważam, że aby to osiągnąć, musisz mieć niższy poziom niż UDP.

Jeśli naprawdę chciałem to zrobić, zacznę od pobrania pakietu open source sniffer/network analyzer (Ethereal.com przychodzi mi na myśl) i przejrzenia źródła, aby zobaczyć, jak czytają pakiety.

W dalszej części znalazłem sporo informacji o przechwytywaniu pakietów pod numerem tcpdump.org.

Niestety, nie mogę podać konkretnych fragmentów kodu, zawsze chciałem powiązać określony port.

0

Będziesz musiał użyć WinPCap lub podobnego, aby sniffować pakiety na poziomie łącza, a następnie filtrować transmisje UDP. Niestety, nie sądzę, żeby istniał dla tego jakiś wyższy poziom API.

6

Sam znalazłem sposób. Jak to działa:

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

W obsługi asynchronicznej, robię mainSocket.EndReceive (...), analizować dane i rozpocząć nowy BeginReceive jeśli chciał (sterowane z zewnątrz wielowątkowym odbiornika).

Działa jak urok. Kredyty trafiają do Hitesh Sharma (http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx)

Powiązane problemy