26 Nisan 2017 Çarşamba

Libpcap - Ağ adaptörüne gelen paketlerin yakalanması (C++)


Daha evvelki yazımda libpcap (winpcap) kütüphanesinin kullanımı hakkında kısa bir giriş yapıp, *.pcap uzantılı bir dosyadan paketlerin nasıl okunacağına dair bir örnek paylaşmıştım. 


Bu yazı kapsamında ise dosyadan değil de ağ adaptörüne gelen paketlerin nasıl elde edileceğine dair kısa bir örnek paylaşacağım. Daha önceki örnekte libpcap kütüphanesini offline modda açıp, yolunu belirttiğimiz .pcap dosyasındaki paketleri okumuştuk. Bu örnekte ise pcap_open_live modunu kullanıp o an adaptöre gelen paketleri yakalayacağız. Bunun için ilk olarak bilgisayarımızdaki ağ adaptörlerini listeleyip, seçilen ağ adaptörünü libpcap kütüphanesine belirtmemiz gerekiyor. Bilgisayarımızdaki ağ adaptörlerini listeleyen C++ kodu aşağıdaki gibidir, yazının sonunda ilgili kodlara ulaşabilirsiniz.






Adaptörleri listeledik ve kullanıcıdan hangi adaptörün dinleneceğini seçmesini istedik. Devamında ise seçilen adaptörü pcap_open_live fonksiyonuna parametre olarak gösteriyoruz.

/* Jump to the selected adapter */
for (d = alldevs, i = 0; i< inum - 1; d = d->next, i++);

/* Open the device */
if (( fp = pcap_open_live(d->name, 100, PCAP_OPENFLAG_PROMISCUOUS, 100, errbuf)) == NULL )
{
fprintf(stderr, "\nError opening adapter\n");
return -1;
}

Adaptörü de başarı ile seçtikten sonra  pcap_next_ex  fonksiyonu ile bir döngü içerisinde paketleri teker teker okuyabiliriz. Bu kısım daha önce bu konuda yazmış olduğum yazıdaki örnek ile aynı. Paketlerin kaynak ve hedef MAC adreslerini ve şayet capture edilen paket IP paketi ise; paket uzunluğu, identification numarası ile kaynak ve hedef IP adreslerini ekrana yazdırıyoruz.




Hiç yorum yok:

Yorum Gönder