工作原理
日常工作生活中大家在维护自己的服务器、VPS有时会碰到这样的情况:服务器上突然出现了许多来自未知ip的网络连接与流量,我们需要第一时间切断这些可能有害的网络连接。除了iptables/ipset, blackhole routing这些常规手段,我们还可以借助一些更轻量级的小工具来临时处理这些情况,如tcpkill。
tcpkill不会马上中断目标tcp连接,是因为伪造tcp rst包时,需要填入正确的sequence number,这需要通过拦截双方的tcp通信才能实时得到。所以运行tcpkill后,只有目标连接有新tcp包发送/接受才会导致tcp连接中断。因此针对CLOSE_WAIT等没有有效数据的链接是无效的
源码编译安装
由于Dsniff套件编译需要各种依赖问题,因此采用其他的演绎版本
https://github.com/chartbeat/tcpkill.git
运行指令
果我们需要使用tcpkill临时禁止服务器与主机10.0.0.1的tcp连接,可以在服务器上输入命令:
# tcpkill host 10.0.0.1
断开60040端口链接
./tcpkill port 60040
依赖pcap
目前适配版本libpcap-0.7.2
pcaputil.c:17:10: 致命错误:pcap.h:没有那个文件或目录
#include <pcap.h>
In file included from pcaputil.c:22:0:
pcaputil.h:14:9: 错误:与‘pcap_init’类型冲突
pcap_t *pcap_init(char *intf, char *filter, int snaplen);
^~~~~~~~~
In file included from /usr/local/include/pcap.h:43:0,
from pcaputil.c:17:
/usr/local/include/pcap/pcap.h:386:14: 附注:‘pcap_init’的上一个声明在此
PCAP_API int pcap_init(unsigned int, char *);
^~~~~~~~~
pcaputil.c:61:1: 错误:与‘pcap_init’类型冲突
pcap_init(char *intf, char *filter, int snaplen)