Linux'ta TCP trafik verilerini almanın en kolay yolu nedir?


79

Linux kutumdaki herhangi bir arabirim üzerinden geçen tüm TCP verilerini (TCP başlıkları veya başka bir şey değil) göstermek için basit bir yol istiyorum.

Mesela, eğer sihirli bir komut istiyorum ki:

magic_commmand_I_want port=1234

o zaman makinemdeki 1234 numaralı bağlantı noktasını dinleyen bir sunucu varsa ve birileri yaptıysa:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port

Sonra büyülü komut sadece basardı:

hello

"Tcpdump", "ethereal", "tethereal", "tshark" ve diğerlerini denedim, ancak onları nasıl elde edeceğiniz belli değil:

  • IP adreslerini veya diğer meta verileri gösterme
  • bireysel paketleri ve başlıklarını değil yalnızca gönderilen "verileri" gösterir
  • verileri, onaltılı olmayan ve paket ofset işaretleyicileriyle olduğu gibi yazdırabilirsiniz.
  • hissetmenize tüm ağ trafiğini (açıldığını gösteriyor olsun eth0 veya eth1 ya lo , vb ...)

Evet, muhtemelen bunu yapmak için bir grup unix komutunu bir araya getirebilirsiniz, fakat bu bir dahaki sefere hatırlamak çok kolay değil :)

Bunu yapan basit bir komut satırı örneğine sahipseniz, istediğim şey budur.


2
tcpdump, istediğiniz sihirli komuttur. Wireshark, tcpdump'un kullandığı kütüphanenin üstünde güzel bir arayüzdür
Vinko Vrsalovic,

3
Bunun eski bir soru olduğunu biliyorum ama neden "sunucu tarafı" için nc kullanmanın bir seçenek olmadığını merak ediyorum. "nc -l 1234", 1234 numaralı bağlantı noktasını dinleyen ve kendisine gönderilenleri yazdıran ve bağlantıyı kapatan bir sunucu oluşturur. Bağlantıyı canlı tutmak ve bağlantıyı kesmek istemiyorsanız "-k" seçeneğini ekleyebilirsiniz.
StFS

2
@ STFS, çalışan bir limanı koklamak istediğinden ve nc şikayetçi olacağından
saat

Yanıtlar:


106

Güncelleme:

Yorumlarda Michal'ın işaret ettiği gibi: tcpflow 1.3 sürümünde, -e seçeneği tarayıcı adını belirlemek için kullanılır. Bu nedenle "Geçersiz tarayıcı adı '8983'" hatası yazdırıldı. Doğru komut

sudo tcpflow -i any -C -J port 1234

(ayrıca en son sürümde -Jolarak değiştirildi -g)


Beni " tcpflow " a yönlendirdiğin için teşekkürler . İşte komut satırı:

tcpflow -i any -C -e port 1234  # as root, or with sudo

Bu istediğim her şeyi yapıyor

  • veri bayt bayt, geldiği gibi
  • başka bir meta veri göstermiyor
  • Tüm arayüzleri dinler (böylece makinenin içinden ve dışından gelen verileri toplar)

" -C" Bir dosya yerine konsola atmasını söyler. " -e" Renkleri etkinleştirir, böylece istemci-> sunucu ve sunucu-> istemci görsel olarak farklıdır.

Tcpflow'u sadece yaparak yükledim

sudo apt-get install tcpflow

2
Vay. tcpflow harika, teşekkürler! Bana bir telon acı ile yaşadığım TONNE acısını kurtardı. Wireshark, tcpdump, etc çok fazla bilgiye sahip ve asıl sorunun sorduğu şeyi yapmıyor. tcpflow bunun için idealdir.
Russ

10
Tcpflow 1.3 sürümünden -e, tarayıcı adını belirlemek için seçenek kullanılır. Bu nedenle "Geçersiz tarayıcı adı '8983'" hatası yazdırıldı. Doğru komutsudo tcpflow -i any -C -J port 1234
Michal Kováč

6
Not -Jolarak değiştirildi -gson sürümü (ler) in.
tvon

2
Birisi aracın yazarlarına "geriye dönük uyumluluk" teriminin ne anlama geldiğini açıklamalıdır!
Sridhar Sarnobat

