Tcpdump Nedir, Nasıl Kullanılır (Linux)

  Linux

Zaman zaman her sistemcinin alet çantası niteliğinde olan, benim ise altın araçlarımdan birisidir tcpdump aracı.. Bununla ilgili yapılabilecekler elbette sınırlıdır, yani oturup muhabbet etmez neden bu kadar değerli dememek lazım. Zira hayat kurtarma özelliğine sahiptir, bunu bir çok sistemci bilir.

Nedir Bu Tcpdump ?
En yalın ve basit anlatımla unix/Linux sistemler içerisinde paket yakalamaya ve filtrelemeye yarayan araçtır. Ağı izleyerek analiz edilmesini sağlar ve bir nevi sniffer işlevini görür. Protokol, kaynak ve hedef adresler gibi spesifik argümanlarıda yapısında barındırarak filter özelliği sağlar.

Aynı şekilde Windows içinde versiyonu mevcuttur..

Detay bilgi için aşağıdaki linkler incelenebilir,
http://www.tcpdump.org/
http://www.tcpdump.org/manpages/tcpdump.1.html
http://tr.wikipedia.org/wiki/Tcpdump

Nasıl Kullanılır ? && Örnekler,

Yukarıda kullanım için dizilimini ve kullanılabilecek argümanları gördüğümüze göre neler yapılabilir, argümanların anlamları ve kullanım alanları nelerdir bu konuda da bilgi vereyim. Aşağıda vereceğim örnekler ve bilgiler elbette sınırlıdır, çünkü tcpdump ile yapılabilecek bir çok şey mevcut ve hepsi hayal gücüne bağlı..

Detaylı bilgi için aşağıdaki linkleri inceleyebilirsiniz.
http://www.tcpdump.org/manpages/tcpdump.1.html
http://www.enderunix.org/afsin/belgelerim/Tcpdump_Kullanimi.pdf
http://tr.wikipedia.org/wiki/Tcpdump
http://www.rationallyparanoid.com/articles/tcpdump.html
http://www.wains.be/pub/networking/tcpdump_advanced_filters.txt

tcpdump –> Genel anlamda filtresiz olarak tüm ağ trafiğiniz analiz eder ve dinler.
Aşağıda görebileceğiniz gibi anlık olarak sunucuma ssh ile bağlandığım için ilgili dökümler genel olarak bu şekilde yansımış durumda..

tcpdump -D –> Mevcut ağ üzerinde dinlenebilecek interface’leri listeler.

tcpdump -i –> Parametre sonrasında belirtilen arayüzün dinlenmesini sağlar.

tcpdump -i any –> Bu dizilim ile de x bir interface yerine herhangi paket geçen interface dinlenmektedir.

tcpdump –c –> Belirli bir sayıda paket listelenmesini sağlar. ( Örneğin “tcpdump -i eth0 -c 5” dizilimini verirsek 5 satır analiz listelenecektir.)

tcpdump -s –> Analiz edilen / dinlenen paketlerin boyutunu belirlemeye yarar. (Default / Ön tanımlı olarak 96 byte almaktadır)
Örneğin standart bir tcp çıktısı aşağıdaki gibidir ve son satırda görebileceğiniz gibi 96 byte olarak filtreler.

Şayet 2000 byte büyüklüğünde paketleri yakalamak istediğim zaman,

tcpdump greater (sayı/adet) – tcpdump less (sayı/adet) –> Yukarıdaki örneğimizde paketlerin boyutunu değiştirmeyi ve büyük boyutlu paketleri nasıl yakalayacağımızı gördük. Bu komut dizilimimizde ise “greater” ile büyük paketleri “less” ile küçük paketleri yakalayabiliriz.

Büyük paketler için, (burada sayıyı 2000 yaptığımda o büyüklükte paket geçmediği için tcpdump çıktısı alamadığımı gördüm, sizde buna benzer test edebilirsiniz.)

Küçük paketler için,

tcpdump -n –> Analiz işlemi sırasında isim çözümleme kullanılmak istenmiyorsa kullanılır. Yalnızca ip adres ve port bilgileri ekrana dökülür.

Örnek olarak standart bir çıktıyı görelim,

Şimdi burada isim çözümleme mekanizmasını devre dışı bırakarak tekrar tcpdump ile dinleyelim,

tcpdump -nn –> Aynı anda hem isim çözümlenmesini hemde port çözümlemesini göstermeden yalnızca IP adresi bilgilerini ekrana yazdırır.

tcpdump -t –> Analiz işlemlerinde ekrana dökülen/yazılan çıktılarda zaman damgasının(timestamp) kaldırılmasını sağlar. (satırın ilk sırasındaki saat-tarih çıkarılır.)

