Tcpdump

Tarihi

O ilk olarak  Van Jacobson, Craig Leres ve Steven McCanne tarafından 1987 yılında 
Lawrence Berkeley Laboratory Network Research Group da çalışırlarken yazıldı. 1990'ların sonuna doğru çeşitli işletim sistemlerinin bir parçası olarak çok sayıda tcpdump versiyonu ve iyi düzenlenmemiş birçok yaması dağıtıldı. Michael Richardson ve Bill Fenner 1999 yılında tcpdump.org'u oluşturdu.

Genel kullanım

Tcpdump ağ davranışını, performans ve ağ trafiği oluşturan uygulamaları analiz eder. Aynı zamanda, tüm gerekli yönlendirmelerin doğru oluşup oluşmadığını ve kullanıcının problemin kaynağından izole edilip edilmediğini belirleyerek kendi başına ağ altyapısını analiz etmekte kullanılabilir. Başka bir bilgisayar kullanıcısının iletişimini yakalayıp dinlemek gibi özel bir amaç için kullanımı da mümkündür. Üzerinde Telnet ve HTTP gibi şifrelenmemiş trafik oluşan yönlendirici veya ağ geçidi gibi davranan bir sistem üzerinde gerekli yetkileri bulunan bir kullanıcı oturum kimlikleri, şifreler, URL'ler ve gezilen web sitelerin içerikleri ve daha başka şifrelenmemiş bilgileri görüntülemek için tcpdump kullanabilir. Kullanıcı isteğe bağlı olarak tcpdump tarafından görülen paketlerin sayısını sınırlandırmak için bir BPF tabanlı filtre uygulayabilir; bu trafik hacmi yüksek olan ağlarda daha kullanışlı çıktı verir.

Gerekli ayrıcalıklar

Bazı Unix benzeri işletim sistemlerinde, tcpdump kullanmak için yönetici ayrıcalıklarına sahip olmak gerekir, çünkü bu sistemlerdeki paket yakalama mekanizması yüksek ayrıcalık gerektirir. Bununla birlikte, -Z seçeneği yakalama ayarları yapıldıktan sonra belirli ayrıcalıksız kullanıcılara ayrıcalıklar verir. Diğer Unix benzeri işletim sistemlerinde, paket yakalama mekanizması ayrıcalıklı olmayan kullanıcıların kullanmasına izin vermek için yapılandırılabilir; eğer böyleyse yönetici yetkileri gerekmez.

Parametreler

