TR | Scapy ile PCAP Dosyasını Parse Etme
Bu yazıda amacımız monitör mode ile yakalanmış pcap dosyasını analiz etmektir. Bu analiz sonucunda bir erişim noktasına ait
- Kablosuz ağın ismi – SSID
- Kablosuz ağın mac adres bilgisi
- Kaç tane probe paketi
- Kaç tane beacon paketi
gibi bilgileri çıkaracağız. Bu işlemi yaparken python ile entegre kullanabileceğimiz scapy modülünü tercih edeceğim.
İşlem için gerekli algoritma aşağıdaki gibidir :
- Örnek teşkil etmesi açısından kablosuz ağ adaptörümüzü monitör moda alıp wireshark ile etrafı belli bir süre dinleyeceğiz. Elde Edilen trafiği kayıt edip ilk aşamayı tamamlayacağız.
- Daha sonra Scapy ile elde ettiğimiz pcap dosyasını okuyup analiz adımlarını yerine getireceğiz.
- Gerekli modüller tanımlanır
import os from scapy.all import * from termcolor import colored conf.verb = 0
- Değişkenler ve kullanacağımız listeler tanımlanır.
toplam, beacon, probereq, proberes = 0, 0, 0, 0 ssidlist = [] bssidlist = []
- Beacon paketleri analiz edilir.
def Parser(pkt): global beacon, probereq, proberes, hidden, toplam toplam += 1 if pkt.haslayer(Dot11Beacon): ssid = pkt.info mac = pkt.addr2 beacon += 1 if mac not in bssidlist: bssidlist.append(mac) ssidlist.append(ssid)
- Probe istekleri analiz edilir.
elif pkt.haslayer(Dot11ProbeReq): ssid = pkt.info mac = pkt.addr2 probereq += 1 if mac not in bssidlist: bssidlist.append(mac) ssidlist.append(ssid)
- Probe cevapları analiz edilir.
elif pkt.haslayer(Dot11ProbeResp): ssid = pkt.info mac = pkt.addr2 proberes += 1 if mac not in bssidlist: bssidlist.append(mac) ssidlist.append(ssid)
Kodun başlaması ile beraber sniff() fonksiyonu yardımı ile pcap dosyası okunur ve her paket Parser fonksiyonuna gönderilir.
Bu aşamadan sonra fonksiyonun sonuçları ekrana basılır.
if __name__ == "__main__": os.system("reset") sniff(offline="/home/rootx/Dosyalar/scapy_e.pcap", prn=Parser) print colored("Toplam paket sayisi : ", "green"), toplam print colored("Beacon : ", "green"), beacon print colored("ProbeR : ", "green"), probereq print colored("ProbeResp : ", "green"), proberes print colored("\nSSIDList : ", "green"), ssidlist print colored("\nBSSIDList : ", "green"), bssidlist
İşlemin çıktısı aşağıdaki gibidir :
Uygulamanın kaynak koduna aşağıdaki linkten erişebilirsiniz :