Eu tenho alguma conexão inoperante em um aplicativo que está no estado suspenso se a máquina cliente estiver inoperante.
->192.168.1.214:49029 (ESTABLISHED)
Existe uma maneira de encerrar essas opções na linha de comando linux sem reiniciar o servidor?
Após a pesquisa, encontrei a solução chamada tcpkill. Mas isso não vai funcionar para mim. Como ele bloqueia permanentemente esse ip.
ss
comando é muito mais fácil e mais geral que as outras.Respostas:
Originalmente: http://rtomaszewski.blogspot.sk/2012/11/how-to-forcibly-kill-established-tcp.html
Para "matar" um soquete, você deve enviar um pacote de redefinição de TCP. Para enviá-lo (e ser aceito pelo outro lado), você deve saber o número de sequência TCP real.
1) O
tcpkill
método já mencionado aprende o número SEQ farejando passivamente a rede e aguardando a chegada de pacotes válidos dessa conexão. Em seguida, ele usa o número SEQ aprendido para enviar pacotes RSET para os dois lados. No entanto, se a conexão estiver ociosa / travada e nenhum fluxo de dados, ela não fará nada e aguardará para sempre.2) Outro método usa o script perl chamado
killcx
( link para Sourceforge ). Isso envia ativamente pacotes SYN falsificados e aprende o número SEQ com a resposta. Em seguida, envia pacotes RSET da mesma maneira quetcpkill
.Alternativamente, a abordagem (com base no que você deseja obter) é usar o
gdb
depurador para se conectar a um processo que possui esse soquete / conexão e emitir oclose()
syscall em seu nome - conforme detalhado nesta resposta .Se você deseja lidar apenas com conexões suspensas (o outro lado está inoperante), existem vários tempos limite (keepalive TCP, por exemplo), que devem fechar automaticamente essas conexões se configurados corretamente no sistema.
fonte
tcpkill
pode fazer isso por você. No Ubuntu está nodsniff
pacote.Algo como:
(ou alguma outra
tcpdump
expressão semelhante para qual conexão matar).fonte
No kernel do linux> = 4.9, você pode usar o
ss
comando iproute2 com a chave-K
o kernel precisa ser compilado com a
CONFIG_INET_DIAG_DESTROY
opção habilitada.fonte
tcpkill
não funcionaria). No entanto, admito que não inspecionei,killcx
mas parece que muitos softwares de segurança impediriam que isso funcionasse, a menos que você modifique suas tabelas de ip para permitir a passagem desses pacotes falsificados.sudo ss -K ....
no Ubuntu Bionic 18.04 LTS. Eu tive umtmux
processo que estava preso em um tamanho de tela pequeno por causa de uma conexão remota, mas inoperante, mas não excedeu o tempo limite. Tudo consertado!Faça - como raiz
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 você tiver sorte, existe um processo único para essa conexão.
Se você tiver azar, fica mais complicado (o PID é responsável por mais do que apenas uma conexão). Que tipo de serviço é esse?
Por que você deseja encerrar essa sessão?
fonte
tcpkill
não pode fechar uma conexão morta (travada). É baseadolibpcap
, constrói um pacote para oFIN
pacote enviado . Se a conexão já estiver desativada, não será possível obter o número de sequência correto.A única maneira é fechar o processo, de modo que em todos os lugares NÃO seja SPOF.
fonte