客户端如何伪造 Go(http.Request)中的 RemoteAddr 的信息,使得 Go 开发的 Http server 获取到假的地址信息

2018 年 1 月 24 日
 sherry00
朋友用 Go 搞了一个简单的 Http Server,通过 IP 地址(客户端的 IP 地址他是通过 Reques 的 RemoteAddr 获取的)限制用户的访问次数,然后让我帮忙测测有什么方式可以绕开,我用传统的 Header 中加 IP 方式,没搞定。

感觉 Go 中的 RemoteAddr 应该是拿的更加底层的 IP 信息。
// RemoteAddr allows HTTP servers and other software to record
// the network address that sent the request, usually for
// logging. This field is not filled in by ReadRequest and
// has no defined format. The HTTP server in this package
// sets RemoteAddr to an "IP:port" address before invoking a
// handler.
// This field is ignored by the HTTP client.
RemoteAddr string

V 站的大佬们,有什么方式可以 Fake 客户端的 IP 地址,使得 RemoteAddr 获取到的 IP 是伪造后的?

是不是要修改底层的协议才行?

顿时对 Go 好感倍增。
5565 次点击
所在节点    问与答
16 条回复
qsnow6
2018 年 1 月 24 日
这跟修改 fake 我的身份证号码一个难度
fengdra
2018 年 1 月 24 日
没学过计算机网络吧?
blless
2018 年 1 月 24 日
装一个假系统
cevincheung
2018 年 1 月 24 日
无法伪造
tomczhen
2018 年 1 月 24 日
直接用代理就能避开单纯 IP 限制,而且单纯通过 IP 限制以目前国内 ISP 大量分配内网 IP 的情况看,很容易误伤。

反倒是服务端这边如果有做反代,需要添加额外的 header 来让后端获取正确的 ip。
think2011
2018 年 1 月 24 日
装一个假系统
lzvezr
2018 年 1 月 24 日
一般没法伪造,除了代理
但是通过 IP 限制访问的话,小站没问题,大站的话会死一堆内网用户和移动用户
kfll
2018 年 1 月 24 日
你让你朋友套个反代,再让他想办法获取正确的客户端 IP。
然后再讨论能否伪造他拿到的 IP。
zn
2018 年 1 月 24 日
唯一一个办法:入侵服务端,hook 掉相关函数。

你要是找到别的办法,我拜你为师。
jingniao
2018 年 1 月 24 日
计算机网络基础………
WordTian
2018 年 1 月 24 日
客户端用 linux 系统,iptables 用 mangle 表修改源 ip ?
WordTian
2018 年 1 月 24 日
@WordTian 补充下,这个客户端系统得有公网 ip。

或者简单点,客户端挂$$访问
sherry00
2018 年 1 月 24 日
感谢大佬们的建议(正在羞愧的看计算机网络....
flynaj
2018 年 1 月 25 日
RemoteAddr 是服务端参数,是你客户端的真实 ip,除非用代理
julyclyde
2018 年 1 月 25 日
什么叫叫“传统的”方式?从来就没有这么个传统
julyclyde
2018 年 1 月 25 日
现在写程序都不需要学习计算机基础了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX