http 服务器只服务特定ip问题

搭建一个Web服务器,但是我希望服务单一IP, 其他ip一律不回应。

http.ListenAndServe(":3220", nil) //这段代码会回应所有访问ip
http.ListenAndServe("localhost:3220", nil) //这段也正常,只回应本机

// 以下代码是我要用的,但是问题是如果用以下这段代码程序会自动跳出(不报错)。

http.ListenAndServe("192.168.1.100:3220", nil)

不知道有没有其他方法可以让服务器只服务单一ip呢?

共 3 个回复


fising

楼主你完全没有理解 ListenAndServe 函数。

文档上面是这样说的:ListenAndServe listens on the TCP network address addr …

它的第一个参数其实是欲监听的本地网络接口的地址,并不是客户端的 IP 地址。

想要实现你说的功能,两个方法吧:

  1. 防火墙阻止其他 IP 地址,而对目标 IP 地址放行
  2. 在应用层获取客户端 IP 地址,如果与目标 IP 不一致,则 DENY 这个请求。
# 0

fising

package main

import (
    "net/http"
    "strings"
)

type Handler struct{}

func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if strings.Split(r.RemoteAddr, ":")[0] != "127.0.0.1" {
        w.Write([]byte("Access denied."))
    } else {
        w.Write([]byte("Hello, world!"))
    }
}

func main() {
    http.ListenAndServe(":8080", &Handler{})
}

上面的例子仅仅服务 127.0.0.1 这个客户端

# 1