Determinando qual processo está ligado a uma porta

83

Eu sei que usando o comando:

lsof -i TCP 

(ou alguma variante de parâmetros com lsof) Eu posso determinar qual processo está vinculado a uma porta específica. Isso é útil dizer se estou tentando iniciar algo que deseja vincular a 8080 e outra pessoa já está usando essa porta, mas não sei o quê.

Existe uma maneira fácil de fazer isso sem usar o lsof? Eu gasto tempo trabalhando em muitos sistemas e o lsof geralmente não é instalado.

    
por Gilles 14.03.2011 / 21:45

5 respostas

100

netstat -lnp listará o pid e o nome do processo ao lado de cada porta de escuta. Isso funcionará no Linux, mas não em todos os outros (como o AIX). Adicione -t se desejar somente TCP.

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

etc.

    
por 14.03.2011 / 21:48
12

No AIX, netstat & O rmsock pode ser usado para determinar a ligação do processo:

[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).
    
por 15.03.2011 / 14:33
7

Outra ferramenta disponível no Linux é ss . Da página man do ss no Fedora:

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

Exemplo de saída abaixo - a coluna final mostra a ligação do processo:

[root@box] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))
    
por 15.03.2011 / 14:27
3

Para o Solaris, você pode usar pfiles e, em seguida, grep por sockname: ou port: .

Um exemplo (de aqui ):

pfiles 'ptree | awk '{print $1}'' | egrep '^[0-9]|port:'
    
por 15.03.2011 / 00:47
2

Eu já fui confrontado com a tentativa de determinar qual processo estava por trás de uma porta específica (dessa vez era 8000). Eu tentei uma variedade de lsof e netstat, mas depois arrisquei e tentei acertar a porta através de um navegador (ou seja, link ). E eis que, uma tela inicial me cumprimentou, e ficou óbvio que o processo era (para o registro, era Splunk ).

Mais uma ideia: "ps -e -o pid, args" (YMMV) pode, às vezes, mostrar o número da porta na lista de argumentos. Grep é seu amigo!

    
por 08.05.2011 / 16:40