2011-04-13 9 views
6

フレームのイーサネット部分は変更しませんが、IPパケットとフレームのデータ部分を変更する必要があります。C#でRaw IPパケットを送信しました。イーサネットレイヤー上のものすべて

生のフレームを送信しようとしましたが、それでもIP情報を入れています。私は基本的に、送信しているビットを除いてエンドポイントを定義せずにフレームを送信する必要があります。ここで

は、私が得たものです:

Socket s = new Socket(AddressFamily.Unspecified, SocketType.Raw, ProtocolType.Raw); 
EndPoint ep = new IPEndPoint(IPAddress.Parse("205.188.100.58"),80); 
s.SendTo(GetBytes(""),ep); //im sending nothing, so i expect the frame to just have ethernet stuff 
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, false); 

は私の質問:のSendToを使用して は、フレームのIP部分を追加して、私は、ソースIPを偽装したいとすることを望んでいません。エンドポイントを指定する必要があるため、「送信」を使用するとクラッシュします。何をすべきかに関する提案はありますか?パケットを送信し、IPセクションとデータセクションを自分で定義したいだけです。

注:いいえ私はDOS攻撃をしていないので、正当な使用のためにこれが必要です!

私はIP部分を定義する方法を知っています。実際に生成されたIP部分がない状態で実際にデータを送信することだけです。あなたの質問が非常によく、ここで回答され

+0

[C#で生のイーサネットパケットを送信する方法は?](http://stackoverflow.com/questions/3964013/how-send-raw-ethernet-packet-with-c) – mafu

+0

この質問は、テキストですが、答えはそこにあります - これはマージする必要があります。 – mafu

答えて

8

How send raw ethernet packet with C#?

をライブラリのPcap.Net並べ替えを使用して(それは非常に強力である下層WinPcapの実装を使用して)、あなたは簡単にあなたが好きなように個々のデータパケットを変更することができます。

IP層を完全にスキップしてMACアドレスに送信することもできます。http://www.codeproject.com/KB/IP/sendrawpacket.aspxここでは、ほぼリアルタイムの通信を提供するイーサネット経由のマイクロコントローラ(Atmel ATmega)と同様の方法で通信しています。

+0

以前、私はSystem.Net.Socketでまっすぐにやりたいと思っていました。 – brandon

+0

System.Net.SocketはWinsockのラッパーであるため、P/Invokeを使用して直接Winsockを使用できますが、Pcap.Netを使用する方がはるかに優れています。 –

+0

ちょうどそれを実現しました。良い見つける。明確化のおかげで – brandon

1

"ライブラリのPcap.Netソートを使用すると、非常に強力なアンダーレイWinPcap実装を使用するので、任意の方法で個々のデータパケットを簡単に変更できます。

間違っている! WinPcap cantはフィルタリング/パケットの削除/パケットの作成を行いません。言い換えれば、それだけで非同期的にパケットを監視することができます...

Rawパケット/無作為モード/ドライバフィルタ/パケットルーティングが別の話です。

関連する問題