Tcpdump ağ davranışını, performansı ve ağ trafiğini oluşturan uygulamaları analiz ederken, belli parametreler kullanabilir. Tüm özellikler, parametreler ile belirlenir. Komut parametresiz çalıştırıldığında, bulduğu ilk aktif ağ arabirimini dinlemeye alır. Bu işlem yalnızca, sisteme root olarak giriş yapıldığı takdirde gerçekleştirilebilir. Tcpdump komutunun pek çok parametresi bulunur ve bunları ezberlemek gereksizdir. 
Bir makine, kendisine gelmeyen paketleri, yalnızca promiscuous (karışık) moddayken alabilir. Tüm Snifferlar otomatik olarak ağ arabirimini bu moda geçirir ve Snifferlar durunca ağ arabirimini normal haline alır.
ifconfig: Ethernet kartının (ağ arabiriminin) ayarlarını ve hangi modda olduğunu görüntüler. Yetkili kişinin, ayarları değiştirebilmesine imkan verir.
promisc: Hedef IP adresi olmadığı halde, gelen paketleri almayı sağlar.
Hangi ağ arabiriminin dinlenmesi gerektiğini belirtmez isek, numarası en düşük olan arabirim dinlenmeye başlanır. Örneğin, ağımızda aktif olarak bulunan, 3 tane ağ olsun ve isimleri eth0, eth1, eth2 şeklinde belirtilmiş olsun. Bu durumda, en düşük ağ numaralı olan eth0 yani, 1. ağ dinlenir.
==> Hangi ağın dinlenmesi gerektiğini -i parametresi ile belirtiriz.
#tcpdump -i eth2 (3. ethernet kartı dinlenir)
==> Sistemde bulunan ve dinlenebilecek durumda olan arabirimlerin listesini -D parametresi ile belirtiriz.
#tcpdump -D
==> Yakalanan paketlerin DNS isimleri çözülmesin istiyorsak, -n parametresini kullanırız.
#tcpdump -n
* Dezavantajı: İsimlerin çözülmesi için belli bir zaman gerekir ve bu yoğun ağlarda işlemin yavaşlamasına sebep olur.
==> Yakalanan paketlerde DNS isim bilgisinin yanında, protocol ve port numaraları da çözülmesin istiyorsak, -nn parametresini kullanırız.
#tcpdump -nn
* Örneğin, ilk kullanımda ayrıntılı olarak, telnet şeklinde belirtilen alanda herhangi bir çözümleme yapılmaksızın 23 yazacaktır.
==> Yakalanan paketlerde daha sade bir görünüm arıyor ve zaman çıktısı (timestamp) vermesin istiyorsak, -t parametresini kullanırız.
#tcpdump -t
==> Yakalanan paketler ekranda görüntülenmesin istiyor olabiliriz. Bu durumda, elde edilen bilgiyi cap uyumlu başka bir dosyaya yazabiliriz.
#tcpdump -w dosya_adi
* -w ile kaydedilen paketler -r parametresi kullanılarak okunabilir.-w ile herhangi bir dosyaya kaydederken filtreleme yapabiliriz .Aynı şekilde -r ile paketleri okurken filtre belirtebiliriz.Bu filtre -w ile belirlediğimiz filtre ile aynı olmak zorunda değildir.
==> Okuma işlemi şu şekilde gerçekleştirilir.
#tcpdump -r dosya_adı
* Dosya kaydedilirken ya da okunurken, filtreleme yapılabilir. Mesela sadece şu tip paketleri kaydet ya da timestampleri kaydetme gibi.
* Aynı şekilde -r ile paketleri okurken filtre belirtebiliriz. Ayrıca bu filtrenin -w ile belirtilen filtre ile aynı olma zorunluluğu yoktur.
==> Ne kadar paket yakalanıp, durulacağını belirtmek istiyorsak, -c parametresini kullanırız.
#tcpdump -i eth0 -c 5 TCP
* 1. porttan 5 tane TCP paketi yakalar ve durur.
==> Yakalanacak paketlerin boyutunu byte olarak belirtmek istiyorsak, -s parametresini kullanırız.
#tcpdump -s 1500
==> Detaylı loglama yapmak istiyorsak, -v parametresini kullanırız.
#tcpdump -i eth0 -n -c 5 -v
* Bu komut, TTL ve ID değerlerini de döndürür.
==> Promisc moddan kaçmak istiyorsak, -p parametresini kullanırız.
#tcpdump -p - i eth0
* Yararları: Bu moddan çıkarsak, sadece o birime gelen ve o birimi ilgilendiren paketler işlenir. Ki bu, gelen paketlerin Broadcast ya da direkt o arabirimin adresi olması demektir.
* Bu komutu, genellikle kendi makinemizde işlem yapacağımız zaman kullanırız.
==> Ethernet başlık bilgisini yakalamak istersek, -e parametresini kullanırız.
#tcpdump -e
* Bu komut bize, MAC bilgisini verir.
#tcpdump greator 42 > dosya.txt = paket bilgilerini dosya isimli dosyaya yazar.
#tcpdump -c 42 greator 42 -w ozlem.dump = 42'den büyük olan ilk 42 paketi kaydeder.
#tcpdump -r ozlem.dump
==> Hedef host olarak belli bir adresi kullanmak istersek, dst host parametresini kullanırız.
#tcpdump -i eth0 dst host 10.0.0.1
==> Kaynak host olarak belli bir adresi kullanmak istersek, src host parametresini kullanırız.
#tcpdump -i eth0 src host 10.1.0.59
* dst ve src i aynı komutta kullanabiliriz.
#tcpdump -i eth0 src host 10.1.0.59 and dst host 10.0.0.1
==> Kaynak veya hedef port bilgisini belirtmek istiyorsak, port parametresini kullanırız.
#tcpdump port 23
* Kaynak veya Hedef portu 23 olan paketler.
#tcpdump src port 23
* Kaynak portu 23 olan paketler.
-X : Paketin içeriğini hem hex hem de ascii olarak görünmesini sağlayan bir parametredir.
-XX : Paketin içeriğini hem hex hem de ascii olarak görünmesini sağlayan bir parametredir ve ethernet başlığını da gösterir.
-nS : Çok fazla seçenek olmadan paket analizi yapar
-nnvvXS : Trafikte çok detaylı bir incelemedir.
-E : Bu protokol ile bir şifreleme anahtarı tarafından IPSEC trafiği şifrelenir.