Como saber qual programa está escutando em uma determinada porta?

377

Suspeito que um programa esteja escutando na porta 8000da minha máquina.

Quando executo o seguinte comando, recebo este erro:

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

Se eu usar outra porta ( 8000é o padrão), o servidor da Web funcionará bem.

Se eu executar a wget localhost:8000partir da linha de comando, ela retornará 404 Not Found.

O que posso fazer (ou quais ferramentas estão disponíveis) para descobrir qual programa está escutando na porta 8000e a partir daí onde esse programa está configurado?

yansal
fonte

Respostas:

314

Abra seu terminal e digite como

lsof -i :8000

esse comando listará o aplicativo usado por essa porta com o PID. (Se nenhum resultado for executado, sudovocê poderá não ter permissão para determinados processos.)

Por exemplo, com a porta 8000 ( 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)

E porta 22 (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)

Espero que ajude.

rɑːdʒɑ
fonte
2
Isso também funciona em OSX para que o seu valor .....
reevesy
2
A adição -s TCP:LISTENrestringe o resultado ao soquete de escuta real e seu processo.
21125 jhermann
1
Se você procurar pela porta 8000, ela retornará PID 1889? wat
CodyBugstein
Sim, há serviço com o PID 1889 usando a porta 8881. Estou perdendo alguma coisa?
rʒɑdʒɑ 5/10/2015
1
@Irray: o exemplo pesquisa a porta 8881. A coluna PID contém os IDs do processo e a coluna NAME, as portas.
Freek de Bruijn
377

Você pode usar o netstat para ver qual processo está escutando em qual porta.

Você pode usar este comando para obter detalhes completos:

sudo netstat -peanut

se você precisar saber exatamente qual está escutando na porta 8000, você pode usar isto:

sudo netstat -peanut | grep ":8000 "

Não há nenhum processo que possa ocultar do netstat.

Antoine Rodriguez
fonte
117
netstat -peanuté mais fácil de lembrar do que netstat -taupen!
Douglas B. Staple
9
Um bom ! - Apenas editei a resposta para refletir seu comentário. Obrigado.
Antoine Rodriguez
2
'fuser -k 8000 / tcp' para liberar essa porta
Jay Modi
3
Se na coluna "nome PID / Programa" você vê traços em vez de um nome de processo, você esqueceu de acrescentar "sudo"
v.shashenko
3
por isso é amendoins eh #
2100 prusswan
172

Para explicar a resposta de @ 33833, você pode obter informações muito detalhadas, por exemplo:

$ 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

Eu posso ver ali que o squid é o processo, mas na verdade é o meu squid-deb-proxyque está ocupando o porto.

Outro bom exemplo de aplicativo java:

$ 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

Você pode ver em lsof(LiSt Open Files) que é java, o que é menos que útil. Executando o pscomando com o PID, podemos ver imediatamente que é o CrashPlan.

Andrew Burns
fonte
9
Em um comando:lsof -t -i :8000 | xargs ps -fp
Brett Y
8
Eu tive que prefixar, sudo mas depois disso funcionou para mim. Obrigado.
Dwayne Crooks
4
nota: sem sudovocê não obter um erro, você simplesmente não receberá nada como resposta.
precisa saber é o seguinte
13

Tente ssdo iproute2pacote:

ss -nlp | grep 8000
korjjj
fonte
5
sstambém tem as suas próprias capacidades de filtragem: ss -nlp '( sport = :8000 )'.
GnP
6

Outra maneira utilizando socklistde procinfopacote:

man socklist

DESCRIPTION
socklisté um script Perl que fornece uma lista de todos os soquetes abertos, enumerando tipos, porta, inode, uid, pid, fd e o programa ao qual ele pertence.

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
user.dz
fonte
2

Você pode usar o nmap.

É realmente importante saber quais portas estão abertas no seu PC, isso não é útil apenas para Linux, mas também para outros sistemas operacionais. O Linux possui muitas ferramentas para verificar quais portas estão abertas, o mais comum é o nmap, que é um ferramenta de linha de comando, mas também existe um frontEnd gráfico, se você preferir. 1 1

para instalá-lo, basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o comando abaixo:

sudo apt-get install nmap

Para mais informações sobre o nmap e outros utilitários, acesse Aqui

1 Fonte: garron.me

Mitch
fonte
O nmap dirá apenas que uma porta está aberta, não qual processo a abriu.
Andrew Burns,
1
Cliquei na sua fonte para ler [nmap] tries to guess which service is listening on each port, but it can make mistakeslogo antes que ela sugerisse um método real para descobrir qual processo possui o soquete.
GnP
@gnp Você também pode querer dar uma olhada Este .
Mitch
@ Mitch eu fiz. O OP precisa conhecer o PID exato de um processo no sistema local. O Nmap não é a ferramenta certa aqui, nem mesmo com detecção de serviço e versão. Ou ele corresponderá a um item no banco de dados nmaps, que ainda permitirá que o OP fique no escuro sobre qual processo matar ou reconfigurar, ou não, e o OP terá uma boa impressão digital e um link para insecure.org
GnP