日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go語言助力安全測試:24小時內發送5億次HTTP/1.1請求

來源: 責編: 時間:2024-07-06 07:43:11 909觀看
導讀作為一名安全研究人員,我需要定期對大量的目標主機進行安全掃描。最近,我遇到了一個挑戰:需要在短時間內向250萬臺主機發送5億次非RFC標準的HTTP/1.1請求,理想情況下是在幾個小時內完成。經過一番研究和實踐,我成功地使用G

作為一名安全研究人員,我需要定期對大量的目標主機進行安全掃描。最近,我遇到了一個挑戰:需要在短時間內向250萬臺主機發送5億次非RFC標準的HTTP/1.1請求,理想情況下是在幾個小時內完成。經過一番研究和實踐,我成功地使用Go語言構建了一個高效的“HTTP大炮”,并成功完成了任務。XzV28資訊網——每日最新資訊28at.com

為什么選擇Go語言

在眾多編程語言中,我最終選擇了Go語言作為實現工具,主要原因有三點:XzV28資訊網——每日最新資訊28at.com

  • 簡潔易懂: Go語言語法簡潔,易于學習和使用,即使像我這樣并非專業的Go語言開發者也能快速上手。
  • 并發支持: Go語言內置了強大的并發原語,例如goroutine和channel,可以輕松地實現高并發程序。
  • 運行速度快: Go語言編譯型語言,運行速度非常快,可以充分利用多核CPU的性能。

當然,我也嘗試過使用Rust語言來實現,但異步tokio類型的復雜性讓我望而卻步。相比之下,Go語言的并發模型更加直觀易懂,即使是JS開發者也能輕松駕馭。XzV28資訊網——每日最新資訊28at.com

5億次HTTP/1.1請求意味著什么

你可能會問,5億次HTTP/1.1請求到底意味著什么?這是一個很大的數字嗎?答案是肯定的。XzV28資訊網——每日最新資訊28at.com

如果使用curl命令逐個發送這些請求,即使每秒發送2個請求,也需要7.9年才能完成。在實際情況下,由于服務器的速率限制和網絡延遲,所需時間會更長。XzV28資訊網——每日最新資訊28at.com

從數據傳輸的角度來看,5億次HTTP/1.1請求的數據量并不算太大:XzV28資訊網——每日最新資訊28at.com

  • 請求數據:5億 * 1KB(平均請求大小) ≈ 478GB
  • 響應數據:5億 * 5KB(平均響應大小) ≈ 2.33TB

真正的挑戰在于如何高效地建立連接、發送請求和處理響應。XzV28資訊網——每日最新資訊28at.com

發送單個HTTP/1.1請求的步驟

雖然在代碼層面,發送一個HTTP/1.1請求只需要簡單的幾行代碼,例如:XzV28資訊網——每日最新資訊28at.com

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

但在底層,HTTP庫需要執行一系列操作:XzV28資訊網——每日最新資訊28at.com

  • DNS解析: 將域名解析為IP地址。
  • TCP連接: 與目標服務器建立TCP連接。
  • TLS握手: 進行TLS握手,協商加密密鑰。
  • 請求準備: 編碼HTTP請求頭和請求體。
  • 發送請求: 將HTTP請求發送到服務器。
  • 接收響應: 接收服務器返回的HTTP響應。
  • 解析響應: 解碼HTTP響應頭和響應體。
  • 關閉連接: 關閉TCP連接(可選)。

需要注意的是,上述任何一個步驟都可能失敗,因此需要進行錯誤處理和重試。XzV28資訊網——每日最新資訊28at.com

優化HTTP請求發送的思路

為了提高發送效率,我們需要盡可能地減少每個請求的耗時。通過分析單個HTTP請求的步驟,我們可以找到優化的方向:XzV28資訊網——每日最新資訊28at.com

  • 請求解析: 在我的用例中,發送的HTTP請求并非標準的RFC請求,而是手工構造的,因此可以跳過請求解析的步驟。
  • DNS解析: 可以預先將所有目標主機的域名解析為IP地址,避免在發送請求時進行DNS解析。
  • 連接復用: 對于同一個目標主機,可以復用已經建立的TCP連接,減少連接建立的開銷。
  • 并發發送: 可以使用多線程或協程并發發送請求,提高CPU利用率。

