【问题标题】:Capturing icmp packets in pcap.net在 pcap.net 中捕获 icmp 数据包
【发布时间】:2014-08-28 08:23:59
【问题描述】:

我正在试验 pcap.net,并希望实现一些响应 ping 的东西作为练习。操作系统已经对它们做出响应,但我可以生成重复项。第一步显然是要知道一个 ping 数据包已经到达。我修改了https://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Opening%20an%20adapter%20and%20capturing%20the%20packets&referringTitle=Pcap.Net%20User%20Guide 的示例以使用以下处理程序。

我显然不明白发生了什么,因为捕获的数据包都没有在正确的子网上。将 ping 数据包发送到目标 ip 没有区别,尽管使用 ping -i 0 会大大增加接收数据包的数量(但它们仍然没有合理的 IP 地址,并且似乎不是回显请求数据包)。

请问我做错了什么?

    private static void PacketHandler(Packet packet)
    {
        IpV4Address dst = packet.IpV4.Destination, src = packet.IpV4.Source;

        if (dst == null || src == null) return;            

        if (packet.IpV4.Icmp != null)
        {                
            Console.WriteLine(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length:" + packet.Length+" "+src+" -> "+dst);

        }
    }

【问题讨论】:

    标签: pcap.net


    【解决方案1】:

    显然,我的意思是写以下内容。它可靠地获取传入和传出的 icmp echo 请求。我不知道为什么当我被 rdesktop-ed 到运行它的计算机时,我也没有看到大量的 TCP 数据包过去。但它似乎对我想做的事情来说足够好。

        private static void PacketHandler(Packet packet)
        {
            if (packet.DataLink.Kind != DataLinkKind.Ethernet) return;            
            EthernetDatagram ed = packet.Ethernet;
    
            if (ed.EtherType != EthernetType.IpV4) return;
            IpV4Datagram ipv4 = ed.IpV4;  
    
            if (ipv4.Protocol != IpV4Protocol.InternetControlMessageProtocol) return;
            IcmpDatagram icmp = ipv4.Icmp;
    
            IpV4Address dst = ipv4.Destination, src = ipv4.Source;
    
            Console.WriteLine(" length:" + packet.Length + " " + src + " -> " + dst + "   " + icmp);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 2017-02-17
      • 2013-02-02
      • 2022-01-13
      • 2014-01-05
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多