linux - 在 Go 中只接受来自 Localhost 的 HTTP 连接?

标签 linux http go tcp localhost

我在 Golang 中有一个简单的 HTTP 服务器:

h := http.NewServeMux()
h.Handle("/somepath", MyHandler)

s := &http.Server{
    Addr:    "1234",
    Handler: h,
}   

s.ListenAndServe();

在调用者不是本地主机的情况下断开连接的最佳方法是什么?目前我正在考虑检查底层连接信息并确保 IP 地址为 127.0.0.1,但这在最终删除之前浪费了大量资源(并运行了一大堆 Go 代码)连接。理想情况下,我可以检测 Golang 服务器以根据 IP 地址丢弃初始 TCP SYN 数据包,并且根本不创建 TCP 连接(或显示此端口正在监听)。

这里最干净的前进道路是什么?

最佳答案

正在转换 VonC将评论转化为答案。

您可以通过在http.Server.Addrhttp.ListenAndServe 中设置host:port 来绑定(bind)主机。

他们在内部使用 net.Listen

来自 net.Listen :

For TCP and UDP, the syntax of laddr is "host:port", like "127.0.0.1:8080". If host is omitted, as in ":8080", Listen listens on all available interfaces instead of just the interface with the given host address.

关于linux - 在 Go 中只接受来自 Localhost 的 HTTP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028709/

相关文章:

linux - 如何在 Ubuntu 服务器上设置权限以允许 Apache 用户和第二个用户写入 Web 目录?

apache-flex - 尝试在 Flex 3 中设置中断时出现解析错误

google-app-engine - 从 Go on AppEngine 中的 init() 函数获取 URL

go - 如何在main.go中找到run函数的入口?

go - 使用/不使用 make 创建 map

linux - 删除点左边的字符 - Unix

c - 在内核代码中查找函数的最佳方法

linux - 在没有 super 用户权限的情况下,Scala shell 无法在 ubuntu 上运行

android - 如何从内网加载PNG文件到Android中?

.net - 从 .NET 使用 RESt API