Encontre processos locais iniciando conexões TCP

0

Com o tcpdump eu vejo muitos pacotes SYN ... e o IP de origem é o 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.

    
por Massimo 21.05.2017 / 15:23

3 respostas

3

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 chamadas quando executado com stap as root

# stap-prep
... fix anything reported, it requires debug kernels ...
# stap whomakeconnect.stp
    
por 22.05.2017 / 15:45
2

Eu estive na mesma situação recentemente no Linux (o culpado foi adb ). Minha abordagem foi usar o sistema de auditoria para registrar as chamadas do sistema connect() .

sudo auditctl -a exit,always  -F arch=b64  -S connect -k who-connects

Para que o sistema de auditoria registre todas as chamadas do sistema connect() (aqui a variante de 64 bits, você pode adicionar outro para as variantes de 32 bits se estiver em um sistema de vários arqui- vos com aplicativos de 32 e 64 bits)

Corrida posterior:

sudo ausearch -i -k who-connects

Para ver o que fez as conexões.

Ainda seria possível fazer conexões TCP sem usar a API de 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).

    
por 21.05.2017 / 19:48
1

Você pode usar o comando netstat cammand. Mostra o estado do pacote. Mas você tem que pegar a saída, porque só parece no momento do envio. Não é como um soquete de escuta tcp. É por isso que você pode ty para pegá-lo usando o comando watch. Eu suponho que a conexão é sobre ipv4.

watch -n 0.1 'netstat -4pn | grep -F "SYN_SENT"'

sinalizadores de aninhamento

p flag: id / nome do processo

sinalizador n: saída numérica (sem resolução de DNS)

4 flag: mostre soquetes ipv4

O comando watch torna o comando netstat executado repetitivo com um período de 0,1 segundo.

    
por 21.05.2017 / 15:50

Tags