Check if IP address is in private network space

前端 未结 2 1201
臣服心动
臣服心动 2021-02-15 00:43

I have a program in go which accepts URLs from clients and gets them using the net/http package. Before doing further processing, I would like to check if the URL maps to privat

2条回答
  •  暖寄归人
    2021-02-15 00:57

    It seems there's no better way to accomplish than the one I described. Combining code from @MichaelHausenblas with the suggestion from @JimB, my code ended up kind of like this.

    func privateIP(ip string) (bool, error) {
        var err error
        private := false
        IP := net.ParseIP(ip)
        if IP == nil {
            err = errors.New("Invalid IP")
        } else {
            _, private24BitBlock, _ := net.ParseCIDR("10.0.0.0/8")
            _, private20BitBlock, _ := net.ParseCIDR("172.16.0.0/12")
            _, private16BitBlock, _ := net.ParseCIDR("192.168.0.0/16")
            private = private24BitBlock.Contains(IP) || private20BitBlock.Contains(IP) || private16BitBlock.Contains(IP)
        }
        return private, err
    }
    

提交回复
热议问题