Tcpdump kullanarak HTTP trafiğini izleme


42

Bir sunucu ve bir web sunucusu arasındaki HTTP trafiğini izlemek için şu anda kullanıyorum tcpdump. Bu iyi çalışıyor, ancak çıktıdaki bazı gereksiz verilerden kurtulmak istiyorum (hakkında tcpflowve bildiğim wiresharkhalde ortamımda hazır değiller).

Gönderen tcpdumpadam sayfası:

Tüm IPv4 HTTP paketlerini bağlantı noktası 80'e ve bağlantı noktasından yazdırmak için, örneğin SYN ve FIN paketlerini ve yalnızca ACK paketlerini değil, yalnızca veri içeren paketleri yazdırın.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Bu komut

sudo tcpdump -A 'src example.com ve tcp portu 80 ve (((ip [2: 2] - ((ip [0] & 0xf) << 2)) - ((tcp [12] & 0xf0) >> 2) )! = 0) '

aşağıdaki çıktıyı sağlar:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Bayraklar [P.], skala 918827135: 918827862, 351213824 ack, 4316 kazanmak, seçenekler [no, no.

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ... __ HTTP / 1.1 200 Tamam Sunucu: Apache / 2.2.3 (Red Hat) İçerik Türü: text / html; charset = UTF-8 Tarih: Sat, 14 Kas 2009 18:35:22 GMT Yaş: 7149
İçerik Uzunluğu: 438

<HTML> <HEAD> <TITLE> Örnek Web Sayfası </TITLE> </HEAD> <body>
<p> Bu web sayfasına ulaştınız ... </p> </BODY> </HTML>

Bu, vurgulanan kısım dışında neredeyse mükemmel. Bu nedir, son - daha önemlisi - ondan nasıl kurtulurum? Belki de komutun sonundaki ifadeye birazcık titriyordur?

Yanıtlar:


39

tcpdump komple paketleri basar. "Çöp" gördüğünüz aslında TCP paket başlıklarıdır.

Çıktınıza kesinlikle perl betiği ile masaj yapabilirsiniz, ama neden bunun yerine wireshark'ın metin sürümü olan tshark'ı kullanmıyorsunuz?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

tcpdump ile aynı argümanları alır (aynı kütüphane) ancak analizöründen beri derin paket muayenesi yapabilir, böylece filtrelerinizi daha da hassaslaştırabilirsiniz;

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'


1
Teşekkürler - tüm önerileri denedikten sonra, tshark iş için en iyi araç gibi görünüyor. Şu anda "tshark -d tcp.port == 8070, http -R 'http.request veya http.response'" kullanıyorum. Şimdi eğer tshark'ı "tcp akışını takip etsin" gibi yapabilseydim, tıpkı wireshark'ın yapabildiği gibi (Bu çok soruluyor, ama hala cevabı bulamadım). "-V", ilgilenmediğim TCP ve IP paketleri vb. Bilgileri görüntüler. Ama bir komut dosyası kullanarak bunu kaldırabilirim.
otto.poellath

4
Ayrıca her karakterin ASCII değerlerini eşleştirerek bir yakalama filtresinde "GET" için arama yapabilirsiniz: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Wireshark web sitesine bir süre önce dize eşleşen yakalama filtreleri oluşturmanıza yardımcı olan bir sayfa ekledim: wireshark.org/tools/string-cf.html
Gerald Combs 13.01

18

bakmak ngrep - bu sizin için bazı kullanım mighe.

diğerleri için referans olarak httpry [sunucu şu anda kapalı görünüyor, ancak umarım geçicidir] ve tshark pasif protokol analizi için de faydalıdır - ilki sadece http için, ikincisi - çok daha fazlası için.


2
Ngrep için +1. Çok kullanışlı bir araç.
tylerl

ngrep ve httpry kesinlikle yararlı görünüyor, ancak ngrep HTTP ve AFAIK'in farkında değil, httpry sadece HTTP başlıklarıyla çalışıyor ve veri yükünü gösteremiyor.
otto.poellath

@sapporo - sure - ngrep protokol agnostiktir, ancak "port 80" pcap filtresini ekleyebilir ve sadece [çoğu durumda] http trafiğini alabilirsiniz.
pQd

Ben, ngrep tcpdump'tan 100000 kat daha iyi
Daniel W.

5

Httpry veya justniffer'ı deneyin

Justniffer tcp paketlerinde iyi çalışarak yeniden yerleştirmeleri ve ip parçalanmasını yeniden düzenliyor


1
Teşekkürler! justniffer aradığım şeydi (bence çok basit ve talep süresini ölçen tek araç bu bence ).
gkop

1

Post işlemi için her şeyi bir pcap dosyasında saklayan bir aşağı tcpdump komut satırı kullanmanızı öneririm. Tam olarak ne aradığınıza bağlı olarak, tcpflow'u teşhis etmek, iletişimi analiz için tutarlı bir şekilde bir araya getirmek için harikadır.

Httpry için bazı kullanımlar da dahil olmak üzere bazı iyi bilgiler şu adreste bulunabilir: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html


0

Kullanmakta olduğunuz web sunucusu günlük üretmiyor mu? Elbette, HTTP trafiğini izlemenin çok daha iyi bir yolu olurdu, verileri analiz etmek için çok sayıda araç var ve herhangi bir yetkili web sunucusu güvenilir günlükler üretmelidir.


4
Açıkça. Yine de bunu düşündüğünü hayal ediyorum. Bazen, A ve B noktaları arasında gönderilen gerçek verileri izlemek yararlı olur
saat

0

Piyasada, HTTP Trafiğini izlemek için özel olarak tasarlanmış çeşitli araçlar bulunmaktadır. Fiddler2 ( http://www.fiddler2.org ) ve HTTP Debugger Pro bu araçlara örnek olarak verilebilir.


4
Önerileriniz için teşekkürler. Ne yazık ki, her iki araç da yalnızca Windows'ta çalışıyor gibi görünüyor. Bundan bahsetmemiştim, ama Linux'ta çalışan bir şeyi arıyorum.
otto.poellath
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.