PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Raw Packet Sending c#


ESAD
2008-07-29, 02:28:21
Ich versuche mit .net und c# selbsterstellte pakete zu definieren und zu versenden.
das problem scheint zu sein dass MS seit SP2 versucht eben dies zu blockieren.

nun habe ich mir hald gedacht dass ich win xp pro Sp0 in einer vm aufsetzte (was laut meinen suchorgien ja dieses problem nicht hat)

nur bekomme ich dort auch den selben fehler wie unter win xp pro sp3.System.Net.Sockets.SocketException: Ein Blockierungsvorgang wurde durch einen Aufruf von WSACancelBlockingCall unterbrochen
bei System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint remoteEP)
bei System.Net.Sockets.Socket.SendTo(Byte[] buffer, EndPoint remoteEP)
bei test.Code.Senden.senden(IP IP_Paket) in D:\Eigene Dateien\Visual Studio 2008\Projects\test\test\Code\Senden.cs:Zeile 2
3.


Der Code zum senden ist folgender:
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Broadcast, 67);

Socket sok = new Socket(AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Raw, ProtocolType.IP);
sok.Blocking = false;
sok.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
sok.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

Byte[] temp = Arrays.ArraysVereinen(IP_Paket);
sok.SendTo(temp,remoteEndPoint);

jemand ne idee?

Gast
2008-07-29, 09:07:28
Wahrscheinlich ist das Hostsystem, also dein XP SP3, trotzdem noch der limitierende Faktor, denn die Netzwerkkommunikation läuft ja trotzdem darüber. Wahrscheinlich kommst du da nicht um einen Treiber herum bzw. irgend ein Fremdprogramm, dass einen Treiber mitbringt und über eine Client API dann das Versenden erlaubt.

Gast
2008-08-06, 23:44:19
Wenn du wirklich reine Daten schicken willst, so würde ich mir einmal WinPcap ansehen. Hier hat da jemand das Programmierinterface auf .NET portiert: http://www.codeproject.com/KB/IP/dotnetwinpcap.aspx

Damit kannst du deine Pakete beliebig zusammenstellen. Es gibt nur folgende Einschränkungen:

1.) Senden funktioniert nur über Ethernet (aber auch von virtuellen Maschinen aus)
2.) WinPcap muss installiert sein (kannst du aber auch mit deiner Software installieren)
3.) Die FCS (Frame Check Sum) im Ethernet Header wird automatisch von der Hardware berechnet
4.) Bei manchen Netzwerkkarten (Gigabit so ziemlich alle) wird die Checksum vom TCP Header automatisch berechnet.
5.) Die Performance ist nicht so berauschend. Ich glaube ich habe um die 5K Pakete pro Sekunde geschafft. Kann aber sein, dass man da noch etwas optimieren kann.

Alles andere kannst du manuell wählen, also auch z.B. die MAC-Adresse des Absenders, du bekommst auch wie bei einem Sniffer alle Pakete, auch die, die nicht an dich sind (z.B. an den Hub angesteckt).

ESAD
2008-08-07, 00:36:13
Wenn du wirklich reine Daten schicken willst, so würde ich mir einmal WinPcap ansehen. Hier hat da jemand das Programmierinterface auf .NET portiert: http://www.codeproject.com/KB/IP/dotnetwinpcap.aspx

Damit kannst du deine Pakete beliebig zusammenstellen. Es gibt nur folgende Einschränkungen:

1.) Senden funktioniert nur über Ethernet (aber auch von virtuellen Maschinen aus)
2.) WinPcap muss installiert sein (kannst du aber auch mit deiner Software installieren)
3.) Die FCS (Frame Check Sum) im Ethernet Header wird automatisch von der Hardware berechnet
4.) Bei manchen Netzwerkkarten (Gigabit so ziemlich alle) wird die Checksum vom TCP Header automatisch berechnet.
5.) Die Performance ist nicht so berauschend. Ich glaube ich habe um die 5K Pakete pro Sekunde geschafft. Kann aber sein, dass man da noch etwas optimieren kann.

Alles andere kannst du manuell wählen, also auch z.B. die MAC-Adresse des Absenders, du bekommst auch wie bei einem Sniffer alle Pakete, auch die, die nicht an dich sind (z.B. an den Hub angesteckt).

i know gg hab das auch schon gefunden :) trotzdem danke