Bir limana hangi işlemin bağlı olduğunu belirleme


90

Bu komutu kullanarak biliyorum:

lsof -i TCP 

(veya lsof parametresinin bazı değişkenleri) Hangi işlemin belirli bir porta bağlı olduğunu belirleyebilirim. Bu yararlıdır, 8080'e bağlanmak isteyen bir şeyi başlatmaya çalışıyorsam ve bazıları zaten bu bağlantı noktasını kullanıyorsa, ancak ne olduğunu bilmiyorum.

Bunu lsof kullanmadan yapmanın kolay bir yolu var mı? Pek çok sistemde çalışarak zaman harcıyorum ve çoğu zaman yüklü değil.

Yanıtlar:


112

netstat -lnpHer dinleme portunun yanında bulunan pid ve proses isimlerini listeler. Bu Linux altında çalışacak, ancak diğerleri değil (AIX gibi.) -tYalnızca TCP istiyorsanız ekleyin .

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

vb.


Harika, teşekkürler. RHEL altında çalışır, ancak Solaris altında değildir (belirttiğiniz gibi). Solaris için benzer bir şey olup olmadığını bilen var mı?

netstat -pYukarıdaki benim oyum. ayrıca bak lsof.
Rich Homolka

Bir kenara, pencereler için benzer: netstat -aon | daha fazlası
Jonathan

Peki ya SCTP?
sudo

12

AIX'de, işlem bağlanmasını belirlemek için netstat ve rmsock kullanılabilir:

[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).

1
Bunun için teşekkürler! Bununla birlikte, yuvada hangi sürecin dinlendiğini göstermenin bir yolu var mı (bunu kaldırmak isteyen rmsock kullanmak yerine)?
Olivier Dulac

2
@OlivierDulac: "Adından farklı olarak, rmsock bir işlem tarafından kullanılıyorsa soketi çıkarmaz. Yalnızca soketi tutan işlemi bildirir." ( ibm.com/developerworks/community/blogs/cgaix/entry/… )
Vitor Py

@ vitor-braga: Ah thx! Denemeye çalıştığını düşündüm ama sadece onu kaldıramadığında hangi sürecin devam ettiğini söyledim. Görünüşe göre bir işlem tuttuğunda onu çıkarmaya bile çalışmıyor. Çok havalı! Teşekkür!
Olivier Dulac

8

Linux'taki bir başka araç da ss . Gönderen ss Fedora adam sayfası:

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

Aşağıdaki örnek çıktı - son sütun işlem bağlamasını gösterir:

[root@box] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))


2

Bir zamanlar belirli bir limanın ardında hangi sürecin olduğunu belirlemeye çalıştım (bu sefer 8000 idi). Çeşitli lsof ve netstat'ları denedim, ancak daha sonra bir tarayıcı aracılığıyla bağlantı noktasını vurma şansını denedim (ör. Http: // hostname: 8000 / ). Lo ve bakalım, bir açılış ekranı beni karşıladı ve sürecin ne olduğu belli oldu (kayıt için Splunk idi ).

Bir düşünce daha: "ps -e -o pid, args" (YMMV) bazen argümanlar listesinde port numarasını gösterebilir. Grep senin arkadaşın!


Aynı damarda, telnet hostname 8000sunucunun bir afiş yazdırıp yazdırmadığını görebilirsiniz. Bununla birlikte, sunucu kabuk erişiminizin olmadığı bir makinede çalışıyorsa ve ardından işlem kimliğini bulmakla alakalı değilse, bu kullanışlıdır.
Gilles
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.