Syn_Flood
十二月 01, 2019
Syn_Flood攻击程序
什么是SYN?
- SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
- TCP连接的第一个包,非常小的一种数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。
SYN Flood 攻击
- 花了几天时间琢磨了一下(主要是琢磨scapy…)
scapy真的是太诱人了(危险发言)
头文件
1 | from os import system |
主要就是这四个库的应用了。
不同于C语言的实现,需要自己构造IP数据报和TCP报文,由于拥有scapy这个强大的库,导致实现变得很简单
- randint()用来生成随机的IP地址
- system()用来使用清屏作用(美观是程序员的浪漫不是嘛)
- stdout.write()来覆盖打印
P.S. 安装scapy真的好麻烦,需要先安装它的依赖库,建议直接使用Anaconda
生成随机的IP地址
由于使用的语言是python,导致这一切都变得异常的简单
1 | def IP_Address(): |
- 本质就是利用join()函数和推导式,没什么好说的
Syn_Flood函数主体部分
1 | def Syn_Flood(des_ip, des_port, pack_num): |
别问为什么有那么长的ListA和ListB,都是为了好看!!- 其本质上就是利用scapy构造IP数据报和TCP报文,关于scapy的用法,日后会单独写一篇来做介绍~
- 这里使用了随机的端口序列,seq序列和window序列。
- 将构造好的TCP报文发出去,就大功告成啦!
主函数部分
1 | if __name__ == "__main__": |
- 没啥好说的,就是输入你的目标地址和目标端口,并且注明发送的数量就好。
切记,一定别忘了强制类型转换为int(),否则无法执行,毕竟谁也不认自己的端口号是一个字符串吧嘻嘻
总结:
- 怎么说呢,主要还是scapy过于强大,导致原本过于复杂的任务变得非常的轻松。总的来说还是有一些缺憾吧,比如没有加入多线程,没有考虑到相同的mac地址之类的,总之下一次在继续完善吧~
查看评论