当前位置:首页 > 科技  > 软件

Go语言助力安全测试:24小时内发送5亿次HTTP/1.1请求

来源: 责编: 时间:2024-07-06 07:43:11 1032观看
导读作为一名安全研究人员,我需要定期对大量的目标主机进行安全扫描。最近,我遇到了一个挑战:需要在短时间内向250万台主机发送5亿次非RFC标准的HTTP/1.1请求,理想情况下是在几个小时内完成。经过一番研究和实践,我成功地使用G

作为一名安全研究人员,我需要定期对大量的目标主机进行安全扫描。最近,我遇到了一个挑战:需要在短时间内向250万台主机发送5亿次非RFC标准的HTTP/1.1请求,理想情况下是在几个小时内完成。经过一番研究和实践,我成功地使用Go语言构建了一个高效的“HTTP大炮”,并成功完成了任务。AtS28资讯网——每日最新资讯28at.com

为什么选择Go语言

在众多编程语言中,我最终选择了Go语言作为实现工具,主要原因有三点:AtS28资讯网——每日最新资讯28at.com

  • 简洁易懂: Go语言语法简洁,易于学习和使用,即使像我这样并非专业的Go语言开发者也能快速上手。
  • 并发支持: Go语言内置了强大的并发原语,例如goroutine和channel,可以轻松地实现高并发程序。
  • 运行速度快: Go语言编译型语言,运行速度非常快,可以充分利用多核CPU的性能。

当然,我也尝试过使用Rust语言来实现,但异步tokio类型的复杂性让我望而却步。相比之下,Go语言的并发模型更加直观易懂,即使是JS开发者也能轻松驾驭。AtS28资讯网——每日最新资讯28at.com

5亿次HTTP/1.1请求意味着什么

你可能会问,5亿次HTTP/1.1请求到底意味着什么?这是一个很大的数字吗?答案是肯定的。AtS28资讯网——每日最新资讯28at.com

如果使用curl命令逐个发送这些请求,即使每秒发送2个请求,也需要7.9年才能完成。在实际情况下,由于服务器的速率限制和网络延迟,所需时间会更长。AtS28资讯网——每日最新资讯28at.com

从数据传输的角度来看,5亿次HTTP/1.1请求的数据量并不算太大:AtS28资讯网——每日最新资讯28at.com

  • 请求数据:5亿 * 1KB(平均请求大小) ≈ 478GB
  • 响应数据:5亿 * 5KB(平均响应大小) ≈ 2.33TB

真正的挑战在于如何高效地建立连接、发送请求和处理响应。AtS28资讯网——每日最新资讯28at.com

发送单个HTTP/1.1请求的步骤

虽然在代码层面,发送一个HTTP/1.1请求只需要简单的几行代码,例如:AtS28资讯网——每日最新资讯28at.com

resp, err := http.Get("https://example.com")

但在底层,HTTP库需要执行一系列操作:AtS28资讯网——每日最新资讯28at.com

  • DNS解析: 将域名解析为IP地址。
  • TCP连接: 与目标服务器建立TCP连接。
  • TLS握手: 进行TLS握手,协商加密密钥。
  • 请求准备: 编码HTTP请求头和请求体。
  • 发送请求: 将HTTP请求发送到服务器。
  • 接收响应: 接收服务器返回的HTTP响应。
  • 解析响应: 解码HTTP响应头和响应体。
  • 关闭连接: 关闭TCP连接(可选)。

需要注意的是,上述任何一个步骤都可能失败,因此需要进行错误处理和重试。AtS28资讯网——每日最新资讯28at.com

优化HTTP请求发送的思路

为了提高发送效率,我们需要尽可能地减少每个请求的耗时。通过分析单个HTTP请求的步骤,我们可以找到优化的方向:AtS28资讯网——每日最新资讯28at.com

  • 请求解析: 在我的用例中,发送的HTTP请求并非标准的RFC请求,而是手工构造的,因此可以跳过请求解析的步骤。
  • DNS解析: 可以预先将所有目标主机的域名解析为IP地址,避免在发送请求时进行DNS解析。
  • 连接复用: 对于同一个目标主机,可以复用已经建立的TCP连接,减少连接建立的开销。
  • 并发发送: 可以使用多线程或协程并发发送请求,提高CPU利用率。

