Linux关闭Tcp连接

有时服务端只支持一个长连接,而由于意外连接断开,但是实际上系统中端口仍然被连接占用,只是客户端被强行断开了,这时其它客户端也无法连接服务端,而服务端被一个假的连接霸占,这时候需要强行关闭当前的连接。

比如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 

最后

推荐一个小工具的使用

推荐阅读更多精彩内容