Mehmet Cavdar
8 min readNov 10, 2021

Linux işletim sisteminde Network trafiğini Monite etme ve Kaydetme

Bu yazıda bir Linux işletim sisteminde (OS=Operation Server) terminal üzerinden yazılan kodlarla cihazın network trafiğinin istenilen bilgiler özelinde nasıl sergilenebileceği ve kayıt alınabileceğine ilişkin bilgiler yer almaktadır. Kayıt altına alınan network trafiği Linux terminal üzerinden açılabildiği gibi “Network Miner”, Wireshark vb programlarla da açılabilir ve bir grafik ara yüzü üzerinden izlenebilir.

Temel network bilgilerini / paketlerini görüntüleme

ifconfig =>Cihaz bilgileri sergilenir. (Windows OS’de benzer bilgiler ipconfig komutuyla sergilenmekte olup daha sadedir)

Sergilenen bilgiler

*Ethernet bilgileri

· Up /down durumu

· Private IP, subnetmask ve broadcast IP bilgileri

· Ipv6 IP bilgileri

· Ethernet MAC adresi

· Rx packets: Alınmış (receive) paket bilgileri

· Rx errrors: Alım esnasında hata oluşan paket bilgileri

· TX packets: Hönderilmiş (transmit) paket bilgileri

· TX errrors: Gönderim hatalı olan paket bilgileri

*Loopback (Localhost) IP (127.0.0.1) adresi sadece cihaz içi uygulamaların birbiriyle iletişimi için kullanılır. (Bilgisayar bir ağa bağlı olmasa da protokollerin çalışabilmesi için gereklidir)

Arp -na=> Ayni ağ içerisindeki cihazlardan daha önce iletişime geçtiğimiz icin tanıdığımız cihazların listesini sergiler. ARP tablosunda su an sadece gateway IP’si olan cihaz var.

“n”: IP adresleri çözümleme yapmadan sergiler. Domain adi olarak göstermez.

“a” : Tüm aktif bağlantılar

ping 10.10.86.233 =>Hedef cihazla (IP’si belirtilen) yapılan iletişim kurma protokollerini yakalama ve sergileme. Bu komutla duruma göre ARP ve her zaman ICMP paketi gider ve cevapları gelir.

Not: Kayıt sayısını belirtmez isek komut durmadan ping yapar. O yüzden c1, c2 vs. yazarak ping sayısını belirtmeliyiz. Bu uygulama durmadan çalışır Terminal ekranında “CTRL+C” tuşuna basılırsa çalışan komutlar varsa durur. Terminal ekranında “^c” komutu girilmiş olarak görünür.

ping -c1 10.10.86.233 => Ilgili cihaza 1 (c1 onu belirtir) adet ICMP paketi gönderdik. Hedef cihazın MAC adresini ve ethernet portunu bilmiyorsak ilk olarak ARP paketi otomatik gider. Tanışma sonrası ICMP paketi gider. Ping sonrası ARP tablomuza tekrar bakınca ping yaptığımız cihazın bilgilerini de görürüz.

ip addr=> cihaz üzerindeki ağ kartlarının IP adres bilgilerini sergiler.

ip route show=> routing table’i sergileme

Cihazın Network iletişim (bağlantılar) bilgilerini sergileme

Netstat =>netstat (network statistics) ağ bağlantıları (hem gelen hem giden), yönlendirme tabloları ve ağ ara yüzü istatistiklerini görüntüleyen bir komut satırı aracıdır.

netstat -pltun => Ağ üzerinden hizmet veren protokoller ve bu protokollerin kullandığı portları sergileme.

“p” Protocol

“t” TCP ,

”u” UDP’nin bilgilerini,

“l” liste

“n” IP çözümlemesi yapılmaması anlamına gelir.

netstat -plun => sadece UDP bilgilerini liste halinde IP çözümlemesi yapılmadan sergiletmek icin.

netstat -pltn =>sadece TCP bilgilerini liste halinde IP çözümlemesi yapılmadan sergiletmek icin.

netstat -pltu => Bilgileri IP çözümlemesi yaparak sergiletmek icin. (Burada bildiği IP’lerin Domain adi yazıyor. Localhost)

Dikkat: Port nu local Adres sütununda IP ‘den sonra yazılıdır. (ilk sırada 5901 portu)

TCP’nin dinleme (LISTEN) modunda olduğu ve UDP’nin kullandığı portlar görülüyor.

Local Address 127.0.0.1: Port nu (local host) sadece bilgisayar içi

Local Address 0.0.0.0: Port nu olunca bilgisayarda birden fazla ağ ara yüzü olsaydı da protokollerin çalışabilmesine imkân verirdi.

