【问题标题】:How can I get the MAC address of a catched packet?如何获取捕获的数据包的 MAC 地址?
【发布时间】:2016-07-07 04:51:10
【问题描述】:

我正在尝试构建一种嗅探器来捕获 wifi 探测请求。

使用 Wireshark,我只需设置一个像 eth.type eq 0x0806 and eth.dst eq ff:ff:ff:ff:ff:ff 这样的过滤器,它告诉我我正在侦听 ARP 协议上的所有广播数据包。我还没有找到如何监控信号强度,但也许有一天我会找到它......

我想对 Pcap.Net 做同样的事情。所以一旦一个数据包被捕获,我会查看

//Check if the packet is Ethernet
if (packet.DataLink.Kind == DataLinkKind.Ethernet)
{
   //Check if the Ethernet packet is ARP
   if (packet.Ethernet.EtherType == EthernetType.Arp)
   {
      [...]
   }
}

但是虽然使用 Wireshark 捕获数据包,但我的 C# 代码没有捕获任何内容。

另一个问题,如何获取数据包源的MAC地址?如何通过无线设备获取信号强度?

【问题讨论】:

  • 如果同时删除两个 if 语句,是否会捕获数据包?
  • MAC 地址在帧头中,而不是包头中。帧在其标头中具有第 2 层 (MAC) 地址,数据包在其标头中具有第 3 层 (IP) 地址,而分段在其标头中具有第 4 层(端口)地址。帧封装数据包,这些数据包封装了封装应用程序数据的段。当你想做这种事情时,你应该研究OSI Model。

标签: c# networking pcap.net


【解决方案1】:

就获取MAC地址而言,也许我的这个建议可以帮到你。目前我正在使用 pcap.net 编写嗅探器。它在我的 LAN 连接上工作正常。但是当笔记本电脑与 wifi 网络连接时,我的代码没有捕获任何流量。它曾经做过,但在最后几次尝试中,它只是未能捕获任何类型的流量。我认为这很明显,因为

pcap.net 不包含任何 AirPcap 功能。

顺便说一下,我希望你已经看过 pcap.net 的示例代码。他们在那里使用了一个名为

的函数
... ... PacketHandler(Packet packet){ ... }

在其中我添加了这两行。它对我来说很好用。

private void PacketHandler(Packet packet)
{
    string sourceMac = packet.Ethernet.Source.ToString();
    string destinationMac = packet.Ethernet.Destination.ToString();
    //--more code
}

现在它正在做它的工作。我已经与 NetworkMiner 一起测试了我的嗅探器(C# 中的另一个嗅探器项目,它比我的要好得多:v)。我测试了很多,仍然在做,到目前为止我没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多