登录
首页 >  Golang >  Go问答

如何黑洞标准 Go 网络请求

来源:stackoverflow

时间:2024-02-24 17:45:25 437浏览 收藏

本篇文章向大家介绍《如何黑洞标准 Go 网络请求》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我正在尝试 go 的 httpuitls.reverseproxy 和 http.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))
}

为问题添加一些背景信息,这里的最终目标是将此代理与破坏性测试工具一起使用。这个想法是客户端永远不会得到对某些路由的响应,它允许工具的用户查看他们的应用程序将如何处理这个问题。


解决方案


此要求本质上意味着客户端的套接字保持活动状态,从而消耗服务器上的资源。因此,这种黑洞将是一个坏主意。当与操作系统内核或防火墙交互时,可能仅在本地关闭套接字,而客户端不会注意到。但这会变得非常棘手并且取决于系统,因为为了快速清理本地资源,通常需要系统从客户端获得套接字也已关闭的回复等。

一种更简单的方法是通过重定向到同一主机上的不同端口进行响应,然后简单地在防火墙处丢弃(而不是拒绝)到该端口的所有流量。客户端通常会盲目地遵循重定向,然后挂在那里,直到连接尝试超时。这将在不消耗服务器资源的情况下阻止客户端。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何黑洞标准 Go 网络请求》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>