Bash 스크립트 - 무선 연결 비활성화

Bash 스크립트 - 무선 연결 비활성화
OS: Arch Linux
Network Manager: Netctl

현재 모든 네트워크 연결을 비활성화하고 시스템의 Wi-Fi를 끄는 bash 스크립트를 작성하려고 합니다. 현재 다음이 있지만 netstat를 실행한 후에도 현재 TCP 연결이 끊어지지 않는 것 같습니다.

alias wifioff='sudo netctl stop wlp3s0-network'       # Stop WiFi

이 스크립트에서 모든 활성 연결을 어떻게 종료해야 합니까? UDP는 연결이 없기 때문에 이 작업을 수행하려면 TCP 연결만 사용해야 한다고 가정합니다. 맞나요?

답변1

일반적으로 네트워크 인터페이스를 닫아도 TCP 연결은 종료되지 않습니다. 이것이 TCP/IP가 설계된 방식입니다. 문제는 문제가 일시적이고 빠르게 사라질 수 있거나 라우팅 프로토콜이 즉시 백업 경로를 설치하고 그런 식으로 네트워크를 복구할 수 있으므로 끊어진 링크로 인해 상위 계층이 연결을 포기해서는 안 된다는 것입니다. 몇 초 동안 이더넷 케이블을 뽑았다가 다시 연결하는 것이 좋습니다. 이더넷 케이블을 통해 활발하게 데이터를 전송하는 TCP 세션은 일부 패킷을 손실하고 짧은 시간 초과를 유발하며 케이블 연결이 끊어진 후(아마도 진행 중일 수 있음) 빠르게 복구됩니다. 느린 시작)이 복원되었습니다. 이를 변경하려면 모든 소규모 네트워크 오류가 영향을 받는 TCP 세션에 치명적인 영향을 미치기 때문에 TCP가 매우 취약해집니다.

즉, 여전히 쉘 스크립트를 통해 활성 TCP 연결을 수동으로 종료하려고 합니다. 유감스럽게도 Linux에는 TCP 연결을 찾아 강제로 종료할 수 있는 명확한 인터페이스가 없습니다.

내가 생각할 수 있는 한 가지 방법은 가짜 RST패킷을 시작하여(예: tun/tap 인터페이스를 통해) 커널이 다른 쪽 끝이 연결을 종료했다고 생각하도록 속이는 것입니다. tun/tap 인터페이스(또는 커널에 패킷을 삽입하는 다른 방법)를 설정하고 올바른 원격 IP 주소, 포트 번호 및 스푸핑된 TCP 시퀀스 번호를 찾고 수동으로 IP 및 TCP 헤더!

구글 검색으로 조금 밝혀졌는데이 방법은tcpkill. 아마도 이것이 당신에게 도움이 될 것입니다.

관련 정보