Hogyan tudhatom, hogy milyen program hallgat egy adott porton?

294

Gyanítom, hogy egy program hallgatja a8000 portot a gépemen.

Ha a következő parancsot futtatom, akkor ez a hiba:

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

Ha egy másik portot használok (8000 az alapértelmezett), a webszerver jól működik.

Ha awget localhost:8000 parancsot futtatom a parancssorból, a404 Not Found értéket kapja.

Mit tehetek (vagy milyen eszközök állnak rendelkezésre), hogy megtudja, milyen program hallgatja a portot8000, és onnan, ahol a program van beállítva?

    
készlet yansal 06.04.2013 10:36
forrás

6 válasz

194

Nyissa meg a terminált, és írja be

lsof -i :8000

Ez a parancs felsorolja az adott port által használt PID-alkalmazást. (Ha nem érkezik eredmény asudo -on keresztül, mert nem biztos, hogy bizonyos folyamatokhoz engedélye van.)

Például a 8000 porttal (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)

És a 22. port (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)

Remélem, hogy segít.

    
válasz adott rɑːdʒɑ 06.04.2013 10:50
forrás
329

A netstat segítségével megnézheti, hogy melyik folyamat hallgatja a portot.

Ezt a parancsot teljes részletességgel használhatja:

sudo netstat -peanut

Ha tudnia kell, hogy melyik portot hallgatja a 8000-es porton, ezt használhatja:

sudo netstat -peanut | grep ":8000 "

Nincs olyan folyamat, amely elrejti a netstat-ból.

    
válasz adott Antoine Rodriguez 06.04.2013 10:58
forrás
164

A @ 33833-as válasz megadásához nagyon részletes információkat kaphat, például:

$ 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

Láthatom ott, hogy a tintahal a folyamat, de valójában az énsquid-deb-proxy -a veszi fel a portot.

A java alkalmazás másik jó példája:

$ 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

A (z)lsof (LiSt Open Files) oldalon látható, hogy java, ami kevésbé hasznos. Aps parancsot a PID-sel futtatva azonnal láthatjuk, hogy CrashPlan.

    
válasz adott Andrew Burns 17.06.2014 17:55
forrás
10

Próbálja ki ss iproute2 csomag:

ss -nlp | grep 8000
    
válasz adott korjjj 06.04.2013 10:44
forrás
5

Egy másik módszer asocklist -ban aprocinfo csomag használatával:

man socklist

  

LEÍRÁS - Asocklist egy Perl parancsfájl, amely megadja az összes nyitott aljzat listáját, felsorolja a típusokat, portokat,          inode, uid, pid, fd és a program, amelyhez tartozik.

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
    
válasz adott user.dz 29.06.2015 12:23
forrás
2

Használhatja az nmapet.

  

Nagyon fontos tudni, hogy mely portok vannak nyitva a számítógépeden   nem csak a Linux, hanem más operációs rendszerek számára is hasznos,   A Linuxnak sok eszköze van annak ellenőrzésére, hogy mely portok vannak nyitva, a legtöbbet   közös az nmap, amely egy parancssori eszköz, de létezik egy   Grafikus frontEnd, ha úgy tetszik. 1

a telepítéshez nyomja meg a Ctrl + Alt + T billentyűt a terminál megnyitásához. Amikor megnyílik, futtassa az alábbi parancsot:

sudo apt-get install nmap

Az nmap-ről és egyéb segédprogramokról további információkért látogasson el a itt

1 Forrás: garron.me

    
válasz adott Mitch 06.04.2013 10:46
forrás