当前第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?的详细内容,更多文章请关注木庄网络博客!!
返回前面的内容
相关阅读 >>
【译】使用 go modules
聊聊go-ddd-sample
go - 常用签名算法的基准测试
golang如何升级?
手撸golang 基本数据结构与算法 数组
结合kubebuilder与code-generator开发operator
每个角色都不简单
理解 go 1.13 中 sync.pool 的设计与实现
go语言————3、编辑器、集成开发环境与其它工具
分享一个go json 踩坑记录
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang如何获取客户端ip?