http başlıklarını alan BPF filtresi değil, tcpdump komutunuzda "-A" anahtarı.
tcpdump komutunuz, tcp trafiğini belirli bir hedefe veya son BPF filtresinin sıfır olmayan bir toplamla sonuçlanan bir hesaplama içerdiği eth0 üzerindeki belirli bir kaynaktan arar. "-A" seçeneğiyle, her paketi ASCII'de bağlantı düzeyi üstbilgisine ek olarak yazdırır.
Aşağıdaki hesaplamayı açıkladım, ancak gerçek filtrede, muhtemelen kopyalama ve yapıştırma yoluyla bazı sorunların olduğuna inanıyorum. Eğer tcpdump bu filtreleri kullandığınızda,
ip[2:2]
iki bayt (yani 3 & 4 bayt) ifade eder bayt sınırları girmeyen alanlar incelerken genellikle kullanılan tcp bit maskeleme, kullandığınız IP başlığında, bayt 2'den başlayarak (ofset 0'da başladığını unutmayın). Bu toplam, IP paketinin maksimum uzunluğunu 65535 bayt olabilecek toplam uzunluğunu temsil eder. Burada bit maskesi için
, netlik için, ben önceden pended '0' öylesine 0xf
0x0f
olur maske ettik. Masanın üstündeki '0', aşağıdaki GuyHarris'ten gelen yoruma göre düştü.
ip[0]&0x0f
bu genellikle için 4 ile çarpılarak, 32 bitlik kelimeler ve gibi IP başlık uzunluğunu verecek IP başlığındaki 0 baytı ikinci yarısında (yani 1 bayt), değinmektedir böyle bir hesaplama.
tcp[12]&0xf0)
bu genellikle ile çarpılır, 32-bitlik kelimelerle ve bu şekilde TCP başlığının boyutunu belirtir veri alanı ofset byte 12 birinci yarısı (diğer bir deyişle 11 bayt), değinmektedir Böyle bir hesaplama için 4.
Sen
Filtreniz gereken onlar 32 bit/4 bayt kelimelerdir çünkü 4'e son 2 uzunlukları çarpmak gerekiyor ve bu yüzden doğru olduğu hesaplanması için bayt olarak toplam çevrilecek gerek hesaplama: - IP başlık uzunluğunu - (bayt)
- IP paket uzunluğu, TCP başlık uzunluğu
ve bu değer arayan ze edilmesi Eğer çıkarma gerçekleştirdiğinizde bu
sudo tcpdump -A -nnpi eth0 '(ip[2:2] - ((ip[0]&0x0f)*4) - ((tcp[12]&0xf0)*4) != 0)'
gibi ro, yani bir şey, bir sıfır olmayan toplam arıyoruz.Bu sıfır olmayan toplam, katmanın (4) yukarısında, yani tcp veri yükündeki verilerin, tipik olarak uygulama trafiğinin olduğu anlamına gelir.
Ayrıca, port 80
varsayarak en http trafiği port 80
Böyle bir filtre yaygın ama normal RFC'lere göre olmayan bir SYN, verileri tespit etmek için güvenlik halk tarafından kullanılır bitti eklemek isteyebilirsiniz izin verilir.
'tcp[13]=0x02 and (ip[2:2] - ((ip[0]&0x0f)*4) - ((tcp[12]&0xf0)*4) != 0)'
TCPIPGuide Btw TCP/IP üzerinde çok iyi, ücretsiz online rehber - yani her şey gibi bir şey olmazdı.
Güncelleme: Guy Harris güncelleme gereği bit maskesi üzerinde 'lider sıfır' bölümünü değiştirin. aynı şey 0xf`
'0x0f' ve '; önde gelen sıfırlar onaltılık değerlerde ihmal edilebilir. Bununla birlikte, kod, önde gelen sıfırlar varsa, daha fazla * açıkça * okuyabilir. '<< 2',' * 4' ile aynıdır; Bununla birlikte, >> 2 ','/2 '(2'ye böl), ki bu yanlıştır - muhtemelen bir yazım hatasıdır. –
Çok çok kapsamlı bir cevap verdiğiniz için teşekkürler! lider sıfır düştü eğer – kingasmk
@GuyHarris thx, ben bu yüzden sadece ben netlik için benim yorum koymak düşündüm emin değildi. İlgili '>> 2'FC * 4'' aynı olmak, ben sadece * 4 'oldukça açıktır 'gibi netlik için 2' >>' dan değiştirdi ve değerlerin farkı açıklamak için gerekli olduğunu hissetti (32 -bit kelimelere göre baytlar) ve '<< 2' yazım hatası ile ilgili şüpheleri ortadan kaldırır. –