Matando conexão tcp no linux

33

Eu tenho alguma conexão inativa em um aplicativo que está em estado suspenso se a máquina do cliente estiver inativa.

->192.168.1.214:49029 (ESTABLISHED)

Existe uma maneira de terminar esta opção a partir da linha de comando do Linux sem reiniciar o servidor?

Após a pesquisa, encontrei a solução chamada tcpkill. Mas isso não vai funcionar para mim. Como bloqueia permanentemente esse ip.

    
por Vivek Goel 10.04.2013 / 13:55

4 respostas

29

Originalmente de: link

Para "matar" um socket, você deve enviar um pacote de reset TCP. Para enviá-lo (e ser aceito pelo outro lado), você deve saber o número real da seqüência TCP.

1) O já mencionado método tcpkill aprende o número SEQ passivamente, farejando a rede e esperando que pacotes válidos desta conexão cheguem. Em seguida, ele usa o número SEQ aprendido para enviar pacotes RSET para ambos os lados. No entanto, se a conexão estiver inativa / interrompida e não houver fluxo de dados, ela não fará nada e esperará para sempre.

2) Outro método usa o script perl chamado killcx ( link para o Sourceforge ). Isso envia ativamente pacotes SYN falsificados e aprende o número SEQ da resposta. Em seguida, ele envia pacotes RSET da mesma maneira que tcpkill .

Alternativamente, a abordagem (com base no que você deseja alcançar) é usar o depurador gdb para anexar a um processo que possui este soquete / conexão e emitir close() syscall em seu nome - conforme detalhado neste answer .

Se você quiser lidar apenas com conexões suspensas (o outro lado está morto), existem vários timeouts (manutenção de atividade do TCP, por exemplo), que devem fechar automaticamente essas conexões se configuradas corretamente no sistema.

    
por 15.05.2015 / 19:15
13

tcpkill pode fazer isso por você. No Ubuntu está no pacote dsniff .

Algo como:

$ sudo tcpkill -i wlan0 host 192.168.1.214

(ou alguma outra expressão semelhante a tcpdump para qual conexão matar).

    
por 25.06.2013 / 00:22
3

Fazer - como root netstat -tunp|grep 49029 . A última coluna da saída deve mostrar o PID e o nome do programa do processo responsável por essa conexão.

Se tiver sorte, existe um único processo apenas para essa conexão.

Se você não tiver sorte, fica mais complicado (o PID é responsável por mais do que apenas uma conexão). Que tipo de serviço é esse?

Por que você quer terminar essa sessão?

    
por 10.04.2013 / 15:20
0

tcpkill não pode fechar uma conexão inativa (suspensa). É baseado em libpcap , ele constrói um pacote para enviar FIN pacote. Se a conexão já estiver inativa, não poderá obter o número de seqüência correto.

A única maneira é fechar o processo, então faz todo lugar não é SPOF.

    
por 19.01.2016 / 05:01

Tags