Not: Birden fazla NIC Kartı olsaydı her birinin MAC adresi olacaktı.

netstat -help =>netstat komutuyla kullanılan komutları sergiler (“-help” ile tüm ana komutların lt komutları sergilenir)

netstat -natu=> “Tüm aktif bağlantıları ve bilgisayarın dinlediği TCP ve UDP portları görüntüler. “a”’ kodunun “p”den farkı ilgili protokolü kullanan program isimlerini belirtmemesidir.

Sanal Linux’te bir browser açalım ve bir siteye erişelim.

netstat -natu=> Buradan sitenin serverinin IP’sini görebiliriz TCP’den “https” portu olan 443’e odaklanacağız. Site başka sitelerden de bilgi gönderdiği icin farklı birden fazla IP görmek normaldir. Belki de sitenin birden fazla server’i var. Bizim bilgisayarla bağlantılı IP’leri görebiliriz.

netstat -nr => Herhangi bir adrese veya subnete giderken kullanılan gateway’i (routing)sergiler.

Kodda yer alan “n” IP çözümlemesi yapılmaması, “r” routing tablosu anlamındadır. “ip route show” ile benzer işlevi görür. Assagidaki örnekte IP 0.0.0.0 : herhangi bir adresi ifade eder.

Ağ içerisindeki cihazlarla haberleşmeyi monite etme

tcpdump => Ağ paketlerini yakalamak ve sergileme komutu. Bu komutla ayrıntısını sonra öğreneceğimiz paket bilgileri hızlıca aktı. Aşağıda bir paketin bilgisi işaretlendi.

Tcpdump -D =>Device listesi

*Ethernet bilgisi

*Localhost

*Bluetooth

*

tcpdump -i lo => Loopback arayüzünü dinleyelim. Aşağıda işaretli yerlerde görüldüğü üzere localhost içinde çalışan protokoller sergilenmiş. “i” interface, “lo” localhost anlamındadır.

tcpdump -i eth0 => Ethernet kartı üzerinden gecen trafiği dinleme. Aşağıda bir IP ve DNS (alan adi) eşleşmesi görüyoruz.

tcpdump -i eth0 -n => İşaretli yerde bir IP adresinde başka bir IP adresine veri transferi var.

tcpdump -i eth0 -c1 => Ethernet kartı üzerinden gecen trafikten sadece 1 tanesini sergiler. Görüldüğü gibi en altta 1 paket “captured” yazıyor

tcpdump -i eth0 -n -c1 => Bilgileri IP çözümlemesi yapmadan (n)sergiletmek icin.

tcpdump -i eth0 -n -c2 => Zamandan sonra IP isleyen protokolün adını belirtir. Burada IP’ler Kaynak> Hedef seklinde. Bizim IP adresi gidende solda, gelen pakette sağda.

clear=> terminal ekran temizleme

Protokol dinleme

Örneğin ICMP paketini görmek icin sadece bunları dinleyecek komutları yazmalıyım.

tcpdump -i eth0 -n arp => ARP protokolünü dinleme. Aşağıda sadece ARP Protokolu kapsamında request ve reply paketlerini görebiliyoruz.

tcpdump -i eth0 -n icmp => Biri(ler)i hocanin IP adresine ping gönderince ICMP paketi bilgileri görüldü. Burada hocanin cihaz hedefti, sonra cevap paketinde kaynak IP adresi oldu.

tcpdump -i eth0 -n src IP_ADDRESS => Sadece bir cihazdan gelen bilgileri göstermek icin (kaynak IP adresi, ……… olan paketleri yakala)

tcpdump -i eth0 -n dst IP_ADDRESS => Sadece bir cihaza giden bilgileri göstermek icin (………………. IP adresine sahip hosta hem gelen hem giden trafiği yakala) O yüzden aşağıda sadece reply ICMP Paketleri gözüküyor

tcpdump -i eth0 -n host IP_ADDRESS => Sadece bir cihaza gelen/giden bilgileri göstermek icin (………………. IP adresine sahip hosta hem gelen hem giden trafiği yakala) Hedef IP ile request ve reply ICMP paketi

tcpdump -i eth0 -n src net 10.10.0.0/16 (IP-Adresim /CIDR) =>alt ağdaki (Subnet) cihazlardan bana gelen tüm trafiği gözlemleme

tcpdump -i eth0 -n not host 10.100.1.202 and net 10.10.0.0/16 => 10.100.1.202 haric alt ag (subnetteki) diğer cihazlarla aramdaki trafik

