Linux'ta tek bir komutu koklamak için kolay bir komut satırı aracı var mı?


11

Linux'ta tek bir komut koklama paketi için tek bir komut satırı aracı olup olmadığını isterdim. sniff dumpfile commandterminalde sniff paketlemek ve başka bir yerde paketlerin bir dökümü almak istediğiniz komutu çalıştırmak gibi bir şey.

Tek bir ağ arabirimimdeki tüm TCP trafiğini değil, yalnızca girdiğim tek komutun ağ trafiğini dökmek / kaydetmek / görmek istiyorum. Bilgisayarıma giriş yapmış ve arka planda çalışan IRC olsaydı ve yapsaydım sniff somefile wget http://www.google.com, wget komutunun http://www.google.com'u indirmek için yaptığı tüm ağ trafiğini görmek isterdim . 'Somefile' dosyasının IRC ağ trafiğinin kafa karıştırıcı olmasını istemiyorum.

Farklı bir komutu kabul eden ve farklı bir şey yapan birçok linux / unix komutu vardır. Gönderen sudo(süper kullanıcı olarak çalıştırmak), nicedeğişim güzel düzeyinde, trickle(bir komutun bant genişliğini sınırlamak)


1
Tam olarak yapmak istediğiniz şey nedir? Belirli bir komutun çalıştırılıp çalıştırılmadığını kontrol etmek istiyor musunuz? Ağ trafiğini koklamak ister misiniz? Çünkü 'bir komut koklama paketi' ifadesini kullanmak benim için hiçbir anlam ifade etmiyor ...
wzzrd

wzzrd, genişletilmiş soru
Rory

Yanıtlar:


10

Bildiğim bir şey yok, ancak teorik olarak benzer bir şey elde etmek zor olmamalı. Strace ağ sistem çağrılarını durdurmak için kullanılabilir.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

Bu, çekirdek ve işlem arasında gönderilen veriler hakkında bilgi verecektir. Strace çıktı tam olarak istediğiniz gibi değil. Ancak, strace sistem çağrılarını durdurmak için ptrace sistem çağrısını kullanır. Verileri biraz daha kullanışlı hale getirmek için bir program yazmak mümkün olabilir.

Alternatif olarak, hoş kullanışlı soketi kesebilir, sistem çağrılarını bağlayabilir ve dinleyebilirsiniz. Bu çağrılarda ptrace kullanılan küçük bir program ve yeni bir yuva her açıldığında yakalama filtresini dinamik olarak değiştirmek için libpcap yazmak mümkün olabilir.


Wireshark'ın okuyabileceği bir şey çıkarırsa harika olurdu.
Brad Gilbert

Yukarıda açıklanan şeridin Solaris (ve muhtemelen diğer ticari Unices) için doğru olduğunu unutmayın. Linux'ta strace, işletimde ve Solaris'teki kafeslere veya HP-UX'ta Toskana çıkışa benzer bir sistem çağrısı izleyicisidir.
James F

1
Linux'taki sıkıntıyı anlattım.
David Pashley


4

Wireshark'ı deneyin - komut tshark

  • tshark, bir arabirimden yakalanan trafikte filtreler seçmenize olanak tanır
  • ilgi uygulamanız tarafından yapılan iletişim türünü tanımlamak için debian lsof gibi diğer yardımcı programları kullanın .

Yoksa, gerçekten sadece LSOF'u mu istiyorsun?


Bir işlemle ilişkili tüm iletişim için dinamik olarak filtrelemeye devam edecek bir araç olduğunu düşünmüyorum. Ancak, süreç iletişimlerini aşağıdaki araçlarla izlemeyi deneyebilirsiniz ve bu işlemin iletişimini lsofsisteminizde çalışan diğer tüm trafikten izole edebilecek iyi bir filtreye sahip olduğunuzda, doğru yakalamayı elde edebilirsiniz.

Örneğin, wgetgenellikle hedef IP adresi işlemle ilgili diğer trafikten farklıdır. skypeHedef port aralığı gibi bir şey alsanız bile genellikle bir örnek için sabittir.


Bu biraz belirsizlik ilkesine benziyor. Genellikle bir dizi iletişim yolundan neler geçtiğini (tanımlanan akış grubuna sniffer filtrelemesi ile) veya farklı iletişim bağlantılarının nerede yapıldığını (lsof ile) bilirsiniz.

Her ikisinin de bir uygulama için yapılıp yapılamayacağını bilmek istiyorum. Bence bu mümkün olmalı. Ancak, henüz hiçbir araç görmedim.


lsof harika, ama ne yapıyor / gönderme / alma görmek istiyorum .
Rory

4

Filtre ifadelerini kullanmayı öğrenin.

Bu sizin istediğiniz süslü şeyler yapmazken.

Bu, yakalamadan "IRC gibi kafa karıştırıcı şeylerin" neredeyse tamamını kaldırmanıza olanak tanır.

