Considere o uso do SystemTap . É um mecanismo de instrumentação dinâmico que corrige dinamicamente o kernel para que você possa rastrear qualquer evento no kernel, como abrir um soquete. Ele é ativamente desenvolvido pelo RedHat, por isso é suportado no CentOS.
Instalando
Para instalar o SystemTap no CentOS 6:
-
Ativar repositório debuginfo:
sed -i 's/^enabled=0/enabled=1/' /etc/yum.repos.d/CentOS-Debuginfo.repo
-
Instale o SystemTap:
yum install systemtap
-
Instale os pacotes debuginfo para o kernel. Pode ser feito manualmente, mas existe uma ferramenta que pode fazer isso automaticamente:
stap-prep
Rastreio
O SystemTap não possui uma sonda tapset para conexão TCP, mas você pode se ligar diretamente às funções do kernel! Você também pode fazer isso no nível do soquete.
Ou seja. criar script chamado conn.stp
:
probe kernel.function("tcp_v4_connect") {
printf("connect [%s:%d] -> %s:%d\n", execname(), pid(),
ip_ntop(@cast($uaddr, "struct sockaddr_in")->sin_addr->s_addr),
ntohs(@cast($uaddr, "struct sockaddr_in")->sin_port));
}
Isso fornecerá a seguinte saída:
# stap conn.stp
connect [nc:2552] -> 192.168.24.18:50000
connect [nc:2554] -> 192.168.24.18:50000
connect [nc:2556] -> 192.168.24.18:50000
No entanto, os eventos de desconexão de rastreamento parecem ser mais complicados.