Benim için iki kez "şeyler" basar. Neden ? lpaste.net/3984129577801744384
user1198559

29

socat, istediğiniz bir araçtır. Bir vekil olarak hareket edebilir:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

Daha sonra uygulamanız doğrudan 1234'e bağlanmak yerine 4444 numaralı bağlantı noktasını bağlamalıdır.

-v seçeneği, socat'ın aldığı her şeyi standart hatayla (stderr) yazdırabilmektir.

Güncelleme:

Socat makinenizde mevcut değilse, yine de netcat ile bu şekilde öykünebilirsiniz:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

uyarılar: bu seçenek tek yönlüdür. ikinci netcat örneği, sunucunuzdan standart çıktıya kadar olan herhangi bir yanıtı basacaktır. O zaman hala yapabilirsin:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo

İstemci ve sunucu üzerinde denetimim olmadığını varsayalım (veya durdurmak istemiyorum), bu nedenle hangi bağlantı noktasının dahil olduğunu değiştiremiyorum veya trafiği engelleyemiyorum. Sonra ne?

20

Wireshark'ı dene . Hem Linux hem de Windows için hedeflenmiş mükemmel bir protokol analizörüdür.


3
Benim deneyimim, arayüz gerçekten linux üzerinde berbat olmasıdır.
Joe Phillips

kahretsin, benden önce oradasın, wireshark'ta +1

Örnek bir komut satırı verebilir misiniz?

Bu bağlantıya bir göz atın wiki.wireshark.org/Tools wireshark için komut satırı araçlarının bir listesini verir. Dumpcap'a dikkat edin.
Kevin Boyd,

13

tcpflow istediğin şey. Man sayfasından ayıkla:

AÇIKLAMA
tcpflow, TCP bağlantılarının bir parçası olarak iletilen verileri toplayan (akışlar) ve verileri protokol analizi veya hata ayıklama için uygun bir şekilde depolayan bir programdır. Tcpdump (4) gibi bir program, tel üzerinde görülen paketlerin bir özetini gösterir, ancak genellikle iletilen verileri kaydetmez. Buna karşılık, tcpflow, gerçek veri akışlarını yeniden yapılandırır ve daha sonra analiz için her akışı ayrı bir dosyada saklar. tcpflow, TCP sıra numaralarını anlar ve yeniden iletimlerden veya sipariş dışı teslimattan bağımsız olarak veri akışlarını doğru şekilde yeniden yapılandırır.

tcpflow, yakalanan tüm verileri formun adlarına sahip dosyalarda saklar.

192.168.101.102.02345-010.011.012.013.45103

yukarıdaki dosyanın içeriği, ana bilgisayardan 192.168.101.102 bağlantı noktası 2345'ten, ana bilgisayar 10.11.12.13 bağlantı noktası 45103'e iletilir.

Uygulama uygulamanızdan sunucunuza bir bağlantı kurun. Bağlantı kurulurken ve çalışırken, tcpflow hala ondan veri alabiliyor. Örnek olarak:

$ sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

Her veri 127.000.000.001.48842-127.000.000.001.05555 adında bir dosyada saklanacaktır.

Bunu hala standart çıktıda -Cs seçeneğiyle yönlendirebilirsiniz. Tcpflow'un yakalamasını istediğiniz harfleri ayarlamak için ifadeyle oynatmak için manuel sayfayı okuyun.


2

ngrepbunun için çok güzel. Paketlerin içinde arama yapmak için bir BPF dizesini ve isteğe bağlı bir dizeyi alır ve ardından paket içeriğini oldukça kullanışlı bir formatta ekrana gönderir. İsteğe bağlı olarak, daha sonra Wireshark'ta daha yakından inceleyebileceğiniz bir pcap_dump dosyasına da dökülür.


0

Chaosreader'a bir bakın . İstediğinizden biraz daha fazla ve biraz farklı olsa da, muhtemelen istediğinizi yapmak için kodunu değiştirebilirsiniz.


-1

Belki tcpdump için bir sarıcı yazabilirsiniz, örneğin tüm gereksiz bilgileri kaldıracak

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.