一、概念
TCPKILL是一个TCP连接释放工具,主要用于客户端TCP连接未释放导致Address already in use情况。TCPKILL默认只能干掉活跃连接,无法释放非活跃连接、半连接。
二、安装
1.通过yum安装
yum install dsniff
yum -y install dsniff --enablerepo=epel
2.通过rpm安装
rpm -ivh dsniff-2.4-0.17.b1.el6.x86_64.rpm
error: Failed dependencies:
libICE.so.6()(64bit) is needed by dsniff-2.4-0.17.b1.el6.x86_64
libSM.so.6()(64bit) is needed by dsniff-2.4-0.17.b1.el6.x86_64
libXmu.so.6()(64bit) is needed by dsniff-2.4-0.17.b1.el6.x86_64
libdb-4.7.so()(64bit) is needed by dsniff-2.4-0.17.b1.el6.x86_64
libnet.so.1()(64bit) is needed by dsniff-2.4-0.17.b1.el6.x86_64
libnids.so.1.24()(64bit) is needed by dsniff-2.4-0.17.b1.el6.x86_64
$rpm -ivh libICE-1.0.6-1.el6.x86_64.rpm
$rpm -ivh libSM-1.2.1-2.el6.x86_64.rpm
$rpm -ivh libXmu-1.1.1-2.el6.x86_64.rpm
error: Failed dependencies:
libXext.so.6()(64bit) is needed by libXmu-1.1.1-2.el6.x86_64
libXt.so.6()(64bit) is needed by libXmu-1.1.1-2.el6.x86_64
$rpm -ivh libXext-1.3.3-1.el6.x86_64.rpm
$rpm -ivh libXt-1.1.4-6.1.el6.x86_64.rpm
$rpm -ivh libXmu-1.1.1-2.el6.x86_64.rpm
$rpm -ivh libnet-1.1.6-7.el6.x86_64.rpm
$rpm -ivh libnids-1.24-1.el6.x86_64.rpm
$yum install compat-db47
$rpm -ivh dsniff-2.4-0.17.b1.el6.x86_64.rpm
3.校验
$tcpkill
Version: 2.4
Usage: tcpkill [-i interface] [-1..9] expression
三、使用
1.命令
tcpkill -i eth0 -9 port yyyy
tcpkill -i eth0 host xxx.xxx.xxx.xxx and port yyyy
2.实例:释放指定端口连接
1.查找连接对应被动端口号
netstat -an|grep 3600
tcp 0 0 0.0.0.0:3600 0.0.0.0:* LISTEN
tcp 0 378 22.61.189.76:3600 13.66.110.215:59986 ESTABLISHED
2.踢掉59986连接
tcpkill -i eth0 -9 port 59986
tcpkill: listening on em1 [port 59986]
22.61.189.76:59986 > 13.66.110.215:3600: R 2505431948:2505431948(0) win 0
3.ctrl+c结束后再次查看连接
netstat -an|grep 3600
tcp 0 0 0.0.0.0:3600 0.0.0.0:* LISTEN
3.实例:释放指定IP连接
1.统计171.1.1.171 IP连接数
netstat -anp | grep "171.1.1.171" | wc -l
2.统计80端口连接数
netstat -nat | grep -i "80" | wc -l
3.释放172.30.219.7 IP连接
tcpkill -9 host 172.30.219.7
4.实例:其他情况
tcpkill -9 host 192.168.10.30 &>/dev/null
tcpkill -9 port ftp &>/dev/null
tcpkill -9 port 53 and port 8000 &>/dev/null
tcpkill -9 net 192.168.10 &>/dev/null
tcpkill -9 net 192.168.10 and port 22 &>/dev/null
扩展:如何干掉一条tcp连接(活跃/非活跃)
原理:对于nc已经建立的连接运行tcpkill 后无法立即干掉,只有在这个连接上有数据传输的时候才会把发送rst 包将连接reset掉
1.干掉活跃连接
直接利用tcpkill干掉活跃连接即可
2.干掉非活跃连接
构造SYN 包发送给连接的一端,收到应答后根据应答中的序列号构造RST报文干掉连接
3.干掉半连接
干掉半连接的方法同干掉非活跃连接的方式一样,只是SYN 包一定要向半连接还存在的一端发送
4.注意问题
tcpkill 一定要运行在能接收到应答包的主机上在,最好运行在连接或半连接存在的一端主机上
5.关于tcpkill代码改动
(1)增加函数build_syn 根据相关参数构造syn 报文并发送到网络中,后台线程运行此函数不断发送syn 包
(2)运行pcap_loop捕获应答报文,并发送RST报文,reset 连接。从本质上说其实就是让非活跃连接或者半连接上有报文流动,被tcpkill捕获到之后发RST报文干掉连接
6.改动过后新tcpkill干掉一条连接的使用方法
sudo tcpkill -s 192.168.103.12:10261 -d 192.168.103.169:12345