Önce zaman formatı ile tcpdump çıktısı alalım,

Şimdi zaman formatını çıkararak çıktımızı alalım,(timestamp’sız çıktı)

tcpdump -tt –> Tcpdump sonucu gelen her satırda “1 Ocak 1970, 00:00:00″‘den itibaren saniye cinsinden zaman damgasını basar.

tcpdump -ttt –> tcpdump sonucu ekrana dökülen satırları mikro-saniye oranını hesaplayarak başlık atar.

tcpdump -tttt –> Zaman damgalarını daha anlaşılır ve anlamlı şekilde görüntülenmesini sağlar.

tcpdump -v –> Paketlere ait detaylı bir analiz yapar. Aynı zamanda paketler ile ilgili ttl ve id bilgilerini gösterir.
Örneğin “v” argümanının kullanılmamış hali,

Burada da -v argümanının kullanılmış hali,

tcpdump -vv –> Analiz edilen paketlere ait smb ve nfs detaylarını gösterilmesini sağlar.

tcpdump -vvv -> Analiz/Dinleme işlemi sırasında telnet paketlerini de listeler.

tcpdump -q –> Sadece temel bilgilerini içeren bir analiz yapar.

tcpdump –p –> tcpdump ile yalnızca dinleme yapılan arabirime gelen paketleri yakalamak için seçici olmayan(Promisc) moddan çıkılması için kullanılır.
Nedir bu promisc mod?
Hedef bir ip adresi olmadığı halde gelen tüm paketlerin dinlenmesi anlamına gelir. Burada seçici olmayan (promisc) moddan çıkılması halinde yalnızca ilgili interface’e gelen ve o interface’i ilgilendiren paketler analiz edilir / işlenir.

tcpdump -w –> Tcpdump ile yapılan analizlerin bir dosyaya kaydedilmesini sağlar.

Tcpdump ile kaydettiğimiz paket trafiğini tekrar okumak istediğimiz zaman “r” parametresiniz kullanabiliriz,

Not1: Tcpdump ile alınan sonuçlar “w” argümanı ile dosyaya kaydedilirken bunun içinde filtreleme yapılabilir.
Örneğin aşağıdaki gibi yazarsam yalnızca arp paketleri ile ilgili sonuçlar “dumpciktim” isimli dosyaya kaydedilecektir,
tcpdump -w dumpciktim arp

Not2: Aynı şekilde kayıtlı bir dosya üzerinde okuma yapacağımız zamanda filtreleme işlemi yapılabilir.
Örneğin aşağıdaki gibi yazdığım zaman “dumpciktim” dosyasında kayıtlı olan verileri okurken zaman formatını göstermeyecektir,
tcpdump -r dumpciktim -t

tcpdump –e –> Yakalanan paketlerin ikinci katman bilgilerini yani mac adreslerini elde etmek için kullanılır. Bir nevi geçen paketlerin ethernet başlıkları yakalanır.

tcpdump -A –> tcpdump ile analiz edilen verileri Ascii formatında görüntülemek için “a” parametresini kullanabiliriz.

Ascii formatı nedir sorusunun yanıtı,
http://tr.wikipedia.org/wiki/ASCII
http://tr.wikipedia.org/wiki/ASCII_tablosu
http://en.wikipedia.org/wiki/ASCII

tcpdump -XX –> Analiz edilen paketler Hexadecimal ve Ascii formatında görüntülenmek istendiği zaman kullanılır.

Hexadecimal formatı nedir sorusunun yanıtı,
http://tr.wikipedia.org/wiki/On_alt%C4%B1l%C4%B1_say%C4%B1_sistemi
http://en.wikipedia.org/wiki/Hexadecimal

tcpdump port port_numarası (tcpdump port 25) –> Spesifik olarak istenen portun dinlenmesi sağlanır.
Aşağıdaki örneğimde daha önce incelediğimiz argümanları kullandım. İsim ve port çözümlemesi için “nn”, interface eth0’ı belirtmek için “i”, sonucun daha anlaşılır olması için “tttt” ve toplam 5 paket yazdırmak için “c” argümanlarını kullandım. Böyle söyleyince karışık gelebilir ama yukarıda yazılanlara hakim olunca çok basit gelecektir. Son olarak 587 portunu dinlemek için komutumu çalıştırıyorum,

tcpdump portrange x-xx –> Şayet belirli bir port aralığını dinlemek istiyorsak kullanabiliriz.
Örneğin ben 22 ile 25 arasını tarayacağım.

Belirli Host, Hedef ve Kaynak IP adreslerini dinleme, (Gelişmiş Paket Yakalama Yöntemleri – BPF(Berkley Packet Filter))