HTTP請求發送器的設計與實現

基于上述優化思路,我設計了一個多級流水線式的HTTP請求發送器,主要包括三個模塊:XzV28資訊網——每日最新資訊28at.com

  1. 請求生成模塊: 負責生成待發送的HTTP請求數據。
  2. 發送模塊: 負責將HTTP請求數據發送到目標服務器。
  3. 響應處理模塊: 負責接收和處理服務器返回的HTTP響應數據。

為了提高內存利用率和減少對象創建的開銷,我使用了對象池來管理HTTP連接和請求/響應對象。同時,為了避免單個目標服務器過載,我對每個目標服務器的請求頻率進行了限制。XzV28資訊網——每日最新資訊28at.com

關鍵代碼實現

1. 使用fasthttp庫

為了追求極致的性能,我選擇了fasthttp庫來替代Go語言標準庫中的net/http。fasthttp是一個輕量級、高性能的HTTP庫,經過 benchmark 測試,其速度比net/http快了將近10倍。XzV28資訊網——每日最新資訊28at.com

2. 自定義Dial函數

為了跳過DNS解析步驟,我自定義了一個Dial函數,直接使用預先解析好的IP地址建立TCP連接。XzV28資訊網——每日最新資訊28at.com

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

3. 禁用請求標準化

由于我發送的是手工構造的非RFC標準HTTP請求,因此可以禁用fasthttp庫中的請求標準化功能,進一步提高性能。XzV28資訊網——每日最新資訊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的免費流量,足以滿足我的測試需求。XzV28資訊網——每日最新資訊28at.com

為了實現自動化的彈性伸縮,我編寫了一個簡單的JavaScript腳本,根據任務隊列的長度動態調整Kubernetes Deployment的副本數量。XzV28資訊網——每日最新資訊28at.com

挑戰與解決方案

在測試過程中,我遇到了一些挑戰,例如:XzV28資訊網——每日最新資訊28at.com

  • DDoS攻擊風險: 由于發送的請求量非常大,我自己的網絡一度被DDoS攻擊,導致Kubernetes節點無法正常工作。為了解決這個問題,我降低了每個Pod的請求頻率,并對目標服務器進行了分片。
  • IP封禁: 一些安全防護軟件會對異常流量進行封禁,為了避免被封禁,我使用了DigitalOcean提供的動態IP功能,每臺Droplet都使用不同的公網IP地址。

測試結果

最終,我成功地構建了一個高效的HTTP請求發送器,并在幾個小時內完成了向250萬臺主機發送5億次HTTP/1.1請求的任務。XzV28資訊網——每日最新資訊28at.com

  • 每個Pod的發送速率達到了每秒100-400個請求。
  • Kubernetes集群最多擴展到了60個Pod。

總結

通過這次實踐,我深刻體會到了Go語言在網絡編程方面的強大能力,也學習到了很多關于HTTP協議和網絡安全的知識。我相信,這些經驗將會對我未來的安全研究工作有所幫助。XzV28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-99168-0.htmlGo語言助力安全測試:24小時內發送5億次HTTP/1.1請求

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我們一起聊聊審核平臺前端新老倉庫遷移

下一篇: 阿里面試:說說@Async實現原理?

標簽:
  • 熱門焦點
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產品是什么?——是智能音箱。 手機在執行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 華為Mate 60保護殼曝光:碩大后置相機模組 凸起程度有驚喜

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top 主站蜘蛛池模板: 涿鹿县| 双流县| 绥化市| 武安市| 邵东县| 西华县| 信阳市| 平潭县| 全南县| 通州区| 雷波县| 武乡县| 冷水江市| 徐州市| 楚雄市| 永兴县| 海林市| 咸宁市| 湟中县| 滦南县| 大丰市| 青田县| 济源市| 灵宝市| 南乐县| 上杭县| 仁怀市| 洞口县| 北安市| 吴堡县| 莫力| 贵州省| 松江区| 武安市| 麻城市| 瓦房店市| 汤原县| 双流县| 区。| 浮梁县| 通山县|