Localizar processos usando uma interface de rede

7

Estou tentando encontrar uma maneira de desligar com segurança uma interface de rede, ou seja, sem perturbar nenhum processo. Para isso, preciso descobrir quais processos estão atualmente usando essa interface. Ferramentas como ss , netstat ou lsof são úteis para mostrar quais processos têm sockets abertos, mas não mostram wpa_supplicant , dhcpcd , hostapd e outros.

Existe uma maneira de detectar esses processos de maneira geral? Pode não ser para o dhcpcd, pois é apenas um programa que abre um socket de vez em quando, mas estou supondo que wpa_supplicant e hostapd “façam algo” com essa interface que é detectável e talvez também leve ao PID relevante.

    
por ipsec 15.09.2012 / 11:21

1 resposta

10

Esses programas usarão sockets Netlink para falar diretamente com o driver do hardware da rede. lsof versão 4.85 adicionou suporte a sockets Netlink, mas nos meus testes no CentOS 5.8, a funcionalidade não aparece para trabalhar muito bem. Talvez isso dependa de recursos adicionados em novos kernels.

No entanto, é possível adivinhar bem quando você encontra um soquete Netlink. Se você cat /proc/net/netlink obtiver uma lista de sockets Netlink abertos, incluindo o PID dos processos que os abriram. Então, se você lsof -p $THEPID desses PIDs, encontrará entradas com sock na coluna TYPE e can't identify protocol na coluna NAME . Não é garantido que estes sejam soquetes Netlink, mas é uma boa aposta.

Você também pode inferir que um determinado processo está falando diretamente com uma interface se tiver arquivos em /sys/class/net/$IFNAME open.

Agora, tudo o que foi dito, acho que sua pergunta está errada.

Digamos que há um comando que não descobri. Chame de lsif -i wlan0 e diga que retorna uma lista de PIDs que acessam a interface nomeada. O que você poderia fazer com isso, o que permitiria que você "não perturbasse" processos usando essa interface, como você solicitou? Você estava planejando matar todos os processos usando essa interface primeiro? Isso é muito perturbador. :) Talvez você estivesse pensando que deixar cair a interface de baixo de um processo usando-a seria prejudicial?

O que, no final, é tão ruim sobre ifconfig wlan0 down ?

As interfaces de rede não são dispositivos de armazenamento. Você não precisa liberar dados no disco e desmontá-los normalmente. Não quebrar os sockets abertos pode valer a pena, mas como você já sabe, você pode descobrir isso com netstat e lsof . wpa_supplicant não vai ficar de mau humor se você saltar sua interface sem cerimônia. (Se isso acontecer, é um bug e precisa ser consertado; isso não indicaria alguma falha sua).

Programas de rede bem escritos lidam com essas coisas, é claro. Redes não são confiáveis. Se um programa não puder lidar com uma interface sendo rejeitada, ela também não será capaz de lidar com cabos Ethernet desconectados, modems DSL ou retroescavadeiras .

    
por 15.09.2012 / 14:59