콘솔을 사용하여 모든 TCP 연결을 종료/중단하는 방법은 무엇입니까?

콘솔을 사용하여 모든 TCP 연결을 종료/중단하는 방법은 무엇입니까?

개별 활동을 추적하는 대신 버튼 클릭만으로 모든 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

뭔가를 입력하세요. 또는 좀 더 기다리면 데이터 손실 없이 연결이 복원되는 것을 볼 수 있습니다.

서버/클라이언트(인터페이스 이벤트를 수신하고 스스로 연결을 끊을 수 있음)에 따라 인터페이스를 삭제/다시 생성한 결과는 최소한 다음과 같을 수 있습니다.

  • 아무것도 없다
  • 깨끗한 출구
  • 더러운 출구

관련 정보