Tek bir işlemin ağ trafiğini nasıl yakalayabilirim?

78

Tek bir işlem tarafından ele alınan ağ trafiğini incelemek isterim, ancak bu tür yoğun bir sistemle (aynı anda gerçekleşen çok sayıda trafik) uğraştığım için basit ağ yakalamaları çalışmayacaktır. % Co_de% veya tcpdump yakalamayı belirli bir işlemin ağ trafiğine ayırmanın bir yolu var mı? (% Co_de% kullanılması yetersiz.)

    
sordu Kees Cook 06.11.2010 07:56

14 cevap

16

Gerçekten de, Wireshark filtrelerini kullanarak bir yol var. Ancak, doğrudan işlem adı veya PID'ye göre filtreleyemezsiniz (çünkü ağ miktarları değildir).

İlk olarak işleminizin kullandığı protokolleri ve bağlantı noktalarını öğrenmelisiniz. (önceki yorumdaki netstat komutu iyi çalışıyor).

Ardından, gelen (veya giden) bağlantı noktasını yalnızca aldığınızla filtrelemek için Wireshark'ı kullanın. Bu, sürecinizin gelen ve giden trafiğini izole etmelidir.

    
verilen cevap OpenNingia 06.11.2010 10:53
106

Yeni bir işlem başlatmak ve izlemek için:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

Mevcut bir işlemi bilinen bir PID ile izlemek için:

strace -p $PID -f -e trace=network -s 10000
  • -f "yeni süreçleri takip et" içindir
  • -e bir filtre tanımlar
  • -s , dizelerin sınırını 32'den daha büyük olacak şekilde ayarlar
  • -p , işlem kimliğini ekleyecektir
verilen cevap Clausi 10.11.2010 12:04
48

Bu konunun biraz eski olduğunu biliyorum ama bence bu sizin bazılarınıza yardımcı olabilir:

Çekirdeğiniz buna izin veriyorsa, tek bir işlemin ağ trafiğini yakalamak, söz konusu işlemi yalıtılmış bir ağ ad alanında çalıştırıp söz konusu ad alanında da wireshark (veya diğer standart ağ oluşturma araçları) kullanarak kolayca yapılabilir.

Kurulum biraz karmaşık görünebilir, ancak bunu anladıktan ve tanıdıkça, işinizi o kadar kolaylaştıracaktır.

