2016-03-20 163 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)。我測試了很多,仍然在做,到目前爲止我沒有任何問題。