Ağ trafiğini analiz etmek zorunda kaldığında ve önünde sadece bir terminal varsa, Wireshark’ı özlemeye başlarsın. Ama aslında özlediğin şey grafik arayüz değil, paketleri anlayabilme kapasitesi. İşte tam bu noktada tshark devreye giriyor. Wireshark’ın komut satırı motoru olan tshark, GUI olmadan da tam güçle çalışıyor ve hatta bazı senaryolarda GUI’den çok daha kullanışlı oluyor. Uzak sunucuda SSH üzerinden bağlısın, X forwarding yok, ama ağda bir şeyler çok yanlış gidiyor. tshark bu durumda seni kurtaran araç oluyor.
tshark Nedir ve Neden Önemlidir
tshark, Wireshark projesinin bir parçası olarak gelen komut satırı paket analizörüdür. Wireshark ile tamamen aynı dissector motorunu kullanır, yani aynı protokol ayrıştırma yeteneklerine sahiptir. HTTP’den DNS’e, TLS’ten MQTT’ye kadar yüzlerce protokolü anlayabilir ve analiz edebilir.
Bir sysadmin olarak tshark’ı şu durumlarda tercih edersin:
- Headless sunucular: GUI olmayan sistemlerde paket yakalama
- Otomasyon: Script’lerle entegre paket analizi
- Uzak bağlantılar: SSH üzerinden düşük bant genişliğiyle çalışma
- Büyük pcap dosyaları: Terminal üzerinden hızlı filtreleme ve analiz
- Cron job’lar: Periyodik trafik yakalama ve loglama
tcpdump ile karşılaştırdığında tshark’ın en büyük avantajı uygulama katmanı protokollerini anlayabilmesidir. tcpdump sana ham paketi gösterir, tshark ise HTTP header’larını, DNS sorgularını veya SMB oturumlarını anlamlı şekilde parse eder.
Kurulum
Çoğu sistemde tshark, wireshark paketinin bir parçası olarak veya ayrı bir paket olarak gelir.
# Ubuntu/Debian
sudo apt-get install tshark
# RHEL/CentOS/Rocky Linux
sudo dnf install wireshark-cli
# Arch Linux
sudo pacman -S wireshark-cli
# macOS (Homebrew)
brew install wireshark
Kurulumdan sonra root olmayan kullanıcıların paket yakalayabilmesi için bir adım daha gerekir. Debian tabanlı sistemlerde kurulum sırasında bunu sorabilir, ama manuel olarak da ayarlayabilirsin:
# Kullanıcıyı wireshark grubuna ekle
sudo usermod -aG wireshark $USER
# Network interface'lerine erişim için capabilities ayarla
sudo setcap cap_net_raw,cap_net_admin+eip $(which tshark)
# Oturumu yenile
newgrp wireshark
Temel Kullanım ve Önemli Parametreler
tshark’ın parametrelerini öğrenmek başta biraz bunaltıcı gelebilir ama en sık kullandıklarını ezberleyince geri kalan her şey üzerine inşa oluyor.
-i interface: Dinlenecek network interface’i belirtir -r dosya.pcap: Mevcut bir pcap dosyasını okur -w dosya.pcap: Yakalanan paketleri pcap dosyasına yazar -f “filtre”: Yakalama filtresi (BPF syntax, tcpdump ile aynı) -Y “filtre”: Display filtresi (Wireshark display filter syntax) -c paket_sayisi: Belirtilen sayıda paket yakalayıp durur -a duration:N: N saniye sonra yakalamayı durdurur -T format: Çıktı formatını belirtir (fields, json, pdml, text) -e alan: -T fields ile birlikte gösterilecek alanları belirtir -q: Sessiz mod, özet istatistikler için kullanılır -z istatistik: İstatistik modları için kullanılır -d “layer,port,protocol”: Port’a göre protokol decode etmek için -O protokol: Belirtilen protokolün detaylarını gösterir -n: İsim çözümlemeyi devre dışı bırakır (hız için önemli) -N: İsim çözümleme türlerini ayarlar -V: Verbose mod, her paketin tüm detaylarını gösterir
İlk Adımlar: Interface Listesi ve Temel Yakalama
Neyi dinleyeceğini bilmek için önce interface listesine bakman lazım:
# Mevcut interface'leri listele
tshark -D
# Çıktı şöyle görünür:
# 1. eth0
# 2. lo
# 3. docker0
# 4. any (Pseudo-device that captures on all interfaces)
Basit bir yakalama başlatmak için:
# eth0 üzerinde 100 paket yakala
tshark -i eth0 -c 100
# Tüm interface'lerden 30 saniye yakalama yap
tshark -i any -a duration:30
# Yakalamayı dosyaya kaydet
tshark -i eth0 -w /tmp/capture.pcap
# Dosyayı oku ve ekrana bas
tshark -r /tmp/capture.pcap
Display Filtreleri: tshark’ın Gerçek Gücü
tshark’ı güçlü kılan şey Wireshark display filter syntax’ını tam olarak desteklemesidir. Bu filtreler inanılmaz derecede detaylı sorgulama yapmanı sağlar.
# Sadece HTTP trafiğini göster
tshark -i eth0 -Y "http"
# Belirli bir IP'den gelen trafiği filtrele
tshark -i eth0 -Y "ip.src == 192.168.1.100"
# DNS sorgularını izle
tshark -i eth0 -Y "dns.flags.response == 0"
# HTTP POST isteklerini yakala
tshark -i eth0 -Y "http.request.method == POST"
# Büyük paketleri bul (1000 byte üzeri)
tshark -r capture.pcap -Y "frame.len > 1000"
# TCP SYN paketlerini izle (yeni bağlantı denemeleri)
tshark -i eth0 -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
# TLS handshake paketlerini göster
tshark -i eth0 -Y "tls.handshake"
Gerçek Dünya Senaryosu 1: HTTP Trafik Analizi
Bir web sunucusunda anormal yavaşlık var ve neyin gidip geldiğini anlamak istiyorsun. tshark ile HTTP trafiğini hızlıca analiz edebilirsin:
# HTTP isteklerini URL ve method ile göster
tshark -i eth0 -Y "http.request"
-T fields
-e http.request.method
-e http.request.uri
-e ip.src
-e http.host
-E separator=","
-E header=y
# Çıktı:
# method,uri,src_ip,host
# GET,/api/users,10.0.0.5,myapp.example.com
# POST,/api/login,10.0.0.12,myapp.example.com
# HTTP response kodlarını izle
tshark -i eth0 -Y "http.response"
-T fields
-e ip.dst
-e http.response.code
-e http.content_length
-E separator="|"
# 5xx hataları gerçek zamanlı izle
tshark -i eth0 -Y "http.response.code >= 500"
-T fields
-e frame.time
-e ip.src
-e ip.dst
-e http.response.code
Gerçek Dünya Senaryosu 2: DNS Sorunlarını Teşhis Etme
Sistemin DNS’e gidip gelen sorgular hakkında şüphelerin varsa veya DNS tabanlı bir sızma girişimi arıyorsan:
# Tüm DNS sorgularını ve cevaplarını izle
tshark -i eth0 -Y "dns"
-T fields
-e frame.time
-e ip.src
-e dns.qry.name
-e dns.resp.addr
-E separator=","
# Sadece belirli bir domain'e yapılan sorguları yakala
tshark -i eth0 -Y "dns.qry.name contains evil-domain"
# DNS tünelleme belirtisi olabilecek uzun domain sorgularını bul
tshark -r capture.pcap -Y "dns.qry.name"
-T fields
-e dns.qry.name |
awk 'length($0) > 50' | sort | uniq -c | sort -rn
# NXDOMAIN cevaplarını say (subdomain brute force tespiti için)
tshark -r capture.pcap -Y "dns.flags.rcode == 3"
-T fields
-e dns.qry.name | sort | uniq -c | sort -rn | head -20
DNS tünellemesi gerçekten ciddi bir güvenlik problemi. Uzun ve garip DNS sorguları görüyorsan, birisi ağından veri çalmaya çalışıyor olabilir.
Gerçek Dünya Senaryosu 3: Ağ Güvenliği İzleme
Port taraması veya brute force saldırısı tespiti için tshark mükemmel bir araç:
# SYN flood / port scan tespiti
# Çok sayıda farklı porta SYN gönderen IP'leri bul
tshark -i eth0
-Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
-T fields
-e ip.src
-e tcp.dstport |
sort | uniq -c | sort -rn | head -20
# SSH brute force tespiti
tshark -i eth0
-Y "tcp.dstport == 22 and tcp.flags.syn == 1 and tcp.flags.ack == 0"
-T fields
-e frame.time
-e ip.src |
awk '{print $4}' | sort | uniq -c | sort -rn
# ARP spoofing tespiti (aynı IP için birden fazla MAC)
tshark -i eth0 -Y "arp"
-T fields
-e arp.src.proto_ipv4
-e arp.src.hw_mac |
sort | uniq |
awk -F't' '{count[$1]++; mac[$1]=$2} count[$1]>1 {print "SUSPICIOUS:", $1, mac[$1]}'
istatistik Modları: -z Parametresi
tshark’ın en çok göz ardı edilen özelliklerinden biri istatistik modlarıdır. -z parametresi ile trafikle ilgili özet bilgiler alabilirsin:
# Protokol hiyerarşisi istatistikleri
tshark -r capture.pcap -z io,phs -q
# Konuşma istatistikleri (kim kiminle ne kadar konuşmuş)
tshark -r capture.pcap -z conv,tcp -q | head -30
# HTTP istek/cevap istatistikleri
tshark -r capture.pcap -z http,stat -q
# DNS istatistikleri
tshark -r capture.pcap -z dns,tree -q
# IP endpoint istatistikleri
tshark -r capture.pcap -z endpoints,ip -q
# Belirli bir IP için akış istatistikleri
tshark -r capture.pcap
-z "conv,tcp,ip.addr==192.168.1.100" -q
Dönen Dosyalara Kaydetme (Ring Buffer)
Uzun süreli izleme yapıyorsan disk dolmasın diye ring buffer kullanmak şart:
# 100MB'lık dosyalar oluştur, maksimum 10 dosya tut
# 11. dosya oluşturulunca en eskisi silinir
tshark -i eth0
-b filesize:102400
-b files:10
-w /var/captures/traffic.pcap
# Her 5 dakikada bir yeni dosya aç, 24 dosya tut (2 saat)
tshark -i eth0
-b duration:300
-b files:24
-w /var/captures/traffic_%H%M.pcap
# Yakalamayı belirli bir boyutta durdur
tshark -i eth0
-a filesize:512000
-w /tmp/capture.pcap
Pratik Script: Otomatik Anomali Tespiti
Bir bash script ile tshark’ı gerçek bir izleme aracına dönüştürebilirsin:
#!/bin/bash
# /usr/local/bin/network-monitor.sh
# Ağ anomalilerini tespit et ve logla
INTERFACE="eth0"
LOG_FILE="/var/log/network-anomalies.log"
THRESHOLD_SYN=50 # 10 saniyede bu kadar SYN paketi şüpheli
log_event() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
logger -t network-monitor "$1"
}
# Port scan tespiti - 10 saniye aralıklarla
detect_port_scan() {
tshark -i "$INTERFACE"
-Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
-T fields
-e ip.src
-a duration:10
-q 2>/dev/null |
sort | uniq -c |
while read count ip; do
if [ "$count" -gt "$THRESHOLD_SYN" ]; then
log_event "UYARI: Olasi port taramasi - IP: $ip, SYN sayisi: $count"
# Opsiyonel: IP'yi block et
# iptables -A INPUT -s "$ip" -j DROP
fi
done
}
# DNS anomali tespiti
detect_dns_anomaly() {
tshark -i "$INTERFACE"
-Y "dns.qry.name"
-T fields
-e dns.qry.name
-a duration:60
-q 2>/dev/null |
awk 'length($0) > 60' |
sort | uniq -c |
while read count domain; do
if [ "$count" -gt 10 ]; then
log_event "UYARI: Olagandusu uzun DNS sorgusu - Domain: $domain, Sayi: $count"
fi
done
}
log_event "Network monitor baslatildi - Interface: $INTERFACE"
while true; do
detect_port_scan &
detect_dns_anomaly &
wait
sleep 5
done
JSON Çıktısı ve Entegrasyon
Modern log yönetim sistemleriyle (ELK Stack, Graylog) entegrasyon için JSON çıktısı çok işe yarıyor:
# Paketleri JSON formatında al
tshark -r capture.pcap
-Y "http.request"
-T json |
python3 -m json.tool | head -50
# Belirli alanları JSON olarak al
tshark -i eth0
-Y "dns"
-T ek
-e frame.time_epoch
-e ip.src
-e dns.qry.name
-e dns.resp.addr 2>/dev/null |
# Elasticsearch'e doğrudan gönder
while read line; do
curl -s -X POST "localhost:9200/dns-logs/_doc"
-H "Content-Type: application/json"
-d "$line" > /dev/null
done
Performans İpuçları
tshark’ı yoğun trafikte kullanırken bazı noktalara dikkat etmek lazım:
- İsim çözümlemeyi kapat:
-nparametresi büyük fark yaratır. Her IP için reverse DNS sorgusu yapmak hem yavaşlatır hem de DNS trafiği oluşturur.
- Yakalama filtresi kullan:
-file BPF filtresi kullanmak,-Ydisplay filtresinden çok daha verimlidir. Kernel seviyesinde filtreleme yapar.
- Gereksiz alanları ayrıştırma:
-O protokolile sadece ihtiyacın olan protokolü detaylı parse et.
- Çekirdek sayısını göz önünde bulundur: tshark tek thread’de çalışır, çok yüksek trafikte paket düşürebilir. Böyle durumlarda ring buffer ile küçük dosyalar halinde kaydetmek daha güvenli.
- tmpfs kullan: Yakalama dosyalarını
/tmpyerine tmpfs mount point’e yaz, disk I/O darboğazını önler.
# Performanslı yakalama örneği
tshark -i eth0
-n
-f "port 80 or port 443"
-B 64
-w /dev/shm/capture.pcap
-B 64: Kernel capture buffer’ını 64MB’a ayarlar, paket kaybını azaltır.
Mevcut pcap Dosyalarını Analiz Etme
Wireshark ile kaydedilmiş veya tcpdump ile alınmış pcap dosyalarını tshark ile hızlıca analiz edebilirsin:
# Dosyada kaç paket var?
tshark -r capture.pcap -q -z io,stat,0
# Belirli bir zaman aralığındaki paketleri çıkar
tshark -r capture.pcap
-Y "frame.time >= "2024-01-15 14:00:00" and frame.time <= "2024-01-15 14:05:00""
# İki pcap dosyasını birleştir (mergecap ile)
mergecap -w combined.pcap capture1.pcap capture2.pcap
tshark -r combined.pcap -Y "http"
# pcap'ten belirli IP'nin trafiğini çıkar
tshark -r capture.pcap
-Y "ip.addr == 10.0.0.55"
-w /tmp/filtered.pcap
# Dosyayı text olarak export et
tshark -r capture.pcap -V > capture_verbose.txt
Sonuç
tshark, her sysadmin’in araç kutusunda bulunması gereken bir utility. Grafik arayüze ihtiyaç duymadan, script’lerle entegre çalışabilen, uzak sistemlerde SSH üzerinden kullanılabilen ve Wireshark’ın tüm protocol dissector gücünü taşıyan bu araç; ağ sorunlarını teşhis etmekten güvenlik izlemeye kadar geniş bir kullanım alanına sahip.
Başlangıçta parametre sayısı biraz ürkütücü görünebilir ama pratikte sürekli kullandığın 5-10 komut kalıbı oluşuyor ve işin kolaylaşıyor. En önemli alışkanlık, sorun çıkmadan önce temel trafik profilini bilmek. Normal DNS sorgu sayısını, tipik HTTP response sürelerini, bağlantı istatistiklerini bilen biri, anomali çıktığında çok daha hızlı tepki verebiliyor.
Önerin şu olsun: Bu komutları bir notebook’a yaz, zaman zaman test ortamında dene ve incident olmadan önce senaryolarını kafanda canlandır. Gerçek bir sorun çıktığında paniklemeden terminale oturup doğru komutu yazabilmek, saatlerce debug seansından çok daha değerli.