
Con tcpdump veo muchos paquetes SYN... y la IP de origen es Localhost.
Deseo saber qué procesos están intentando conectarse.
Tenga en cuenta que las conexiones no alcanzan el estado ESTABLECIDO, parecen ser escaneos de puertos aleatorios.
Respuesta1
He estado en la misma situación recientemente en Linux (el culpable fue adb
). Mi enfoque fue utilizar el sistema de auditoría para registrar las connect()
llamadas al sistema.
sudo auditctl -a exit,always -F arch=b64 -S connect -k who-connects
Para indicarle al sistema de auditoría que registre todas connect()
las llamadas al sistema (aquí, la variante de 64 bits, puede agregar otra para las variantes de 32 bits si está en un sistema de múltiples arcos con aplicaciones de 32 y 64 bits)
Ejecución posterior:
sudo ausearch -i -k who-connects
Para ver qué hizo las conexiones.
Aún sería posible realizar conexiones TCP sin utilizar la API de socket. Por ejemplo, implementando una pila TCP en el espacio del usuario y usando API de nivel inferior para enviar paquetes, pero eso no sería común (especialmente en la interfaz loopback).
Respuesta2
Suponiendo que tienes 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);
}
guardado como whomakeconnect.stp
mostrará connect
las llamadas cuando se ejecute con stap
comoroot
# stap-prep
... fix anything reported, it requires debug kernels ...
# stap whomakeconnect.stp
Respuesta3
Puede utilizar el comando netstat. Muestra el estado del paquete. Pero tienes que captar el resultado, porque solo aparece en el momento del envío. No es como un socket de escucha tcp. Es por eso que puedes intentar capturarlo usando el comando watch. Supongo que la conexión es a través de ipv4.
watch -n 0.1 'netstat -4pn | grep -F "SYN_SENT"'
banderas nestat
bandera p: ID/nombre del proceso
n flag: salida numérica (sin resolución dns)
4 bandera: mostrar sockets ipv4
El comando watch hace que el comando netstat se ejecute de forma repetitiva con un período de 0,1 segundos.