tcpdump -i eth0 -n not host 10.100.1.202 and net 10.10.0.0/16 and not icmp => 10.100.1.202 haric subnetteki diğer cihazlarla aramdaki icmp paketleri haric trafik

tcpdump -i eth0 -n not host 10.100.1.202 and net 10.10.0.0/16 and not icmp and not host 10.100.1.203 => 10.100.1.202 ve 10.100.1.203 haric subnetteki diğer cihazlarla aramdaki icmp paketleri haric trafik

NOT: CIDR (Classless Inter-Domain Routing) subnet mask’ta IP’nin Binary sistemde 1’lerin adeti

tcpdump -i docker0 => herhangi bir ağ kartı (burada docker0) üzerinden trafiği yakalama

Tcpdump -ni tun0 => VPN olsaydı açılacak kanalın bilgilerini görecektik . “n” harfini adres çözümlemesi yapmasın diye ekledik.

Not: VPN ile kullandığımız IP’yi kullanabilmek icin makine üzerinde tanımlı bir ağ kartı varmış gibi gösterilir. VPN icin ilave bir ağ kartı varmış gibi görürüz.

tcpdump -n -i eth0 arp => ethernet kanalın ARP bilgilerini görecektik. Adres çözümlemesi yapmayacaktı (öncesinde ping google.com yaptık ki arp kaydı oluşsun)

tcpdump -n -i eth0 icmp and host ………..(IP) => …… IP ile aramdaki ICMP trafiğini adres cözümleme yapmadan sergileme

Terminalde sergilenen bilgileri harici bir dosyaya kaydetme, paylaşma ve başka bir programda sergileme

tcpdump -n -i eth0 -w traffic.dump => istenen kaydı (isim çözümlemesi yapmadan Ethernet kanalındaki trafiği yakala) başlatalım ve kayıt icin bir dosya ismi (burada traffic.dump) yazalım. Kodda yer alan “w” write’dan geliyor.

Not: dosya .dump .pcap vb. uzantita olabilir.

Bilgisayarda home folder klasöründe kaydedilen dosyayı buluruz.

Tcpdump -r traffic.dump =>daha önce kaydettiğim dosyayı okuma komutudur. Kodda yer alan “r” read’dan geliyor.

Tcpdump -r traffic.dump dst port 80 è Sadece Port 80 çıkışlı kayıtları sergileme

Tcpdump -r traffic.dump dst port 80 and not host 10.10.xxx.239è Sadece Port 80 cikisli ve belirtilen IP dışında kayıtları sergileme

DNS Server bilgilerini sorgulama (nslookup komutu)

host Google.com => sadece adresi çözümlemesi yapar ve IP adresini bize gösterir.

Görüldüğü üzere örnek olarak girilen sitenin ’un bir de mail sunucu bilgileri var ve birden fazla IP adresi var.

Not: Bir alan adına (Domain Name) birden fazla IP adresi alabilir. Çoğu Server yedekli çalışır. Ancak Bir IP adresinde birden fazla alan adı olamaz.

nslookup => sonra kürsör aşağıya geçer ve kullanıcıdan ilave komutlar bekler.

>google.com

Domain adi girilince Local DNS Server ve hedef domain IP adres bilgilerini sergiler.

>server 1.1.1.1

DNS Serveri değiştirdik. (Cloud flare firması işletir)

>google.com

Domain adi girilince bu sefer DNS Server’1.1.1.1 ‘den sorarak çözümleme yaptı ve hedef domain IP adres bilgilerini sergiler.

Dikkat: Neden her iki DNS Server’ inda da port 53==> (varsayılan DNS Portu (UDP protokol))

Varsayılan Portlar: 0–1023 arası portların kullanım maksadı önceden belirlenmiştir. Örneğin Web sunucusu portları 80 (http://) ve 443 (TLS veya SSL secure (htttps://)). Varsayılan Portlar haricinde başka portları da kullanabiliriz (65536 (256*256) Port var )

>74.125.XXX.138 =>girilen IP adresine karşılık alan adi varsa öğrenme

>1.1.1.1 => girilen IP adresine karşılık alan adi varsa öğrenme

>set type=mx => mail Exchange sunucu tipini seçtik.

>google.com => girilen alan adinin mail sunucuları sergilenir.

Mail server bilgilerinde 10–20–30–40–50 yazılan kısım mail serverlara ulaşmada priority olarak kabul edilir. Sanırım öncelik diye çevrilebilir.

>set type=ns => name system tipini seçtik.

>google.com => girilen alan adinin kayıtlı olduğu DNS server bilgileri sergilenir.

dig web sitesi adi => bu da benzer işlemi yapar. (dig==domain information Grubbing)