HTTP 服务器端如何获取客户端IP地址

SydPink 2018-11-04 11:25:21
内网测位于防火墙内的服务器端,如何获取客户端IP地址?RemoteAddr 获取到的是我的路由器 IP,X_ForwartXXX之类的也无效。
内网服务器是通过防火墙上的端口映射提供访问的。Proxy()也都获取不到IP,客户端程序也是由我写的,但是不是GOLANG,有什么途径和方法可以获取到客户端真实IP?
...全文
2747 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_my 2019-03-27
  • 打赏
  • 举报
回复

// IP 获取真实IP
func (ctx *context) IP() string {
	if ctx.req == nil {
		panic("Please initialize before use context")
	}

	addr := ctx.req.Header.Get("X-Real-IP")
	if addr != "" {
		return addr
	}

	ips := ctx.IPs()
	if len(ips) > 0 && ips[0] != "" {
		ip, _, err := net.SplitHostPort(ips[0])
		if err != nil {
			ip = ips[0]
		}
		return ip
	}

	addr = ctx.req.RemoteAddr
	if ip, _, err := net.SplitHostPort(addr); err == nil {
		return ip
	}

	return ctx.req.RemoteAddr
}

// IPs 获取 IP 数组,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP数组中
func (ctx *context) IPs() []string {
	if ips := ctx.Header("X-Forwarded-For"); ips != "" {
		return strings.Split(ips, ",")
	}
	return []string{}
}

有没有用 nginx 之类的代理,会不会是设置的不正确?
追随她的旅程 2019-03-18
  • 打赏
  • 举报
回复
request里head里的remote
qybao 2019-02-07
  • 打赏
  • 举报
回复
可以参考一下这里 https://husobee.github.io/golang/ip-address/2015/12/17/remote-ip-go.html
通过分析每一层路由提取ip
liyin448623761 2018-12-17
  • 打赏
  • 举报
回复
等待大佬回答,球球大佬了
SydPink 2018-12-13
  • 打赏
  • 举报
回复
自己顶一下。

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