2016-03-20 164 views
0

我试图建立一种嗅探器来捕捉无线探测请求。如何获取抓包的MAC地址?

使用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地址?如何获得无线设备的信号强度?

+1

如果删除两个if语句,你是否捕获数据包? – wimh

+0

MAC地址位于帧头中,而不是数据包头。帧的头部有第2层(MAC)地址,数据包头部有第3层(IP)地址,段头有第4层(端口)地址。帧封装封装封装应用数据的段的封包。当你想做这种事情时,你应该研究[OSI模型](https://en.wikipedia.org/wiki/OSI_model#Description_of_OSI_layers)。 –

回答

0

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

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)。我测试了很多,仍然在做,到目前为止我没有任何问题。