A resposta curta é: Você precisa ser root
para ver todas as ligações.
Um pouco mais:
A manpage do netstat dá uma dica que não é necessária em todos os casos:
PID/Program name Slash-separated pair of the process id (PID) and process name of the process that owns the socket.
--program
causes this column to be included. You will also need superuser privileges to see this information on sockets you don't own.
Então, como usuário normal, você só vê qual processo escuta uma porta, se você a possui:
$ netcat -l -p 1234 &
$ netstat -tulpn
[...]
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 8044/netcat
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
[...]
Você vê "seu" processo netcat, mas não quem está ouvindo, e. porta 22.
Tenho a sensação de que a razão para isso é que você não pode acessar /proc/[PID]/fd
para processos que não são de propriedade. Lá você encontra o processo de descritores de arquivos [PID]
está aberto no momento e em Un * x (quase) tudo é um arquivo ... assim como soquetes.
No meu exemplo sshd
, pid 3934, ouve a porta 22 (surpresa-surpresa):
$ whoami
user
$ ls -l /proc/3934/fd
/bin/ls: cannot open directory /proc/3934/fd: Permission denied
$ sudo ls -l /proc/3934/fd
total 0
lrwx------ 1 root root 64 Apr 24 16:33 0 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 1 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 2 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 3 -> socket:[10481]
lrwx------ 1 root root 64 Apr 24 16:33 4 -> socket:[10483]
(O segundo socket é unido ao endereço do IPv6 que eu omiti em minha saída do netstat.)