Il problema
Si vuole ascoltare il traffico di rete utilizzando il programma tcpdump, ma si riceve il seguente messaggio di errore:
root@linux# tcpdump -n tcp port 22
tcpdump: socket: Address family not supported by protocol
La causa
Il modulo del kernel af_packet
non è caricato. Questo modulo implementa i raw socket, con i quali si può accedere direttamente a una scheda di rete, aggirando il TCP/IP - e questo modulo è esattamente ciò di cui tcpdump
ha bisogno.
Normalmente il modulo viene caricato automaticamente, ma questa situazione può verificarsi se il modulo manca o se le dipendenze del modulo non sono note (depmod -a
non è stato eseguito).
Il rimedio
Se necessario, aggiornare le dipendenze del modulo e poi caricarlo manualmente:
root@linux# depmod -a
root@linux# modprobe af_packet
Se necessario, verificare la presenza del modulo:
root@linux# find /lib/modules -name "af_packet*"
/lib/modules/2.6.13-15-default/kernel/net/packet/af_packet.ko
Se modprobe
non funziona, si può provare a caricare il modulo direttamente con insmod
:
root@linux# insmod /lib/modules/2.6.13-15-default/kernel/net/packet/af_packet.ko