Bir işlemin ağ bağlantılarını göster


25

Bir sürecin bağlantılarını göstermenin bir yolu var mı? Bunun gibi bir şey:

show PID

bunun showiçin bir komut PIDve işlemin pid'si. İstediğim çıktı, sürecin tüm bağlantılarından (gerçek zamanlı olarak) oluşuyor. Örneğin, işlem 173.194.112.151'e bağlanmaya çalışırsa , çıktı olur 173.194.112.151.

Firefox ile daha özel bir örnek:

show `pidof firefox`

ve firefox ile önce google.com'a , ardından unix.stackexchange.com'a ve son olarak 192.30.252.129'a gidiyorum . Tarayıcıyı kapattığımda çıktı şöyle olmalı:

google.com
stackexchange.com
192.30.252.129

(Açıkçası tarayıcıda bu çıktı gerçekçi değil, çünkü başka pek çok ilgili bağlantı var, ama bu sadece bir örnek.)


Hangi Unix çeşidi altında? Birçoğunun bunu yapmak için araçları var, ama farklı olanlar.
Gilles 'SO- kötülük olmayı'

Yani aslında tüm bağlantıların bir kaydını mı istiyorsun?
Sergiy Kolodyazhnyy

Bence tcpdump veya Wireshark o zaman işi yapmalı.
Sergiy Kolodyazhnyy

Bunu yapmanın bazı olası yolları: askubuntu.com/questions/11709/…
Mark Plotnick 3:15

@Gilles Ubuntu 14.04.3 LTS
32'de

Yanıtlar:


23

Arıyorsun strace! Bu cevabı askubuntu'da buldum ama bu Unix için geçerli:

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

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

Bilinen bir PID ile mevcut bir işlemi izlemek için:

strace -p $PID -f -e trace=network -s 10000

Aksi halde, ancak Linux'a özgü , işlemi yalıtılmış bir ağ ad alanında çalıştırabilir ve trafiği izlemek için wireshark kullanabilirsiniz . Bu muhtemelen stracekütüğü okumaktan daha uygun olacaktır :

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

    ip netns add test
    
  • bir çift sanal ağ arayüzü 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
    
  • sınama ad alanındaki yönlendirmeyi yapılandırın:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • ip_forward'ı etkinleştirin ve oluşturduğunuz ad alanından gelen trafiği iletmek için bir NAT kuralı oluşturun (ağ arayüzünü 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 YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (İsterseniz MASQUERADE kuralını da kullanabilirsiniz)

  • Son olarak, analiz etmek istediğiniz işlemi yeni ad alanında çalıştırabilir ve wireshark'ı da kullanabilirsiniz:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

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


2
straceAslında Linux çekirdeğine özgü olduğundan, Unix benzeri tüm işletim sistemleri için geçerli değildir. Anladığım kadarıyla, BSD benzeri sistemler benzer olanaklara sahip (DTrace ve truss). Her neyse, iyi cevap (çok oy verildi). Stack Exchange'e hoş geldiniz.
Anthony G - Monica

Cevap ancak sorunlar yorumlayarak yaşıyorum, doğru yöne noktaya görünüyor çıktı incelenirken . OP tarafından da istendiği gibi çıktıda bir tür URL görmeyi bekliyordum. Birisi yardım edebilir mi? stracegit fetch
andreee

14

Deneyin

lsof -i -a -p `pidof firefox`

Kısmen çalışır: işlemin mevcut bağlantılarının bir kısmını yazdırır, ancak daha sonra otomatik olarak kapanır. Bazı programlar için çıktı yalnızca bu uyarıdır:lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/user/.gvfs Output information may be incomplete.
14

-r1Çıkışı her saniye tekrarlamak ve -wuyarıları bastırmak için seçenekler ekleyebilirsiniz .
alxrem

2
Bu sadece belirli bir noktadaki bağlantıları gösterir, bir sürecin ömrü boyunca yaptığı tüm bağlantıları listelemez. Bu komutu bir döngüye koysanız bile kısa ömürlü bağlantıları kaçıracak.
Gilles 'SO- kötülük olmayı'

Anketör, kullanım ömrü boyunca bağlantıları görmeyi istemedi. Bir (in real-time)olarak yorumlanabilir from the point in time of tracking and forward.
llua

8

İşte başka bir yaklaşım:

ss -nap | grep $(pidof firefox)

Örnek çıktı:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))

1
Bu sadece belirli bir noktadaki bağlantıları gösterir, bir sürecin ömrü boyunca yaptığı tüm bağlantıları listelemez. Bu komutu bir döngüye koysanız bile kısa ömürlü bağlantıları kaçıracak.
Gilles 'SO- kötülük olmayı'

5

Ayrıca deneyebilirsiniz netstat -p. Man sayfasından:

netstat - Ağ bağlantılarını, yönlendirme tablolarını, arayüz istatistiklerini, maskeli bağlantı bağlantılarını ve çok noktaya yayın üyeliklerini yazdırın

Sadece ağ bağlantılarını göstermek için kullanın netstat -tup. PID işlemini görmek için root olmanız gerekebileceğine dikkat edin.

Eğer netstatsisteminizde yoksa ss, neredeyse kesin sözdizimine sahip olabilirsiniz. Daha sonra kullanabilirsiniz ss -tup(root olarak).


1
Bu sadece belirli bir noktadaki bağlantıları gösterir, bir sürecin ömrü boyunca yaptığı tüm bağlantıları listelemez. Bu komutu bir döngüye koysanız bile kısa ömürlü bağlantıları kaçıracak.
Gilles 'SO- kötülük' stop '

1
netstat -p | grep firefox | grep tcp
Philip Kirkbride

@Gilles Bu, bağlantıları bir anda görmek isteyenler için harika bir cevap demektir. Son zamanlarda davamda olduğu gibi.
Jose Antonio, Monica
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.