Bazı faydalı TCP araçları

Gökhan Şengün
4 min readJan 1, 2018

--

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.

--

--

Gökhan Şengün

Full stack dad of two and just curious about things. Stories are from my twitter floods @gokhansengun. Main blog is www.gokhansengun.com