Autor Beitrag
Metabolic
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 04.04.09 17:55 
Hallo alle zusammen,

Ich stehe gerade vor folgendem Problem:

Ich will einen UDP Broadcast rausschicken und von diesem Broadcast, will ich die Source Adresse und den Source Port festlegen.

Ich weiß, seit XP SP2 ist sowas ja limitiert aber soweit ich weiß betrifft das nur source adressen die mit keinem Netz mit dem der Host verbunden ist etwas zu tun haben. Sprich ein PC im 192.168.1.0er Netz kann kein UDP paket mit 143.xxx.xxx.xxx senden aber ein Paket mit einer anderen 192.168.1.0er Adresse als seiner eigene schon. So versteh ich das zumindest.

Hab jetzt schon öfter gelesen, dass man das mit RAW-Sockets machen kann finde aber nichts dazu wie ich da jetzt die Adresse festlegen kann.

Hab das mal so gemacht:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
C#-Code:
private void SendBroadcast(Paket paket)
        {
            Socket broadcastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Udp);

            IPEndPoint endpoint = new IPEndPoint(IPAddress.Broadcast, paket.Udpheader.DestinationPort);

            broadcastSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 0);
            broadcastSocket.SendTo(paket.Udpheader.Data, endpoint);
            broadcastSocket.Close();
        }

Aber wie setze ich da jetzt die Absenderadresse bzw. den Absenderport?
Ich hoffe jemand kann mir einen Tipp geben.

Danke für die Hilfe im Vorraus!
Metabolic
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 04.04.09 18:15 
Ich liebe Mehrfach-Posts; bitte auch Antworten hier beachten. Jürgen
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: So 05.04.09 12:55 
Hallo,
ich kenne keine Möglichkeit, mit den .Net Klassen UDP-Packete mit gespoofter Source-IP abzuschicken. Mit deiner echten geht das so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
            Socket S = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Udp);
            EndPoint RemoteEndPoint = (EndPoint)new IPEndPoint(IPAddress.Broadcast,50000);

            S.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.1"), 50000));
            S.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
            S.SendTo(Encoding.ASCII.GetBytes("Hello"), RemoteEndPoint);
            S.Close();

Wobei hier 192.168.1.1 deine IP ist und 50000 der Port.

Um wirklich raw-Packets zu senden, solltest du dir mal diesen Artikel anschauen, wobei du bei den aber alle Packet (inkl. Header) des Layer 2, 3 und 4 selbst bauen musst.

mfg Flitzs