gpt4 book ai didi

go - 如何黑洞标准Go网络请求

转载 作者:行者123 更新时间:2023-12-03 10:07:19 24 4
gpt4 key购买 nike

我正在尝试Go的httpuitls.ReverseProxyhttp.HandleFunc。我试图在我的简单代理中创建一种通往黑洞某些路线的方法,如下所示。如何获得http库以完全抛出请求而不响应或发送断开连接?
这个例子有望阐明我的意思。请参见下面的/toss路线。

package main

import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)

func main() {
origin, _ := url.Parse("https://www.example.com:443/")

director := func(req *http.Request) {
req.URL.Scheme = "https"
req.URL.Host = origin.Host
req.Host = origin.Host
}

proxy := &httputil.ReverseProxy{Director: director}

http.HandleFunc("/toss", func(w http.ResponseWriter, r *http.Request) {
// What goes here to Black Hole this request??
})

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
proxy.ServeHTTP(w, r)
})

log.Fatal(http.ListenAndServe(":8080", nil))
}

在此问题上添加了一些上下文,此处的最终目标是将此代理与破坏性测试工具一起使用。这样的想法是,永远不会给客户提供对某些路由的响应,它允许工具的用户查看其应用程序将如何处理此问题。

最佳答案

How do I get the http library to completely throw out my request without responding or sending a disconnect?


此要求实质上意味着客户端的套接字保持 Activity 状态,从而耗尽了服务器上的资源。因此,这种黑洞将是一个坏主意。与OS内核或防火墙进行交互时,有可能仅在不通知客户端的情况下在本地关闭套接字。但是,这将变得非常棘手,并且系统会逐渐消失,因为通常需要系统从客户端得到套接字在其端部也已关闭等信息,以便快速清理本地资源。
一种更简单的方法是通过重定向到同一主机上的其他端口进行响应,然后简单地将所有流量丢弃(而不是拒绝)到防火墙处的该端口。客户端通常会盲目地跟随重定向,然后卡在那里直到连接尝试超时为止。这将阻止客户端,而不会消耗服务器上的资源。

关于go - 如何黑洞标准Go网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65162679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com