
Com o tcpdump vejo muitos pacotes SYN ... e o IP de origem é Localhost.
Desejo descobrir quais processos estão tentando se conectar.
Observe que as conexões não atingem o estado ESTABLISHED, elas parecem ser varreduras de portas aleatórias.
Responder1
Estive na mesma situação recentemente no Linux (o culpado foi adb
). Minha abordagem foi usar o sistema de auditoria para registrar as connect()
chamadas do sistema.
sudo auditctl -a exit,always -F arch=b64 -S connect -k who-connects
Para informar ao sistema de auditoria para registrar todas connect()
as chamadas do sistema (aqui a variante de 64 bits, você pode adicionar outra para as variantes de 32 bits se estiver em um sistema multi-arch com aplicativos de 32 e 64 bits)
Execução posterior:
sudo ausearch -i -k who-connects
Para ver o que fez conexões.
Ainda seria possível fazer conexões TCP sem usar a API do soquete. Por exemplo, implementando uma pilha TCP no espaço do usuário e usando APIs de nível inferior para enviar pacotes, mas isso não seria comum (especialmente na interface de loopback).
Responder2
Supondo que você tenha o SystemTap instalado
probe begin {
printf("ok\n");
}
probe syscall.connect {
# connect however may fail or flail around in a EINPROGRESS state;
# this log only indicates that a connect was attempted
if (uaddr_af == "AF_INET" || uaddr_af == "AF_INET6")
printf("%s[%d]: %s\n", execname(), pid(), argstr);
}
probe syscall.connect.return {
printf(" -> %s[%d]: %s\n", execname(), pid(), retstr);
}
salvo como whomakeconnect.stp
mostrará connect
as chamadas quando executado com stap
comoroot
# stap-prep
... fix anything reported, it requires debug kernels ...
# stap whomakeconnect.stp
Responder3
Você pode usar o comando netstat. Mostra o estado do pacote. Mas tem que pegar a saída, pois ela só aparece na hora do envio. Não é como um soquete de escuta TCP. É por isso que você pode tentar capturá-lo usando o comando watch. Suponho que a conexão seja via ipv4.
watch -n 0.1 'netstat -4pn | grep -F "SYN_SENT"'
bandeiras nestat
sinalizador p: id/nome do processo
n sinalizador: saída numérica (sem resolução de DNS)
4 sinalizador: mostrar soquetes ipv4
O comando watch faz com que o comando netstat seja executado repetitivamente com um período de 0,1 segundo.