OS: Arch Linux
Network Manager: Netctl我正在尝试编写一个bash脚本,它将禁用所有当前的网络连接,并在我的系统上关闭wifi。我目前有以下内容,但是在运行netstat之后,它似乎不会断开我当前的TCP连接。
alias wifioff='sudo netctl stop wlp3s0-network' # Stop WiFi如何终止此脚本中的所有活动连接?我想我只需要用TCP连接来做这件事,因为UDP没有连接.对吗?
发布于 2014-10-24 02:03:03
关闭网络接口通常不会导致TCP连接终止。TCP/IP就是这样设计的。这样做的想法是,下降的链路不应导致上层放弃连接,因为问题可能是短暂的,很快就会消失,或者路由协议可能会迅速安装备用路由并以这种方式治愈网络。考虑一下将您的以太网电缆拔出几秒钟并将其插入:正在积极通过它传输数据的TCP会话将丢失几个数据包,导致一些短暂超时,并在恢复电缆后(可能是在缓慢启动之后)迅速恢复。要改变这一点,TCP太脆弱了,因为每一个小的网络问题都会对TCP会话产生致命的影响。
尽管如此,您仍然希望手动终止shell脚本中的活动TCP连接。恐怕Linux中没有明显的接口来查找TCP连接并迫使它们终止。
我可以想到的一种方法是生成假RST数据包(例如通过tun/tap接口),以欺骗内核,使其认为另一端已经终止了连接。这很费劲,因为您必须设置tun/tap接口(或将数据包注入内核的其他方法),为欺骗查找正确的远程IP地址、端口号和TCP序列号,并手动构建IP和TCP报头!
稍微谷歌一下就会发现这种方法使用tcpkill。也许这对你有用。
https://unix.stackexchange.com/questions/163900
复制相似问题