Bunu yapmak için:

  • test ağı ad alanı oluşturun:

    ip netns add test
    
  • bir çift sanal ağ arabirimi oluşturun (veth-a ve veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • veth-a arayüzünün aktif ad alanını değiştirin:

    ip link set veth-a netns test
    
  • sanal arabirimlerin IP adreslerini yapılandırın:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • test ad alanında yönlendirmeyi yapılandırın:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • ip_forward işlevini etkinleştirin ve oluşturduğunuz adresten gelen trafiği iletmek için bir NAT kuralı oluşturun (ağ arabirimini ve SNAT ip adresini ayarlamanız gerekir):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
    

    (İsterseniz MASQUERADE kuralını da kullanabilirsiniz)

  • Son olarak, analiz etmek istediğiniz süreci yeni ad alanında ve wireshark'da da çalıştırabilirsiniz:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    veth-a arayüzünü izlemeniz gerekecek.

verilen cevap felahdab 19.07.2014 13:39
13
netstat -taucp | grep <pid or process name>

Bu, bir uygulamanın kullanılan bağlantı noktasını da içerdiği bağlantıları gösterecektir.

    
verilen cevap Oli 06.11.2010 10:15
9

Benzer bir konuya geldim ve bu cevabı ioerror ile , burada açıklandığı şekilde NFLOG kullanarak :

# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# dumpcap -i nflog:30 -w uid-1000.pcap

Ardından, başka bir şey yapmayan bir kullanıcı hesabından söz konusu işlemi çalıştırabilirsiniz. Ayrıca, voila, yalnızca tek bir işlemden gelen trafiği yakaladınız ve yakaladınız.

Sadece herhangi birine yardımcı olması durumunda geri göndermek istedim.

    
verilen cevap szymon 06.04.2014 16:49
9

Sadece bir fikir: Uygulamanızı farklı bir IP adresine bağlamak mümkün mü? Eğer öyleyse, normal şüphelileri kullanabilirsiniz ( tcpdump , vb.)

Başka bir IP adresine bağlanamayan uygulamalar için araçlar:

İşte

  

fixsrcip , belirli kaynak IP adreslerine giden TCP ve UDP istemci soketlerini ( IPv4 ) ciltlemeye yönelik bir araçtır. çok bağlantılı ana bilgisayarlar

İşte

  

force_bind , belirli bir IP ve / veya bağlantı noktasında ciltlemeyi zorlamanıza izin verir. Hem IPv4 hem de IPv6 ile çalışır.

    
verilen cevap Clausi 10.11.2010 13:33
5

Bu kirli bir saldırıdır, ancak belirli bir UID için iptables ile bir yönlendirme veya günlük hedefi öneririm. örneğin:

iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG 
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG 

Ayrıca '--log-tcp-sequence', '--log-tcp-options', '--log-ip-options', '--log-uid' gibi bir şeye bakmaya da değer olabilir. Bu günlük hedef. Her ne kadar bir ton başka veri içeren bir pcap işlemine yardımcı olacağından şüpheleniyorum.

Paketleri işaretlemek istiyorsanız, NFLOG hedefi yararlı olabilir ve ardından belirli etiketli paketler, seçtiğiniz bir işlem için bir netlink soketine gönderilir. Bu, wireshark ve belirli bir uygulamayla belirli bir kullanıcı olarak çalışan bir şeyleri hacklemek için yararlı olur mu?

    
verilen cevap ioerror 12.12.2010 10:50
4

Deneme süresini deneyebilirsiniz - İşte

Tam olarak ne istediğinizi yapar, ya bir işlem kimliği veya çalışacak bir program verebilirsiniz.

    
verilen cevap pjf 01.04.2014 14:51
4

İlgilendiğiniz süreci strace altında yürütmeyi deneyin:

strace ping www.askubuntu.com

İşleminizin ne yaptığına dair size çok ayrıntılı bilgiler verecektir. Bir süreç istediği herhangi bir limanı açabilir, önceden tanımlanmış bir filtre kullanarak bir şeyleri kaçırabilirsiniz.

Başka bir yaklaşım, ağınız üzerinde soyulmuş sanal bir makine veya bir test makinesi kullanmak ve bunun üzerine üzerinde işleminizi bunun üzerine koymak olacaktır. Ardından, o makineden tüm verileri yakalamak için Wireshark 'ı kullanabilirsiniz. Yakaladığınız trafiğin alakalı olacağından eminsiniz.

    
verilen cevap user5883 10.11.2010 10:54
3

adresinden yararlanarak yanıt ioerror Trafikte bir işaretçiyi ayarlamak için iptables --uid-owner 'i kullanabileceğinizi düşündüğümde, wireshark'a yalnızca bu işaretleyiciyle trafik çekmesini isteyebilirsiniz. Bir DSCP (diferansiyel servis işareti), akış kimliği veya qos işaretçisi kullanabilirsiniz.

Ya da gerçekten de bu paketleri farklı bir arabirimden göndermek için kullanabilir ve sonra yalnızca bu arabirimde yakalayabilirsiniz.

    
verilen cevap poolie 12.12.2010 11:23
3

Yukarıdaki harika cevapta felahdab tarafından anlatılan bir C uygulaması yazdım!

Buraya bakın: nsntrace github repo

    
verilen cevap Jonas Danielsson 15.07.2016 13:24
2

wireshark bug # 1184 bu özelliktir. Henüz uygulanmadı.
cmanynard kullanıcısından ask.wireshark.org adresinden kopyalandı

    
verilen cevap JamesThomasMoon1979 15.01.2015 05:35
-1

belki iptables ve ulog çalışabilir? Tam bir tarifim olmadığı için değil, ama düşün iptables işlemleri eşleştirebildiğim zaman, ülseri kullanabildiniz.

    
verilen cevap chesty 06.11.2010 09:30
-1

Netstat'ı yürütmek ve bir metin dosyasına kaydetmek için bir kabuk komut dosyası oluşturabileceğinizi düşünüyorum. Bir şey gibi (çok kaba adımlar):

echo "press q to quit"
while [ <q is not pressed>]
do
    'netstat -taucp | grep <pid or process name> 1>>logfile.txt'
done

Ben bir programcı değilim, bu yüzden bunu düzeltemiyorum. Ama burada birileri bıraktığım yerden başlayabilir ve sizin için çalışan bir senaryo oluşturabilir.

    
verilen cevap tinhed 10.11.2010 07:59

Etiketlerdeki diğer soruları oku