Laden...

Abfangen und Weiterleiten von UDP Datagrammen von beliebegen Quellen und Ports (Broadcast)

Erstellt von die_pest vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.515 Views
D
die_pest Themenstarter:in
22 Beiträge seit 2010
vor 7 Jahren
Abfangen und Weiterleiten von UDP Datagrammen von beliebegen Quellen und Ports (Broadcast)

Hallo,

ich bin auf der Suche nach einer Möglichkeit beliebeige UDP Pakete abzufangen und an eine von mir bestimmte Adresse und Port weiterzuleiten. Dabei können die Pakete von einem anderen Programm innerhalb meines Rechners kommen, oder über das Netzwerk (verschiedene Adapter und IPs) per Broadcast Nachricht.

Ein Beispiel:

Ein Programm innerhalb meines Rechners schickt eine Broadcast Nachricht ins Netzwerk mit Sende- und Empfangsport 46000 und Zieladresse 255.255.255.255. Jetzt will ich dieses Paket in einem anderen Programm auf dem selben Rechner auslesen und verarbeiten. Das klappt auch mit dem folgenden Code:


Socket Listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, (ProtocolType.Udp));

            Listener.ExclusiveAddressUse = false;
            Listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            
            // Ip Adresse meines Netzweradapters
            IPEndPoint endpoint = new IPEndPoint(localIP, 46000);
            Listener.Bind(endpoint);

            byte[] data = new byte[1024];
            EndPoint p = (EndPoint)(new IPEndPoint(IPAddress.Any,0));

            Listener.BeginReceiveFrom(data,0,data.Length, SocketFlags.None, ref p, Callback, Listener);

Das Problem:
Ich müsste alle Pakete abfangen, die von meinem Rechner oder vom Netzwerk kommen, aber auf einem beliebigen Port und nicht nur auf Port 46000.

Gibt es eine Mögluichkeit das umzusetzten?

LG die_pest

16.835 Beiträge seit 2008
vor 7 Jahren

Das geht so aus Sicherheitsgründen des Betriebssystems nicht.
Da müsstest Du Dich an den Treiber der Netzwerkkarte hängen (so machen es Sicherheitsprogramme) oder einen Netzwerkbridge (wie zB. der von Hyper-V) ins Spiel bringen.

P
441 Beiträge seit 2014
vor 7 Jahren

Das Programm Wireshark macht das mithilfe des Treiber/Dienstes "WinPcap".
Hierfür gibt es einen oder vllt sogar eine Handvoll .NET Wrapper, die dir helfen dürften.... z.B.: https://github.com/PcapDotNet/Pcap.Net

D
die_pest Themenstarter:in
22 Beiträge seit 2010
vor 7 Jahren

Vielen Dank für eure Antworten, das hat mir sehr geholfen.
Allerdings habe ich zusätzlich noch eine Möglichkeit gefunden.
Man kann über Raw Sockets alle eingehenden und ausgehenden IP Pakete abfangen und damit weiterarbeiten.

LG