Řešení 1:
Spustili jste netstat a lsof jako root nebo pomocí sudo? Všimněte si posledního sloupce:
netstat -ln --program
tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
sudo netstat -ln --program
tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN 2566/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2566/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3125/sshd
Z manuálové stránky netstat:
K zobrazení těchto informací na soketech, které nevlastníte, budete také potřebovat oprávnění superuživatele.
Jak víte, že neběží ani jeden? Pokud je port používán, dává smysl, že by se okamžitě ukončil s chybou 'socket in use'. co se stane, když k portu připojíte telnet?
telnet localhost 5666
Řešení 2:
Porty otevřené jádrem se nezobrazí s názvem programu. Napadají mě některé věci NFS a OCFS. Možná je to něco takového?
Nebo to může být chyba jádra. Zkontrolujte protokoly jádra pro OOPS a BUG.
Řešení 3:
spusťte 'netstat --tcp --udp --listening --program' jako uživatel root . jinak vám to neposkytne PID/Název programu
pak použijte příkaz kill -9 PID
Řešení 4:
Vlastně jsem napsal malý skript shellu, abych pomohl identifikovat tyto příležitostné otázky:
#! /bin/bash
([ "$1" = "" ] || [ "$2" = "" ]) && echo "Usage: tracer <space> <port>" && exit 0
for i in `fuser -n $1 $2`
do
ps aux | grep $i | grep -v 'grep'
done
uložit jako /usr/local/bin/tracer; výstup:
[email protected]:/usr/flows# tracer tcp 80
80/tcp:
root 27904 0.0 0.0 111668 3292 ? Ss Aug04 0:03 /usr/sbin/apache2 -k start
www-data 32324 0.0 0.0 335332 3560 ? Sl Aug05 0:00 /usr/sbin/apache2 -k start
www-data 32327 0.0 0.0 335324 3560 ? Sl Aug05 0:00 /usr/sbin/apache2 -k start
K jeho používání budete potřebovat práva root
Řešení 5:
Byl jsem schopen vysledovat proces získáním jeho inodu přes netstat a poté pomocí tohoto inodu s lsof. Viz moje podrobnější odpověď na https://serverfault.com/a/847910/94376.