Dikkatli bir Linux sistem yöneticisi olarak, belirli hizmetler için web trafiğini izlemek isteyebilirsiniz. İşte nedeni?
- Telemetri tespiti: Hassas kullanıcı verilerine sahip bazı araçlar, olmaması gereken zamanlarda çevrimiçi hale gelir. Çevrimdışı cüzdan veya not alma uygulamaları buna iyi birer örnektir.
- Bir şeyler ters gittiğinde uygulama hata ayıklaması.
- Yüksek trafik kullanımı: 4G veya 5G bağlantıları genellikle sınırlıdır, bu nedenle cüzdanın sınırlar içinde kalması daha iyidir.
Sunucularda ise konteynerların, özellikle Docker veya LXC’nin popülerliği nedeniyle durum daha da karmaşık hale geliyor.
Bu şelale içerisinde bir uygulamanın trafiğini nasıl tespit edebiliriz?
Monastic Academy’nin Httpat‘ı bu amaç için harika bir çözüm. Kök erişimi olmadan çalışır, trafik yakalama için kullanılan TUN sanal aygıtıyla çalışabilmek için yalnızca /dev/net/tun dizinine yazma erişiminiz olması gerekir.
Httpat Kurulumu
Uygulama Go dilinde yazılmıştır ve Github sürüm sayfasından şu üç komutu tek tek kullanarak kolayca indirilebilir:
wget -c https://github.com/monasticacademy/httptap/releases/latest/download/httptap_linux_$(uname -m).tar.gz
tar xf httptap_linux_$(uname -m).tar.gz
sudo mv httptap /usr/bin && rm -rf httptap_linux_$(uname -m).tar.gz
Go ile kurulum:
go install github.com/monasticacademy/httptap@latest
Bir diğer yol da Linux dağıtım deponuzda httptap paketini kontrol etmektir. Repology projesi, hangi dağıtımların şu anda bir Httptap paketine sahip olduğunu görmek için harika bir yoldur.
Ubuntu 24.04 ve üzeri sürümlerde, aşağıdaki AppArmor kısıtlamaları devre dışı bırakılmalıdır:
sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
Yaygın kullanım durumları için pratik örnekler
Hızlı bir başlangıç için curl kullanarak “linuxhandbook.com” web sitesini yükleyelim:
httptap -- curl -s -o /dev/null https://linuxhandbook.com
Harika görünüyor, curl’ün 200 kodlu bir GET isteği için 141714 bayt kullandığını söylüyor, bu da sorun değil. Httptap’ın ne yaptığını görmek için curl’den herhangi bir çıktı almamak adına -s -o /dev/null kullanıyoruz.
---> GET https://linuxhandbook.com/
<--- 200 https://linuxhandbook.com/ (141714 bytes)Yönlendirmeleri kullanan google.com sitesini deneyelim:
httptap -- python -c "import requests; requests.get('https://google.com')"
---> GET https://google.com/
<--- 301 https://google.com/ (220 bytes)
decoding gzip content
---> GET https://www.google.com/
<--- 200 https://www.google.com/ (20721 bytes)
Çalışıyor ve 301 yönlendirmeleri ve arşivlenmiş içerikler hakkında bizi bilgilendiriyor. Hiç de fena değil.
Diyelim ki Google Cloud’da gcloud adlı komut satırı aracıyla yönetilen birkaç örneğimiz var. Bu komut hangi HTTP uç noktalarını kullanıyor? Bir bakalım:
httptap -- gcloud compute instances list
---> POST https://oauth2.googleapis.com/token
<--- 200 https://oauth2.googleapis.com/token (997 bytes)
---> GET https://compute.googleapis.com/compute/v1/projects/maple-public-website/aggregated/instances?alt=json&includeAllScopes=True&maxResults=500&returnPartialSuccess=True
<--- 200 https://compute.googleapis.com/compute/v1/projects/maple-public-website/aggregated/instances?alt=json&includeAllScopes=True&maxResults=500&returnPartialSuccess=True (19921 bytes)
Cevap compute.googleapis.com’dur.
Tamam, Dropbox depolama alanımız ve onu komut satırından yönetmek için rclone aracımız var. Hangi API uç noktası Dropbox’ı kullanıyor?
$ httptap -- rclone lsf dropbox:
decoding gzip content
---> POST https://api.dropboxapi.com/2/files/list_folder
<--- 200 https://api.dropboxapi.com/2/files/list_folder (2119 bytes)
Cevap yine çok net: api.dropboxapi.com.
DoH – şifreli DNS, DNS-over-HTTPS ile biraz oynayalım. https://dns.quad9.net/dns-query uç noktası üzerinden DoH’u destekleyen ünlü bir DNS servisi olan Quad9’u kullanacağız.
$ httptap -- curl -sL --doh-url https://dns.quad9.net/dns-query https://linuxhandbook.com -o /dev/null
---> POST https://dns.quad9.net/dns-query
<--- 200 https://dns.quad9.net/dns-query (83 bytes)
---> POST https://dns.quad9.net/dns-query
<--- 200 https://dns.quad9.net/dns-query (119 bytes)
---> GET https://linuxhandbook.com/
<--- 200 https://linuxhandbook.com/ (141727 bytes)
Şimdi Quad9 DoH uç noktasına iki POST isteği ve hedefe – linuxhandbook.com/ – bir GET isteği göndererek düzgün çalışıp çalışmadığını kontrol ettiğini ve hepsinin başarılı olduğunu görebiliriz.
Şimdi işin iç yüzüne bir bakalım – DNS-over-HTTPS isteklerinin yüklerini –head ve –body bayraklarıyla yazdıralım:
./httptap --head --body -- curl -sL --doh-url https://dns.quad9.net/dns-query https://linuxhandbook.com -o /dev/null---> POST https://dns.quad9.net/dns-query
> Accept: */*
> Content-Type: application/dns-message
> Content-Length: 35
linuxhandbookcom
<--- 200 https://dns.quad9.net/dns-query (83 bytes)
< Content-Type: application/dns-message
< Cache-Control: max-age=300
< Content-Length: 83
< Server: h2o/dnsdist
< Date: Sun, 09 Feb 2025 15:43:37 GMT
linuxhandbookcom
,he
,he
,CI�
---> POST https://dns.quad9.net/dns-query
> Accept: */*
> Content-Type: application/dns-message
> Content-Length: 35
linuxhandbookcom
<--- 200 https://dns.quad9.net/dns-query (119 bytes)
< Server: h2o/dnsdist
< Date: Sun, 09 Feb 2025 15:43:38 GMT
< Content-Type: application/dns-message
< Cache-Control: max-age=300
< Content-Length: 119
linuxhandbookcom
,&G CI�
,&G he
,&G he
---> GET https://linuxhandbook.com/
> User-Agent: curl/8.11.1
> Accept: */*
<--- 200 https://linuxhandbook.com/ (141742 bytes)
< Cache-Control: private, max-age=0, must-revalidate, no-cache, no-store
< Pagespeed: off
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-Origin-Cache-Control: public, max-age=0
< Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=bAHIntCPfaGgoUwEwhk5QWPETFvnq5K9Iw60TGIAcnTisEfo%2BjKulz%2FJP7rTPgmyznVSc%2BSwIOKtajz%2BZTg71To4BuapDd%2BKdgyar%2FpIGT76XWH9%2FVNMyliYqgceD7DwuBmiPr3F77zxa7b6ty8J"}],"group":"cf-nel","max_age":604800}
< Server: cloudflare
< Cf-Ray: 90f4fa286f9970bc-WAW
< X-Middleton-Response: 200
< X-Powered-By: Express
< Cf-Cache-Status: DYNAMIC
< Alt-Svc: h3=":443"; ma=86400
< Date: Sun, 09 Feb 2025 15:43:48 GMT
< Display: orig_site_sol
< Expires: Sat, 08 Feb 2025 15:43:48 GMT
< Response: 200
< Set-Cookie: ezoictest=stable; Path=/; Domain=linuxhandbook.com; Expires=Sun, 09 Feb 2025 16:13:48 GMT; HttpOnly
< Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
< X-Middleton-Display: orig_site_sol
< Server-Timing: cfL4;desc="?proto=TCP&rtt=0&min_rtt=0&rtt_var=0&sent=0&recv=0&lost=0&retrans=0&sent_bytes=0&recv_bytes=0&delivery_rate=0&cwnd=0&unsent_bytes=0&cid=0a7f5fbffa6452d4&ts=351&x=0"
< Content-Type: text/html; charset=utf-8
< Vary: Accept-Encoding,User-Agent
< X-Ezoic-Cdn: Miss
< X-Sol: orig
< Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
<!DOCTYPE html><html lang="en" class="group/html min-h-screen has-inline-code-block
has-gray-scale-Slate
" data-prismjs-copy="Copy" data-prismjs-copy-error="Error" data-prismjs-copy-success="Copied"><head><meta charset="UTF-8"/>
...
Harika! Httptap, –head seçeneği sayesinde HTTP başlıklarını ve –body seçeneği kullanıldığından dolayı da yükleri yakaladı.
HAR
HTTP istekleri ve yanıtlarıyla daha rahat çalışabilmek için Httptap, HAR formatını destekler:
httptap --dump-har out.har -- curl -Lso /dev/null https://linuxhandbook.com
Birçok HAR görüntüleyici uygulaması var, bunları Google HAR Analyzer’da açalım:

Daha kullanışlı Httptap seçenekleri:
--no-new-user-namespace– Kullanıcı adı alanı olmadan root olarak çalıştırın.--subnetand--gateway– Alt süreç için görünür olan ağ arayüzünün alt ağı ve ağ geçidi.--dump-tcp– tüm TCP paketlerini dök
--http HTTP– HTTPS trafiğini yakalamak için TCP bağlantı noktalarının listesi (varsayılan: 80)
--https HTTPS– HTTP trafiğini yakalamak için TCP bağlantı noktalarının listesi (varsayılan: 443)
Httptap, işlemi izole bir ağ ad alanında çalıştırır ve ayrıca doğru DNS’nin kullanıldığından emin olmak için /etc/resolv.conf dosyası için bir üst dosya sistemi ekler. Linux ad alanı, ağ arayüzleri ve yönlendirme kurallarının bir listesidir ve httptap, sistemdeki ağ trafiğini etkilememek için bunu kullanır.
Ayrıca HTTPS trafiğini şifreleyebilmek için bir Sertifika Yetkilisi de enjekte eder. Httptap bir TUN aygıtı oluşturur ve tüm ağ trafiğinin bu aygıt üzerinden yönlendirildiği bir ortamda, tıpkı OpenVPN gibi, alt işlemi çalıştırır.
Httptap, iç TCP ve UDP paketleri de dahil olmak üzere IP paketlerini ayrıştırır ve TCP/IP protokolünün yazılım uygulamasını kullanarak ham IP paketlerini geri yazar.
Gelişmiş – istekleri ve yanıtları değiştirme
Şu anda bunu yapmak için bir arayüz veya komut satırı seçeneği bulunmuyor, ancak basit bir kaynak kodu değişikliğiyle mümkün. Elbette, temel Go programlama becerileri gerekiyor.
HTTP isteklerini işleyen kod burada, yanıtları işleyen kod ise birkaç satır aşağıda. Yani, giden trafiği normal bir GO HTTP isteği değişikliğiyle aynı şekilde değiştirmek çok kolay. Gerçek örnekler: Uygulama telemetrisini daha az okunabilir hale getirmek için rastgele veriler ekleyerek değiştirin veya rastgele hale getirin.
Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.