개별 활동을 추적하는 대신 버튼 클릭만으로 모든 TCP 활동을 중단할 수 있습니까? 내 말은 연결 자체를 종료하고(설정, 동기화, 대기 등 - 그냥 놓아두기) 해당 연결을 설정한 프로세스를 종료하지 않고(자체 종료 여부는 중요하지 않음) 다시 시작하지 않는다는 것입니다. 모든 네트워크 구성 요소
답변1
네트워크 인터페이스를 닫을 수 있습니다. 이렇게 하면 TCP 연결뿐만 아니라 모든 연결이 중단됩니다. 그리고 엄밀히 말하면 "네트워크 구성 요소"(예: DHCP 클라이언트)는 "다시 시작"되지 않습니다.
인터페이스를 다시 시작하고 동일한 IP를 얻거나 설정했는지 확인하면 시간 초과되지 않은 연결도 다시 시작됩니다.
답변2
규칙 을 사용할 수 있습니다 iptables
. 이 같은:
$ sudo iptables -A INPUT -p tcp -m --cstate ESTABLISHED -j REJECT
또는 tcpkill
(패키지의 일부 dsniff
)
$ sudo tcpkill -i INTERFACE -9 TCPDUMP_FILTER
두 경우 모두 시작하기 전에 트래픽이 있어야 합니다. ssh
세션을 실행 중이고 다음과 같은 명령을 실행하는 경우 :
$ sudo tcpkill -i INTERFACE -9 port 22
두 경우 모두 들어오고 나가는 트래픽이 있을 때만 연결이 실제로 종료됩니다(킵얼라이브 패킷의 경우에도). 그렇지 않으면 중단됩니다(더 이상 트래픽이 통과하지 않습니다).
IPv6를 사용하는 경우 tcpkill
에도 이러한 문제를 해결해야 합니다.
인터페이스 삭제/추가 시 주의사항
인터페이스를 삭제하고 동일한 IP로 다시 생성하면 아무 작업도 수행되지 않을 수 있으므로 해결책이 아닙니다. 다음과 같은 간단한 설정으로 이를 확인할 수 있습니다.
$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example
이제 두 터미널 모두에 서버를 만듭니다.
(terminal-1) $ nc -l -s 192.0.2.1 -p 9999
그리고 클라이언트:
(terminal-2) $ nc 192.0.2.1 9999
양쪽(클라이언트/서버)에 약간씩 작성하고 어떻게 작동하는지 확인하세요.
이제 인터페이스를 삭제합니다.
$ sudo ip link del example
양쪽에 내용을 더 작성하고(데이터가 흐르지 않음을 알 수 있음) 링크를 다시 만들기 전에 2분 정도 기다리세요.
$ sleep 120
$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example
뭔가를 입력하세요. 또는 좀 더 기다리면 데이터 손실 없이 연결이 복원되는 것을 볼 수 있습니다.
서버/클라이언트(인터페이스 이벤트를 수신하고 스스로 연결을 끊을 수 있음)에 따라 인터페이스를 삭제/다시 생성한 결과는 최소한 다음과 같을 수 있습니다.
- 아무것도 없다
- 깨끗한 출구
- 더러운 출구