有时服务端只支持一个长连接,而由于意外连接断开,但是实际上系统中端口仍然被连接占用,只是客户端被强行断开了,这时其它客户端也无法连接服务端,而服务端被一个假的连接霸占,这时候需要强行关闭当前的连接。
比如Java的jdwp
// java 5之前
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
// java 5之后
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044
JDWP的具体内容参考: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/introclientissues005.html
tcpkill关闭TCP连接
1 查看哪些连接占用了端口
# lsof -i:port
lsof -i:8001
2 安装tcpkill
# TcpKill工具依赖epel源
yum install epel* -y
# 提供tcpkill的包
yum install dsniff -y
3 关闭某个具体的连接,tcpkill的过滤表达式基于tcpdump的表达式。
tcpkill -i eth0 { expression }
# 删除eth0网卡的所有21端口的出口流量
tcpkill -i eth0 port 21
# 删除192.168.1.2的所有网络包
tcpkill host 192.168.1.2
# 强行关闭em1网卡与30.11.160.18 主机之前的网络包
tcpkill -i em1 -9 ip host 30.11.160.18
最后
推荐一个小工具的使用