Belirli bir bağlantı noktasında hangi programı dinlediğini nasıl bilebilirim?


377

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

Aşağıdaki komutu çalıştırdığımda bu 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 ( 8000varsayılan ayardır), web sunucusu iyi çalışır.

Koşarsam wget localhost:8000komut satırından, döndürür 404 Not Found.

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

Yanıtlar:


314

Terminalinizi açın ve yazın

lsof -i :8000

Bu komut size bu port tarafından PID ile kullanılan uygulamayı listeler. (Eğer herhangi bir sonuç sudoelde edilmemişse, belirli işlemlere izin vermeyebilirsiniz.)

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

$ 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.


2
Bu aynı zamanda OSX üzerinde ne işe yaradığı konusunda çalışıyor .....
reevesy

2
Ekleme -s TCP:LISTENsonucu gerçek dinleme soketi ve süreci ile sınırlar.
jhermann

1
Bağlantı noktası 8000'i ararsanız döndürür PID 1889mü? wat
CodyBugstein

Evet, 8881 numaralı bağlantı noktasını kullanarak PID 1889 hizmet var.
rʒɑdʒɑ

1
@ Örneğin 8881 numaralı bağlantı noktasını arar. PID sütunu işlem kimliklerini ve NAME sütunu bağlantı noktalarını içerir.
Freek de Bruijn

377

Hangi sürecin hangi portta dinlediğini görmek için netstat'ı kullanabilirsiniz.

Tam bir ayrıntı için bu komutu kullanabilirsiniz:

sudo netstat -peanut

Hangisinin 8000 numaralı bağlantı noktasını dinlediğini bilmeniz gerekiyorsa bunu kullanabilirsiniz:

sudo netstat -peanut | grep ":8000 "

Netstat'tan gizleyebilecek bir süreç yok.


117
netstat -peanuthatırlamak daha kolaydır netstat -taupen!
Douglas B. Staple,

9
İyi bir ! - Yorumunuzu yansıtmak için yanıtı değiştirdim. Teşekkür ederim.
Antoine Rodriguez 16:

2
'kaynaştırıcı -k 8000 / tcp' bu limanı boşaltmak için
Jay Modi

3
"PID / Program name" sütununda bir işlem adı yerine kısa çizgiler görüyorsanız, "sudo" eklemeyi unutmuşsunuz
v.shashenko

3
bu yüzden fıstık ha
prusswan

172

@ 33833 tarafından verilen cevabı açıklamak için, örneğin bazı ç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

Orada kalamarın süreç olduğunu görebiliyorum, ama gerçekte benim squid-deb-proxylimanı çeken benim .

Java uygulamasının bir başka güzel ö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(LiSt Open Files) içinde Java'dan daha faydalı olduğunu görebilirsiniz. psKomutu PID ile çalıştırarak CrashPlan olduğunu hemen görebiliriz.


9
Bir komutta:lsof -t -i :8000 | xargs ps -fp
Brett Y

8
Ben önek vardı sudo ama ondan sonra benim için çalıştı. Teşekkürler.
Dwayne,

4
not: sudoSiz bir hata almazsanız, basit bir yanıt olarak hiçbir şey elde edemezsiniz.
Frank Nocke

13

Deneyin ssgelen iproute2paketin:

ss -nlp | grep 8000

5
ssayrıca kendi filtreleme özellikleri vardır: ss -nlp '( sport = :8000 )'.
GnP

6

Kullanarak bir başka yolu socklistdan procinfopaketin:

man socklist

AÇIKLAMA
socklistSize tüm açık soketlerin, numaralandırma tiplerinin, portun, inode, uid, pid, fd ve ait olduğu programın bir listesini veren bir Perl betiğidir.

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

2

Nmap kullanabilirsiniz.

PC'nizde hangi bağlantı noktalarının açık olduğunu bilmek gerçekten önemlidir, bu yalnızca Linux için yararlı değildir, 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 aracı vardır; komut satırı aracı, ancak bu şekilde tercih ederseniz, bunun için bir Grafiksel frontEnd de var. 1

yüklemek için Terminal'i açmak için klavyenizdeki Ctrl+ Alt+ tuşlarına basın T. 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, buraya gidin

1 Kaynak: garron.me


nmap size sadece bir portun açık olduğunu, hangi işlemin açtığını söyleyemez.
Andrew Burns,

1
[nmap] tries to guess which service is listening on each port, but it can make mistakesHangi işlemin soketin sahibi olduğunu bulmak için gerçek bir yöntem önermeden hemen önce okumak için kaynağınıza tıkladım .
GnP

@gnp Ayrıca bakmak isteyebilirsiniz Bu .
Mitch

@Mitch yaptım. OP'nin yerel sistemdeki bir sürecin kesin PID'sini bilmesi gerekir. Nmap burada doğru araç değil, hizmet ve sürüm tespiti ile bile değil. Ya nmaps veritabanındaki bir öğeyle eşleşecek, hala karanlıkta OP'ın hangi sürecin öldürüleceği ya da yeniden yapılandırılacağına ilişkin olduğu anlaşılıyor ya da olmayacak ve OP hoş bir parmak izine sahip olacak ve insecure.org
GnP
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.