2012-06-14 16 views
8

生のTCPパケットを受信して​​、それを同じワークロードで送り返したいとします。C#でraw TCPパケットを取得する方法は?

void OnPacketReceived(TcpPacket p) 
{ 
    byte [] body = p.GetBody(); 
} 

注:

それは次のようになります私は、TCPパケットではなく、イーサネットフレームを必要としています。

+0

私は100%間違っているかもしれないが、私は、これは、マネージコードで行うことが可能であるかはわかりません。私の知る限りでは、C#のソケットライブラリは排他的にストリームを使用し、パケット境界を抽象化します。 –

+0

は、誰かがこれをクラックさせたかどうかを確認します。 –

+2

http://pcapdotnet.codeplex.com/を見ましたか?それはWinPcapの周りの.netラッパーです。 –

答えて

6

ソケットをrawソケットとして実装すると、パケット全体にアクセスすることができます(実際には、自分自身についてパケットのすべてを処理する必要があります)。

ソケットの作成時にSocketType.RawとProtocolType.Rawを使用します。

このようにソケットを実装する場合は、TCPの詳細を処理する必要があることに注意してください。参考のため

は、ここではSocketクラスに関するMSDNのドキュメントです: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx

+0

+1:私は、このメソッドを使って、TCPパケットのヘッダにチェックサムがあるかどうかを確認しました(必須ではないため)。 –

+0

@AllonGuralnekあなたはコードを分かち合うことができますか?少なくともそれを達成するために何をしなければならないのかを概説していますか? –

+0

@dodexhedron - 私はrawソケットに接続すれば、TCPパケットに直接アクセスできますか? (これは実際問題です)。もしあなたが確信しているなら、それを確認してください。ありがとうございました。 –

0

あなたがお好みのフィルターを置くことができるし、その基礎の上にも対応できるパケットスニファを使用する必要があります。

。WinPcapを囲むネットラッパーは、あなたに役立つことがわかります。

関連する問題