pythonddos攻击代码
作者:探索 来源:综合 浏览: 【大 中 小】 发布时间:2026-10-17 06:09:03 评论数:
pythonddos攻击代码
写了个Python脚本,攻击三秒内让一台没做防护的代码测试服务器CPU飙到100%。这不是攻击段子,是代码上周我在自己搭的局域网靶机上干的事。代码不到二十行,攻击核心就一个while True加requests.get。代码发出去的攻击数据包像洪水一样堵住目标端口,正常用户连握手都排不上队。代码这就是攻击DDoS最朴素的形态——用数量压死质量。
很多人以为DDoS得靠僵尸网络,代码得控制几万台肉鸡。攻击那是代码大规模攻击的玩法。Python做单机压力测试,攻击或者小规模骚扰,代码根本用不着那么复杂。攻击你拿一台普通笔记本,跑个多线程脚本,就能让一个没加限流的API接口半身不遂。我试过用threading开200个线程,每个线程循环发HTTP GET,目标是个Flask写的测试页。十秒钟后,那个页面的响应时间从12毫秒涨到8秒,最后直接超时。
代码逻辑简单得让人不好意思。先定义目标URL,然后写个函数,里面套个死循环,每次循环构造一个请求。为了让攻击看起来更像正常流量,可以随机化User-Agent,或者加个随机延时。但真到压测的时候,没人管这些。直接requests.get(url),连异常处理都省了,报错就报错,线程挂了再补一个。我见过最粗暴的版本,连requests库都不用,直接socket发SYN包。那个更底层,也更难防。
拿我上周写的那个脚本举例。核心片段就这几行:
import requests import threading target = "http://192.168.1.100:5000" def flood(): while True: try: requests.get(target, timeout=0.1) except: pass for _ in range(500): threading.Thread(target=flood, daemon=True).start() input("按回车停止...") 跑起来之后,任务管理器里Python进程的CPU占用直接拉满。网络发送字节数每秒跳几兆。目标服务器那边,Flask自带的开发服务器直接卡死,日志疯狂刷“Connection reset by peer”。这还只是单机。要是把这段代码扔到十台机器上同时跑,效果翻十倍。当然,真拿去打公网服务器,大概率半路就被运营商或者云服务商的流量清洗给拦了。但在内网环境,或者针对没有DDoS防护的小网站,这玩意儿就是一把钝刀,砍不死人但能疼得你叫唤。
有人问,Python这么慢,能打出DDoS?问这话的人忽略了瓶颈在哪。DDoS攻击的瓶颈从来不是攻击端的计算速度,而是目标端的处理能力和带宽。你发一个请求,服务器要分配线程、查数据库、拼HTML、返回响应。你发一百个请求,它就得做一百遍。Python的GIL确实限制多线程效率,但网络IO不占CPU。500个线程里,大部分时间都在等socket返回。真正吃CPU的是目标服务器,不是你的脚本。
我拿这个脚本测过自己的树莓派。那台跑Nginx的派,平时响应静态页只要5毫秒。被脚本轰了半分钟之后,SSH都连不上去。风扇狂转,温度飙到75度。拔网线才恢复。这还只是HTTP层的洪水。要是换成UDP反射,比如用Python构造DNS查询包,伪造源IP发给开放递归的DNS服务器,那放大倍数能到几十倍。一个100Mbps的出口,能打出几个Gbps的流量。当然,伪造源IP在大多数家用网络里出不去,运营商那边就把你拦了。
写这些代码不为了教人攻击。纯粹是搞安全的人得知道攻击怎么实现,才能想防御。我见过太多开发写API,连个频率限制都不加。用户登录接口,密码错误五次也不锁定。这种接口,拿Python写个十行脚本就能把数据库连接池打爆。防御手段其实也简单,Nginx加个limit_req,或者应用层用Redis做个计数器。但很多人就是不做。等被打挂了才想起来查日志,一看全是同一个IP在刷。那时候已经晚了。
最后说个真事。上个月有个朋友的公司内网被人搞了,OA系统瘫了一下午。查来查去,发现是离职员工留了个Python脚本在测试机上,定时任务没删。那脚本本身是压测用的,结果配置错了目标IP,把生产环境当成了靶机。代码就是上面那种while True加requests。你看,DDoS有时候不需要黑客,一个粗心的运维就够了。
