Hangi portların belirli PID tarafından dinlendiğini nasıl bilebilirim?


13

OS X'imdeki bazı bağlantı noktalarını dinleyen belirli bir işlemin PID'si var ve bu işlem tarafından hangi bağlantı noktalarının dinlendiğini bilmem gerekiyor. Nasıl yapabilirim?

lsofHangi işlemin bazı bağlantı noktalarını dinlediğini bilmek için kullanabileceğimi biliyorum, ancak ters bir işlem yapmam gerekiyor.

Teşekkür ederim.

UPD

OS X BSD araçlarını kullanıyor, bu yüzden netstatLinux değil BSD var netstat. Linux'un PID'leri gösterme seçeneği netstatvardır -p, BSD bağlantı noktasını belirtmek için netstatkullanır -pve PID'yi gösterme seçeneği yoktur.


Bir sürecin dinlediği bağlantı noktalarını bulmaya çalıştığınızı mı söylüyorsunuz? netstatbunu sizin için yapabilir. Sen edebilirsiniz grepPID üzerinde size çıktısını filtre uygulamak istiyorsanıznetstat
Centimane

ayrıca lsofkullanım sadece bir yol değildir. gibi bir şey yapabilirsiniz lsof|grep ${PID}. bu da her şeyi kabaca dökecek ve grepiçinde PID olan hatları seçecek. Bir şans dışında, PID numarası yanlışlıkla başka bir değerle eşleştiği için alakasız bir satır listeleyebilir, ancak şansı hiç yoktur
MelBurslan

@Dave, evet, beni doğru takip et. Gördüğüm gibi, BSD sürümü netstatPID'leri görüntüleyemiyor.
shau-kote

@MelBurslan düzgün bir çözüm gibi görünmüyor. Dahası hızlı değil - MBP'mde biraz zaman alıyor.
shau-kote

Yanıtlar:


13

Derin okuma ile kendi başıma bir çözüm buldum man lsof. (Evet, RT * M hala yardımcı oluyor.) @Gilles'a nişan aldığınız için teşekkürler.

İşte çözüm: lsof -aPi -p 555 (555 PID'dir).

Açıklama:

  1. -p PID numarasını belirtmek için;
  2. -i yalnızca ağ aygıtlarını görüntülemek;
  3. -a yukarıdaki VE iki koşul (aksi takdirde bunlar ORed olacaktır);
  4. -P bağlantı noktası numaralarını görüntülemek için (bunun yerine varsayılan olarak bağlantı noktası adları).

Ayrıca, birini kullanabilirsiniz lsof -aPi4 -p 555veya lsof -aPi6 -p 55IPv4 veya IP6'nın için sadece buna göre ele almaktadır.

Çıktı başka bir program tarafından ayrıştırılacaksa, -Fnseçenek yararlı olabilir. Bu seçenek lsofile güzel biçimlendirilmiş çıktı yerine "diğer program için çıktı" üretecektir. lsof -aPi4 -Fn -p 555şöyle bir şey çıktılar:

p554
nlocalhost:4321

PS Hepsi OS X El Capitan'ımda test ettim, ancak görebildiğim gibi Linux'ta da çalışmalı.


6

lsofağ bağlantı noktaları da dahil olmak üzere işlemler tarafından açılan dosyalar hakkında bilgi sağlar. OSX de dahil olmak üzere hemen hemen tüm unix sistemlerinde kullanılabilir .

Unix için Rosetta Taşı OSX üzerinde “dosya veya bağlantı noktasına maçı süreci” için başka bir araç listelemiyor.

TCP bağlantı noktasında dinleme işlemlerini listelemek için aşağıdakileri kullanabilirsiniz:

lsof -iTCP -sTCP:LISTEN

lsof -iUDPUDP soketi açık olan işlemleri listeler. lsof -itüm açık ağ soketlerini (TCP istemcileri, TCP sunucuları ve diğer IP protokolleri) listeler.


0

hangi portun dinlendiğini bilmek istiyorsanız netstat'ın -p seçeneğini kullanabilirsiniz. süper kullanıcı olmanız gerekir:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

hakkında daha fazla bilgi edinmek istiyorsanız bu bağlantıyı deneyin


GNU ile ilgili netstat, OS X'im var ve bu nedenle BSD kullanıyorum netstat. -pTCP / IP bağlantı noktasını belirtmek için kullanılır ve PID görüntüleme seçeneği yoktur.
shau-kote

0

FreeBSD'de sockstatbu bilgi için kullanabilirsiniz . sockstatMac bilgisayarım olmadığı için OS X'in olup olmadığından emin değilim .

Örneğin, tüm TCPv4 bağlantılarını görmek için:

sockstat -4


Alack, Mac'imde sockstatkomut yok . :(
shau-kote

0

Linux ve Cygwin'deki ilgili pideleriyle bağlantı noktalarını göstermek için netstat'ı grep, awk ve sed ile birleştirebilirsiniz:

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

Daha fazla detay

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.