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


Eu suspeito que um programa esteja escutando na porta 8000 na 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 é executado corretamente.

Se eu corro wget localhost:8000 a partir da linha de comando, ele retorna 404 Not Found.

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


292
2018-04-06 08:36


origem




Respostas:


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 via sudo já que você pode não ter permissão para certos 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.


189
2018-04-06 08:50



Isso também funciona na OSX para o que vale ..... - reevesy
Adicionando -s TCP:LISTEN restringe o resultado ao soquete de escuta real e seu processo. - jhermann
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 sentindo falta de algo? - Ten-Coin
@Imray o exemplo procura a porta 8881. A coluna PID contém os IDs do processo e a coluna NAME contém as portas. - Freek de Bruijn


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

Você pode usar este comando para ter um detalhe completo:

sudo netstat -peanut

Se você precisa saber exatamente qual deles está escutando na porta 8000 você pode usar isto:

sudo netstat -peanut | grep ":8000 "

Não há processo que possa se esconder do netstat.


329
2018-04-06 08:58



netstat -peanut é mais fácil de lembrar do que netstat -taupen! - Douglas B. Staple
Um bom ! - Acabei de editar a resposta para refletir seu comentário. Obrigado. - Antoine Rodriguez
'fusor -k 8000 / tcp' para liberar essa porta - Jay Modi
se na coluna "PID / nome do programa" você vê traços em vez de um nome de processo, você esqueceu de adicionar "sudo" - v.shashenko
então é amendoim eh - prusswan


Para expor a resposta por @ 33833 você pode obter algumas 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 a lula é o processo, mas na verdade é minha squid-deb-proxy que está ocupando o porto.

Outro bom exemplo de um 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 ps comando com o PID, podemos ver de imediato que é CrashPlan.


164
2018-06-17 15:55



Em um comando: lsof -t -i :8000 | xargs ps -fp - Brett Y
Eu tive que prefixar sudo  mas depois disso funcionou para mim. Obrigado. - Dwayne Crooks
nota: sem sudo você não receberá um erro, você simplesmente não receberá nada como resposta. - Frank Nocke


Experimentar ss a partir de iproute2 pacote:

ss -nlp | grep 8000

10
2018-04-06 08:44



ss também tem seus próprios recursos de filtragem: ss -nlp '( sport = :8000 )'. - GnP


Outra maneira de usar socklist a partir de procinfo pacote:

man socklist

DESCRIÇÃO
socklist é um script Perl que lhe dá uma lista de todos os sockets abertos, enumerando tipos, porta,          inode, uid, pid, fd e o programa ao qual 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

5
2018-06-29 10:23





Você pode usar o nmap.

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

para instalá-lo, basta pressionar Ctrl+Alt+T no seu teclado para abrir o Terminal. Quando se abre, execute o comando abaixo:

sudo apt-get install nmap

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

1Fonte:garron.me


2
2018-04-06 08:46



O nmap só lhe dirá que uma porta está aberta, e não qual processo a abriu. - Andrew Burns
Eu cliquei na sua fonte para ler [nmap] tries to guess which service is listening on each port, but it can make mistakes logo antes sugere 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 saber o PID exato de um processo no sistema local. O Nmap não é a ferramenta certa aqui, nem mesmo com a detecção de serviço e versão. Ou ele corresponderá a um item no banco de dados nmaps, o que ainda deixa o OP 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