서버를 다시 시작하지 않고 명령줄에서 끊어진 연결을 종료하는 방법

서버를 다시 시작하지 않고 명령줄에서 끊어진 연결을 종료하는 방법

클라이언트 컴퓨터가 종료되면 보류 상태가 되는 일부 끊어진 연결이 내 애플리케이션에 있습니다. 연결 중 하나가 다음과 같이 나타납니다.

->192.168.1.214:49029 (ESTABLISHED)

서버를 다시 시작하지 않고 Linux 명령줄에서 이러한 연결을 종료할 수 있는 방법이 있습니까?

검색 후 '라는 솔루션을 찾았 tcpkill지만 IP를 영구적으로 차단했기 때문에 작동하지 않았습니다.

답변1

ssLinux 커널 >= 4.9에서는 iproute2의 명령과 키를 사용할 수 있습니다 .-K

ss -K dst 192.168.1.214 dport = 49029

커널은 CONFIG_INET_DIAG_DESTROY옵션이 활성화된 상태로 컴파일되어야 합니다.

답변2

원본 출처:http://rtomaszewski.blogspot.sk/2012/11/how-to-forceously-kill-built-tcp.html

소켓을 "종료"하려면 TCP 재설정 패킷을 보내야 합니다. 이를 전송하고 상대방이 수락하도록 하려면 실제 TCP 시퀀스 번호를 알아야 합니다.

1) 이미 언급한 tcpkill방법은 네트워크를 수동적으로 스니핑하고 해당 연결에 유효한 패킷이 도착할 때까지 기다리는 방식으로 SEQ 번호를 학습합니다. 그런 다음 학습된 SEQ 번호를 사용하여 RSET 패킷을 양 당사자에게 보냅니다. 그러나 연결이 유휴/일시 중단되고 데이터 흐름이 없으면 아무 작업도 수행하지 않고 영원히 기다립니다.

2) 또 다른 방법은 killcx(소스포지 링크). 스푸핑된 SYN 패킷을 적극적으로 보내고 응답에서 SEQ 번호를 학습합니다. 그런 다음 동일한 방식으로 RSET 패킷을 보냅니다 tcpkill.

달성하려는 목표에 따른 또 다른 접근 방식은 gdb디버거를 사용하여 이 소켓/연결을 소유한 프로세스에 연결하고 close()대신 시스템 호출을 실행하는 것입니다. 자세한 내용은 참조하세요.답변.

보류 중인 연결만 처리하려는 경우(다른 쪽 끝은 끊어짐) 시스템에 올바르게 구성된 경우 해당 연결을 자동으로 닫아야 하는 다양한 시간 초과(예: TCP 연결 유지)가 있습니다.

답변3

tcpkill당신을 위해 그것을 할 수도 있습니다. 우분투에서는 dsniff패키지에 있습니다 .

그것은 다음과 같습니다:

$ sudo tcpkill -i wlan0 host 192.168.1.214

(또는 tcpdump어떤 연결을 끊기 위한 다른 유사한 표현).

답변4

패킷을 일치시킬 때 RST를 원격으로 보내는 기능을 iptables REJECT사용해 볼 수 있습니다 .--reject-with tcp-reset

관련 정보