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?
Odpowiedz
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.
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.
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)
- 1. node.js + ekspresowe: aplikacja nie zacznie słuchać na porcie 80
- 2. Odbieranie pakietów emisji UDP w systemie Linux
- 3. .gitignore Folder pakietów NuGet na dowolnym poziomie, ale zawiera plik .targets na dowolnym poziomie
- 4. sposób przechwytywania pakietu w określonym porcie na dowolnym interfejsie przy użyciu tshark
- 5. Jak słuchać dubletu na ekranie w Androidzie?
- 6. Jak słuchać tylko localhost na MongoDB
- 7. Jak zrobić Cienki uruchomić na innym porcie?
- 8. Tomcat webapp na porcie 80
- 9. Uruchamianie Sinatra na porcie 80
- 10. FastCGI na porcie vs. na gnieździe
- 11. Dlaczego nasłuchuje na porcie z Netcat nie działa
- 12. Jak słuchać kopii w Androidzie
- 13. Jak możemy utworzyć dwa wystąpienia memcached serwera na tym samym serwerze w innym porcie?
- 14. Siła play ramowa słuchać na localhost tylko
- 15. Nginx proxy https do http na niestandardowym porcie?
- 16. PayPal IPN na porcie innym niż 80
- 17. Określanie sygnału odtwarzania procesu na określonym porcie
- 18. Błąd: słuchać EACCES na Openshift aplikacji
- 19. Wyjątek SEHException na otwartym porcie OleDb
- 20. Host VSCode .NET Core na określonym porcie
- 21. połączenie hadoop odmówiono na porcie 9000
- 22. Dynamiczna wysokość UITableView Emisji
- 23. Instalowanie pakietów na R
- 24. Jak zdobyć Node.JS Express, aby słuchać tylko na localhost?
- 25. Jak słuchać zdarzeń kliknięcia na całej stronie w meteodzie?
- 26. Jak słuchać powiadomień z iTunes na Macu (przy użyciu NSDistributedNotificationCenter)
- 27. Jak słuchać Binding.SourceUpdated na wszystkich elementach potomnych elementu głównego?
- 28. Jak utworzyć klasę HttpListener na losowym porcie w C#?
- 29. Jak korzystać z ExpressJS i Socket.io na tym samym porcie?
- 30. JavaFX TabPane: Jak słuchać wyboru zmienia
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