当前第2页 返回上一页
这个方法很简单,就是按照http约定的格式获取,其中X-Forwarded-For和X-Real-Ip header由反向代理填充,例如nginx或 haproxy。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | func ClientPublicIP(r *http.Request) string {
var ip string
for _, ip = range strings.Split(r.Header.Get( "X-Forwarded-For" ), "," ) {
ip = strings.TrimSpace(ip)
if ip != "" && !HasLocalIPddr(ip) {
return ip
}
}
ip = strings.TrimSpace(r.Header.Get( "X-Real-Ip" ))
if ip != "" && !HasLocalIPddr(ip) {
return ip
}
if ip, _, err := net.SplitHostPort(strings.TrimSpace(r.RemoteAddr)); err == nil {
if !HasLocalIPddr(ip) {
return ip
}
}
return ""
}
|
ClientPublicIP很简单,和ClientIP方法的读取顺序一样,只是试图中X-Forwarded-For列表中找到一个公网ip,如果没有检查X-Real-Ip 是否是一个公网ip,其次检查 http.Request.RemoteAddr 是否是公网ip,如果没有找到公网ip这返回一个空字符串。
这个方法可以让我们有机会优先获取到用户的公网 ip,往往公网 ip 对我们来说更有价值。
推荐教程:《go语言教程》
以上就是golang如何获取客户端ip?的详细内容,更多文章请关注木庄网络博客!!
返回前面的内容
相关阅读 >>
优雅的实现 golang rest api 架构
golang判断是否是素数的方法
2021-03-05:go中,io密集型的应用,比如有很多文件io,磁盘io,网络io,调大goma
golang 架构设计原则 里氏替换原则
go语言基础之变量和常量
一文读懂云原生 go-zero 微服务框架
手撸golang 架构设计原则 接口隔离原则
10 golang map的正确使用姿势
手撸golang 结构型设计模式 组合模式
手撸golang go与微服务 聚合模式之2
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang如何获取客户端ip?