2017-06-29 10 views
1

PcapDotNetを使用してUDPパケットをキャプチャフィルタでスニッフィングするC#アプリケーションがあります。PcapDotNetを使用して、最終的なペイロードをどのように抽出しますか?

うまく動作し、6バイトのペイロードがありますが、バイト配列として抽出できないようです。 UdpDatagram.PayloadはDatagramであり、実際のペイロードデータを抽出するメソッドはありません。

データグラムにはExtractPayload()がありますが、ペイロードに到達するために使用できないILayerがあります。

TcpDatagramまたはUdpDatagramから最終的なペイロードを抽出するにはどうすればよいですか? PacketCommunicator.ReceivePacket()がパケットを送出した後、次いでDatagram.ToMemoryStreamを使用

答えて

1

()ローカルバッファに書き込む:

Packet wpacket; 

// wpacket = received packet 

UdpDatagram udp = null; 
TcpDatagram tcp = null; 
Datagram datagram = null; 

IpV4Datagram ip4 = wpacket.Ethernet.IpV4; 
if (ip4.Protocol == IpV4Protocol.Udp) 
{ 
    udp = ip4.Udp; 
    datagram = udp.Payload; 
} 
if (ip4.Protocol == IpV4Protocol.Tcp) 
{ 
    tcp = ip4.Tcp; 
    datagram = tcp.Payload; 
} 
if (null != datagram) 
{ 
    int payloadLength = datagram.Length; 
    using (MemoryStream ms = datagram.ToMemoryStream()) 
    { 
     byte[] rx_payload = new byte[payloadLength]; 
     ms.Read(rx_payload,0, payloadLength); 
    } 
} 

そしてrx_payloadは、解析、表示、またはその他のペイロードを使用するために利用可能です。

関連する問題