2010-08-19 17 views
2

如何解析.NET中的UDP数据包?如何解析.NET中的UDP数据包?

我使用PCap.Net捕获数据包,在这种情况下,我可以通过(PcapDotNet.packets.Ethernet.IpV4.Udp)从PCap.net对象访问UDP数据包。

如何获取结果,Udp数据包并对其进行解析?尤其是解开绑定在UDP数据包内的DNS请求和响应。

有没有可以帮助您的图书馆?

编辑:更具体是什么我希望能够做的是提取从DNS响应的IP地址,并使用Wireshark的将是根据检查者:

(a)输入:作为DNS响应的UDP数据包的负载

(b)处理:解析出UDP数据包的DNS响应部分。找到答案部分,在此查找类型为A(主机地址)[不是CNAME记录]的答案记录,然后用此答案记录获取IP地址。

(c)返回:来自DNS响应的IP地址。

+0

WinPCAP不附带一堆解析器吗? – 2010-08-19 03:43:44

+0

转到Newtwork Monitor API http://www.microsoft.com/downloads/details.aspx?FamilyID=983b941d-06cb-4658-b7f6-3088333d062f&displaylang=en – 2010-08-19 04:33:09

+0

@愿意 - 我可以回到UDP正常,但它只是正义解析一个正在携带DNS响应的UDP数据包的细节我感兴趣。 – Greg 2010-08-19 10:09:33

回答

1

从PCAP.Net:

Pcap.Net.DevelopersPack.0.7.0.46671.x64的\ src \ InterpretingThePackets \ Program.cs的

  // Compile the filter 
      using (BerkeleyPacketFilter filter = communicator.CreateFilter("ip and udp")) 
      { 
       // Set the filter 
       communicator.SetFilter(filter); 
      } 

      Console.WriteLine("Listening on " + selectedDevice.Description + "..."); 

      // start the capture 
      communicator.ReceivePackets(0, PacketHandler); 
    } 


    // Callback function invoked by libpcap for every incoming packet 
    private static void PacketHandler(Packet packet) 
    { 
     // print timestamp and length of the packet 
     Console.WriteLine(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length:" + packet.Length); 

     IpV4Datagram ip = packet.Ethernet.IpV4; 
     UdpDatagram udp = ip.Udp; 

     // print ip addresses and udp ports 
     Console.WriteLine(ip.Source + ":" + udp.SourcePort+ " -> " + ip.Destination + ":" + udp.DestinationPort); 
    } 

是不是就够了吗?

+0

我很喜欢用PCap.Net来分析UDP数据包,但是它解析了一个UDP数据包的细节,这个数据包携带了我感兴趣的DNS响应。基本上想要能够有一个DNS响应UDP数据包,然后解析它以获取类型A(不是类型CNAME)的DNS数据包的Answer记录中的IP地址(es?)。所以基本上能够解析出UDP/DNS数据包的DNS部分。 – Greg 2010-08-19 10:15:25

+0

现在问题更加清楚。好吧,几年前我能够从DNS数据包中提取IP。我所用的只是一些RFC。试试这个:http://www.pjsip.org/pjlib-util/docs/html/group__PJ__DNS__PARSING.htm – 2010-08-19 12:01:44