Belirli bir bağlantı noktasında hangi programın dinlendiğini nasıl öğrenebilirim?

290

Bir programın makinemde 8000 bağlantı noktasını dinlediğinden şüpheleniyorum.

Aşağıdaki komutu çalıştırdığımda, şu hatayı alıyorum:

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

Başka bir bağlantı noktası kullanırsam ( 8000 varsayılan değerdir), web sunucusu düzgün çalışır.

wget localhost:8000 komut satırından çalıştırırsam, 404 Not Found değerini döndürür.

Hangi programın bağlantı noktasını 8000 dinlediğini ve buradan o programın yapılandırıldığı yeri bulmak için ne yapabilirim (veya hangi araçlar kullanılabilir)?

    
sordu yansal 06.04.2013 10:36

6 cevap

184

Terminalinizi açın ve

olarak yazın
lsof -i :8000

bu komut, PID ile o port tarafından kullanılan uygulamayı listeleyecektir. (Hiçbir sonuç belirli işlemlere yönelik izniniz olmadığı için sudo yoluyla çalıştırılır.)

Örneğin, 8000 bağlantı noktasıyla ( python3 -m http.server ):

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

Ve 22 numaralı bağlantı noktası (SSH):

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

Umarım yardımcı olur.

    
verilen cevap Ten-Coin 06.04.2013 10:50
328

Hangi işlemin hangi bağlantı noktasını dinlediğini görmek için netstat'ı kullanabilirsiniz.

Bu komutu, eksiksiz bir ayrıntıya sahip olmak için kullanabilirsiniz:

sudo netstat -peanut

hangisinin port 8000'de dinlediğini tam olarak bilmeniz gerekiyorsa bunu kullanabilirsiniz:

sudo netstat -peanut | grep ":8000 "

Netstat'tan saklanabilecek bir işlem yok.

    
verilen cevap Antoine Rodriguez 06.04.2013 10:58
163

@ 33833 tarafından verilen yanıtı açıklamak için, örneğin çok ayrıntılı bilgiler alabilirsiniz:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Burada, kalamarın bu süreç olduğunu görebiliyorum, fakat aslında bu, portu kaplayan squid-deb-proxy 'dir.

Bir java uygulamasının başka güzel bir örneği:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

lsof 'sinde (LiSt Open Files) java olduğunu göreceksiniz, ki bu daha az yardımcıdır. PID ile ps komutunu çalıştırmanın hemen CrashPlan olduğunu görebiliriz.

    
verilen cevap Andrew Burns 17.06.2014 17:55
10

ss 'yi iproute2 paket:

ss -nlp | grep 8000
    
verilen cevap korjjj 06.04.2013 10:44
5

socklist paketini procinfo paketinden kullanmanın başka bir yolu:

man socklist

  

TANIMLAMA% socklist , tüm açık soketlerin listesini, numaralarını, bağlantı noktalarını, listelerini gösteren bir Perl betiğidir.          inode, uid, pid, fd ve ait olduğu program.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon
    
verilen cevap user.dz 29.06.2015 12:23
2

nmap'yi kullanabilirsiniz.

  

PC'nizde hangi portların açık olduğunu bilmek gerçekten önemlidir.   Linux için değil, aynı zamanda diğer işletim sistemleri için de   Linux'un hangi bağlantı noktalarının açık olduğunu kontrol etmek için birçok araç var.   ortak bir komut satırı aracı olan nmap, ancak aynı zamanda bir   Bu şekilde tercih ederseniz, bunun için grafiksel ön yüzde. 1

yüklemek için, klavyenizde Terminali açmak için Ctrl + Alt + T tuşlarına basın. Açıldığında, aşağıdaki komutu çalıştırın:

sudo apt-get install nmap

nmap ve diğer yardımcı programlar hakkında daha fazla bilgi için Buradan

1 Kaynak: garron.me

    
verilen cevap Mitch 06.04.2013 10:46

Etiketlerdeki diğer soruları oku