HTTP请求发送器的设计与实现

基于上述优化思路,我设计了一个多级流水线式的HTTP请求发送器,主要包括三个模块:AtS28资讯网——每日最新资讯28at.com

  1. 请求生成模块: 负责生成待发送的HTTP请求数据。
  2. 发送模块: 负责将HTTP请求数据发送到目标服务器。
  3. 响应处理模块: 负责接收和处理服务器返回的HTTP响应数据。

为了提高内存利用率和减少对象创建的开销,我使用了对象池来管理HTTP连接和请求/响应对象。同时,为了避免单个目标服务器过载,我对每个目标服务器的请求频率进行了限制。AtS28资讯网——每日最新资讯28at.com

关键代码实现

1. 使用fasthttp库

为了追求极致的性能,我选择了fasthttp库来替代Go语言标准库中的net/http。fasthttp是一个轻量级、高性能的HTTP库,经过 benchmark 测试,其速度比net/http快了将近10倍。AtS28资讯网——每日最新资讯28at.com

2. 自定义Dial函数

为了跳过DNS解析步骤,我自定义了一个Dial函数,直接使用预先解析好的IP地址建立TCP连接。AtS28资讯网——每日最新资讯28at.com

req.SetDial(func(addr string) (net.Conn, error) {    return customDialer.Dial(resolved_ip)})

3. 禁用请求标准化

由于我发送的是手工构造的非RFC标准HTTP请求,因此可以禁用fasthttp库中的请求标准化功能,进一步提高性能。AtS28资讯网——每日最新资讯28at.com

req := rawfasthttp.AcquireRequest()resp := rawfasthttp.AcquireResponse()rawBytes := []byte("GET / HTTP/1.1/r/nHost: example.com/r/n/r/n")req.SetRequestRaw(rawBytes)err := client.Do(req, resp)

使用Kubernetes进行横向扩展

为了进一步提高发送效率,我将HTTP请求发送器部署到了DigitalOcean的Kubernetes集群中。DigitalOcean提供了每月2TB的免费流量,足以满足我的测试需求。AtS28资讯网——每日最新资讯28at.com

为了实现自动化的弹性伸缩,我编写了一个简单的JavaScript脚本,根据任务队列的长度动态调整Kubernetes Deployment的副本数量。AtS28资讯网——每日最新资讯28at.com

挑战与解决方案

在测试过程中,我遇到了一些挑战,例如:AtS28资讯网——每日最新资讯28at.com

  • DDoS攻击风险: 由于发送的请求量非常大,我自己的网络一度被DDoS攻击,导致Kubernetes节点无法正常工作。为了解决这个问题,我降低了每个Pod的请求频率,并对目标服务器进行了分片。
  • IP封禁: 一些安全防护软件会对异常流量进行封禁,为了避免被封禁,我使用了DigitalOcean提供的动态IP功能,每台Droplet都使用不同的公网IP地址。

测试结果

最终,我成功地构建了一个高效的HTTP请求发送器,并在几个小时内完成了向250万台主机发送5亿次HTTP/1.1请求的任务。AtS28资讯网——每日最新资讯28at.com

  • 每个Pod的发送速率达到了每秒100-400个请求。
  • Kubernetes集群最多扩展到了60个Pod。

总结

通过这次实践,我深刻体会到了Go语言在网络编程方面的强大能力,也学习到了很多关于HTTP协议和网络安全的知识。我相信,这些经验将会对我未来的安全研究工作有所帮助。AtS28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-99168-0.htmlGo语言助力安全测试:24小时内发送5亿次HTTP/1.1请求

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们一起聊聊审核平台前端新老仓库迁移

下一篇: 阿里面试:说说@Async实现原理?

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
Top