Kullanılabilecek parametreler “host”, “net”, “port”, “src”, “dst”

tcpdump dst ip-adresi –> Dinleme/Analiz yapılan cihaz (sunucu, bilgisayar v.b..) üzerinde paket alışverişi yaptığı karşı ip adresi analiz edilir. Yani aşağıdaki örnekte görebileceğiniz gibi 178.79.183.233 ip adresli sunucum üzerinde ttnet’den (evden) sunucuma bağlandığım ip adresimi tarıyorum. Tarama sonucunda ise o an sunucuma ssh bağlantısı yaptığım için ssh paketlerini listeliyor. Yine incelediğim diğer argümanları da kullanarak daha sadeleştiriyorum tabiki..

tcpdump src ip-adresi –> Dinleme yapılan sunucu üzerinde kaynak ip adresi için analiz yapılması istendiğinde kullanılır. Bir nevi bir önceki örneğimizin tam tersidir. Örneğin sunucumuz üzerinde birden fazla interface ve bir çok ip adresi olabilir. Bu ip’lerden birisi web servisine sahipse ve bu web servisinin trafiğiniz analiz etmek istersek sadece o ipyi (source/kaynak) o zaman kullanabiliriz gibi düşünülebilir.
Ben benim sunucum üzerinde sahip olduğum ip adresimi kaynak ip’m olarak veriyorum ve bu ip’me gelen paketleri dinliyorum,

tcpdump host ip-adresi –> Yalnızca belirli bir host’a ait paketler analiz edilmek / dinlenmek isteniyorsa kullanılır.

tcpdump net “ağ-adresi” –> Belirli bir ağa gelen/giden trafiğin dinlenmesi amacıyla kullanılır.

 

### Not Anlamını Taşıyan Örnekler ###

Tabi burada yalnızca filtreleme ve dinleme işlemlerini ip adresleri üzerinden yapabiliriz gibi bir algı oluşmasın. Örneğin hostname(dns) ile de tcpdump’da dinleme yapmak mümkün,

Hatta illa her parametreyi ayrı yazacağız diye bir kuralımız yok(kurallar dahilinde). Örneğin aşağıdaki gibi argümanları yan yana kullanabiliriz.
Ben burada “-nn” ile isim ve port çözümlemesini devre dışı bıraktım, “-tttt” ile daha anlamlı datalar almak istedim, “-vv” ile paketlerin ayrıntılı halini görmek istedim ve son olarak “-c 5” ile 5 paketin yakalanmasını istedim.

 

Protokol Türlerine Göre Analiz Yapma / Dinleme

Öncelikle bir çok protokol olduğunu temel olarak bildiğimizi varsayıyorum ve bu özelliğin büyük kolaylık getirdiğini söyleyebilirim. Örneğin icmp, arp, tcp, udp, decnet, ip, ip6, wlan v.b. protokolleri dinleyebiliriz.

 

Mantıksal Terimlerle Filtreleme

Tcpdump ile yapılan sniffer/analiz işlemlerinde bir çok farklı filtreleme türü mevcut. Bunlardan biri de programlama diline benzer bir yapısı olan or, and, not gibi terimlerinin kullanılması.. Örneğin yapılan analiz işleminde bir protokolü taramamak istiyorsak “not” ifadesini kullanırız ve sonrasında protokolü belirtiriz. Tam tersi durumlarda ise protokolü belirtmemiz yeterli olur. Çok karıştırmadan örneklere geçeyim,

Örneğin daha önce protokol bazlı filtrelemeyi görmüştük. Birden fazla protokolü filtrelemek istersek “and” mantıksal terimini kullanabiliriz. Burada “and” ile yalnızca iki protokolü değil daha farklı yapılarda da kullanabiliriz.

“and” Kullanımı,

Yada aşağıdaki yapıdaki gibi iki farklı sorguyu bir arada kullanabiliriz,

“or” Kullanımı
Aslında isminden de anlayacaığımız gibi veya anlamına geçen bu mantıksal terim ile o veya bu gibi kullanımlarda ideal seçenek olabiliyor.

“not” Kullanımı
Yine isminden anlayacağımız üzere “not” olumsuz bir durum olarak ifade ediliyor ve tcpdump içerisinde “not port 25” örneğindeki gibi port 25’i hariç anlamına geliyor. Bunu güzel bir örnek ile gösterecek olursam,
Örneğin tüm portları tarıyorum. Port 22 şu an aktif olduğu için bir sürü log yazması gerekecek fakat “not port 22” seçeneğini ekleyerek ekrana basacağı paketlerde 22 portunu ayıklayarak göstermeyecek,