Bazı faydalı TCP araçları
Bu flood’da geliştirme ve işletim sırasında ihtiyaç duyduğumuz bazı faydalı TCP araçlarından bahsedeceğim.
Önceki bir flood’da ping
ve traceroute
araçlarına değinmiş, bu araçların port bazlı olmayan ve IP katmanı üzerinde bulunan ICMP protokolü ile çalıştığını anlatmıştık. Bu flood'da ise TCP katmanında çalışan araçlardan bahsedeceğiz.
Tanıtacağımız ilk araç netstat
. Adından anlaşılacağı üzere işletim sisteminin network statüsü ile ilgili bilgiler verir. netstat
Linux, Windows ve macOS'te benzer bilgileri farklı parametrelerle verir. Bu örnek ve bundan sonraki bütün örnekler Linux için verilmiştir.
İşletim sistemi üzerinde koşan uygulamaların TCP seviyesinde dinlediği portları görmek için netstat -plnt
komutunu verebiliriz. Aşağıda görüldüğü gibi 22 numaralı SSH
portu işletim sisteminin sahip olduğu bütün ağ arayüzleri (interface) için dinlenmektedir. Tek tek bütün IP'leri dinlemek yerine 0.0.0.0
özel IP'si dinlenmiştir. Aynı çıktıdaki 2375 Docker Daemon
portu ise bütün IP'lerce dinlenmemiş sadece 172.16.44.101
ve 127.0.0.1
IP'lerce dinlenmiştir. Yani 2375 numaralı porta gelen istekler sadece bu iki IP'ye gelirse cevaplanacaktır.
İşletim sisteminin sahip olduğu ağ arayüzlerini (interface) listelemek için Linux ve macOS’te ifconfig
, Windows'ta ise ipconfig
komutu kullanılabilir. Önce yukarıda verilen örnekteki bilgisayarda bulunan bütün ağ arayüzlerini sonra da ikisinin detaylarını listeleyelim.
Yukarıda görüldüğü gibi işletim sisteminin enp0s3
arayüzü 10.0.2.15
IP'sine, enp0s8
arayüzü ise 172.16.44.101
IP'sine sahiptir. Linux'ta ifconfig
yerine ip
komutu ile de aynı bilgilere ulaşılabilir. Aşağıdaki çıktıda aynı bilgiler ip
komutu ile elde edilmiştir.
Port bazlı olarak bir sunucu ve porta ulaşıp ulaşamadığımızı test etmek için kullanabileceğimiz iki araç telnet
ve netcat - nc
'dir. Aşağıdaki hareketli görüntüde telnet
kullanılarak www․google․com
'a TCP ile bağlanılmış ve sayfa HTTP ile talep edilmiştir.
Yukarıdaki örnekte telnet
yerine netcat - nc
de kullanılabilirdi. Aşağıdaki ekran görüntüsünde www․google․com
'a netcat - nc
ile TCP bağlantısı sağlanmış ve yine HTTP GET komutu ile kök sayfa talep edilmiştir.
netcat
ile bir servise bağlanmak yerine sadece o servise ulaşıp ulaşamadığımızı da test edebiliriz. Önceki örneklerde 2375 portunun sadece 172.16.44.101
ve 127.0.0.1
IP'lerince dinlendiğini, ek olarak sunucunun 10.0.2.15
IP'li enp0s3
arayüzüne sahip olduğunu görmüştük.
Şimdi netcat
kullanarak 2375 porta 172.16.44.101
IP'sinden bağlanabildiğimizi 10.0.2.15
IP'sinden ise bağlanamadığımız gösterelim.
Yukarıdaki örnekte dikkat edilmesi gereken önemli bir nokta 10.0.2.15
IP'nin 2375 portuna yapılan istekte cevap (tcp) failed: Connection refused
şeklinde olmasıdır. Burada sunucu istemciye açık bir şekilde belirtilen IP'de 2375 numaralı portun dinlenmediğini söylemektedir. Three-Way Handshake
adı verilen ve TCP bağlantısı kurulmasını sağlayan yöntemde, istemci sunucuya SYN
paketi gönderir, sunucu bağlantıyı kabul etmek isterse istemciye SYN+ACK
paketi gönderir, sonra da istemci sunucuya ACK
göndererek TCP bağlantısı kurma işlemini tamamlar. 172.16.44.101
IP'sine yapılan ve başarı ile sonuçlanan bağlantıda anlatılan akış gerçekleşmiştir. 10.0.2.15
IP'sine yapılan bağlantıda ise istemcinin gönderdiği SYN
paketine sunucu RST
(Reset) paketi ile karşılık vermiş ve bağlantı başlamadan sonlanmıştır.
Son olarak nmap
adı verilen aracı tanıtalım. Bu aracın ilk kullanım alanı verilen sunucuda açık olan (bir uygulama tarafından dinlenen) bütün TCP/UDP portlarını listeleyebilmesidir. Aşağıdaki örnekte sadece sunucu IP'si verilerek sunucuda bulunan bütün servisler gösterilmiştir.
nmap
'in bir diğer kullanım alanı ise verilen ağda bulunan bütün IP'leri tarayarak açık olan sunucuları listeleyebilmesidir. Aşağıdaki örnekte benim ev ağımda bulunan ve bir portu açık olan cihazları listelemektedir. Görüleceği üzere modemim ve başka bir cihaz listelenmiştir.