Ayrıca, gelecekte hızlı başvuru için filtre sözdizimini bilmek çok yararlıdır.


2

Özellikle bir web tarayıcısı / web sayfası için Firefox için Firebug eklentisi gibi bir şey, aradığınız bilgilerin bir kısmını verebilir: http://getfirebug.com/net.html

Daha genel uygulamalar için, uygulama tarafından kullanılan port (lar) ı tanımlamak için netstat ve daha sonra sadece bu trafiği yakalamak için bir filtreyle Wireshark / tshark / dtrace kullanmanız gerekebilir. Aradığınız tek satır yanıtı değil ...


1

Bir fikir, VMWare'i deneyin

-setup bir vm
-configure VM özel bir ara yüz kullanımı
ev sahibi bu arayüz ile -sniff (onun saldırısı olan biri gibi)

Eğer o ağda hangi ağ uygulamalarının çalıştığını izole ederseniz cevabınız olabilir.

Daha ideal bir çözüm, sanırım, VMWare'in konuşacak bir arayüzü nasıl seçtiğini nasıl belirlediği konusunda yapmaktır. Büyüsünün kullandığı çekirdek modüllerinden geldiğini düşünüyorum, bu durumda muhtemelen vmnet çekirdek modülü.

Bildiğim kadarıyla uygulamalar hangi arayüz hakkında konuştuklarının farkında değiller ve bunun tasarım gereği olduğuna inanıyorum; böyle şeyler için endişelenmeleri gerekmemelidir.

Üstelik,
Belki de zaten bir program var, bilmiyorum. Ama eğer biri yazıldıysa buna nettrace (örneğin) diyebilirsiniz ve Kullanım şöyle olabilir

nettrace program arayüzü

daha sonra kullandığı arayüzü koklayın ve gerçek arayüzünüze rota ekleyin (belki de otomatik olarak yapar)


evet bu mümkün olurdu. Ancak bunu yapmak için basit ve hızlı bir araç olsaydı harika olurdu.
Rory

Belki de bu basit aracın zamanı gelmiştir? Ben o kadar zor olacağını merak ediyorum, muhtemelen vmnet mod iyi bir başlangıç ​​noktası olabilir (ancak lisans sorunları olup olmadığını bilmiyorum). Belki de (hack) sadece vmnet modunu kullanın. Bunun gibi sorularla sık sık ilgilendiğimi biliyorum.
rev

1

Kutuda o zaman Google'a bağlanmaya çalışan tek kişi olduğunuzu varsayarsak, böyle bir şeyin hile yapması gerektiğini düşünürüm:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

Kutuda google'a bağlanmaya çalışan tek bağlantı siz değilseniz, bağlandığınız IP / bağlantı noktasını tanımlayabiliyorsanız src bağlantı noktası / src ip'i de belirtebilirsiniz.

Src portunu tanımlamak, kullandığınız istemcide belirtmediğiniz sürece sorun olabilir. Wget ile yapabilir misin emin değilim.

Ben netcatgerçekten ilgilendi google olsaydı, netcat üzerinden (manuel) GET yapabilirsiniz böylece hem src hem de dst bağlantı noktaları ile belirtebilirsiniz şüpheli .

Elbette man sayfası size ayrıntılar verecek


1

Tcpdump man sayfası ve birçok web sitesi filtrelerin derinlemesine örneklerini sunar ve tcpdump filtre ifadelerinin birkaç çevrimiçi deposu bile vardır. Ağ trafiği (kaynak, hedef, portlar, protokoller, vb.) Hakkında bir program bildiğinizi varsayarak, hayal edebileceğiniz hemen hemen her şeyi yapabilmelidir.

Bir sunucu veya başsız kutu üzerinde çalışıyorsanız, her zaman tcpdump'ın bir döküm dosyası yazmasını ve ardından iş istasyonunuzdaki Wireshark'ta açmasını ve gelişmiş filtreleme ve grafik arayüzü almasını sağlayabilirsiniz.


Erm, tcpdump komutuna hangi geçişi trafiği üreten tek bir uygulama ile sınırlar?
Milan Babuškov

1

Belki bu komut dosyası tshark komutunda uygun değişikliklerle istediğinizi yapar:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

Döküm dosyasını daha sonra okuyun:

tshark -r dump

8080 numaralı bağlantı noktasını ele geçiriyorsunuz, ancak 80 numaralı bağlantı noktasında trafik oluşturuyorsunuz; bu sizin niyetinizi tam olarak yapmaz.
James F

James: Proxy'm 8080'e bağlanıyor, senaryoyu böyle çalıştırdım. Bu yazının amacı için 80'i değiştirmeliydim.
Şimdi Değil

0

Dtrace buna izin vermeli, ancak henüz Linux'a yapılıp yapılmadığını bilmiyorum.

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.