netstat és lsof

Sziasztok!

Tudja valaki, hogy a netstat miért nem mutatja a futó apache webszervert, miközben az lsof mutatja? Van valamilyen plusz opció, amivel a netstat is rávehető?

Ezt próbáltam netstattal:


# netstat --inet --listening
# netstat --inet --all

Így pedig lsof-fal:


# lsof -i

?

Hozzászólások

netstat -antp mit mutat? És mit mutat az lsof?

Az apache-ra vonatkozó részek (a többit töröltem):


# netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State  PID/Program name
tcp6  0      0      :::80         :::*            LISTEN 3735/apache2

# lsof -i
COMMAND   PID  USER        FD  TYPE   DEVICE SIZE NODE NAME
apache2   3735     root    4u  IPv6   8715        TCP  *:www (LISTEN)
apache2   3830 www-data    4u  IPv6   8715        TCP  *:www (LISTEN)
apache2   3831 www-data    4u  IPv6   8715        TCP  *:www (LISTEN)
apache2   3832 www-data    4u  IPv6   8715        TCP  *:www (LISTEN)
apache2   3833 www-data    4u  IPv6   8715        TCP  *:www (LISTEN)
apache2   3834 www-data    4u  IPv6   8715        TCP  *:www (LISTEN)

Vagyis csak IPv6-ként jelenítik meg.

Ezek szerint netstat-nak a -4 / --inet / --ip / --protocol=inet opciói csak az IPv4-et listázzák, és az apache nincs köztük.

Ha a -t / --tcp opciót használom, akkor a tcp és a tcp6 kapcsolatok is megjelennek, az apache csak tcp6-ként van a listában.

Ha a -6 / --inet6 / --protocol=inet6 opciókat nézem, mind megjeleníti az apache-ot IPv6-on.

(Természetesen a -l / --listen, vagy a -a / --all opció is kell hozzá).

Ezzel osszefutottam en is nemreg, es a kovetkezokre jutottam:


# netstat -n --inet6 --listening
tcp6       0      0 :::80                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

Kozben se az apache, se az sshd listening portjai nem latszanak, ha csak az ipv4-es listening portokat listazod. Pedig mindketto listenel valojaban ipv4-en es ipv6-on is. (Amit az lsof kimenetben latsz az is valoszinuleg tcp6.) Szoval a

'tcp6 ... :::port ...'

sorokat ertsd inkabb igy:

'tcp46 ... :::port ...'

Nem teljesen latom at ennek a kavarodasnak az okat. (Valami kompatibilitasi mizeria lehet, hogy tudj konnyeden listenelni az osszes lokalis cimen, akar ipv4-es vagy ipv6-os cimek azok. lasd: IPv4-mapped address, dual stack sockets, ...) Az biztos, hogy ez nem a netstat vagy lsof hibaja, mert mindketto a

/proc/net/{tcp{,6},udp{,6}}

file-okat hasznalja, es mar azok kozul is csak a tcp6-ban szerepel a 80-as es 22-es port.

En is orulnek annak, ha valaki elmagyarazna, hogy igy mikepp lehet megkulonboztetni az ipv4/6-os listenelo portokat es azokat, amik csak ipv6-on listenelnek.