sherry00
V2EX  ›  问与答

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

  •  
  •   sherry00 · Jan 24, 2018 · 5870 views
    This topic created in 3207 days ago, the information mentioned may be changed or developed.
    朋友用 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 好感倍增。
    16 replies  •  2018-01-25 12:35:58 +08:00
    qsnow6
    qsnow6
    Jan 24, 2018 via iPhone
    1
    这跟修改 fake 我的身份证号码一个难度
    fengdra
    fengdra
    Jan 24, 2018 via Android
    2
    没学过计算机网络吧?
    blless
    blless
    Jan 24, 2018
    3
    装一个假系统
    cevincheung
    cevincheung
    Jan 24, 2018
    4
    无法伪造
    tomczhen
    tomczhen
    Jan 24, 2018❤️1
    5
    直接用代理就能避开单纯 IP 限制,而且单纯通过 IP 限制以目前国内 ISP 大量分配内网 IP 的情况看,很容易误伤。

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

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

    或者简单点,客户端挂$$访问
    sherry00
    sherry00
    OP
    Jan 24, 2018 via iPhone
    13
    感谢大佬们的建议(正在羞愧的看计算机网络....
    flynaj
    flynaj
    Jan 25, 2018 via Android
    14
    RemoteAddr 是服务端参数,是你客户端的真实 ip,除非用代理
    julyclyde
    julyclyde
    Jan 25, 2018
    15
    什么叫叫“传统的”方式?从来就没有这么个传统
    julyclyde
    julyclyde
    Jan 25, 2018
    16
    现在写程序都不需要学习计算机基础了吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4825 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 06:01 · PVG 14:01 · LAX 22:01 · JFK 01:01
    ♥ Do have faith in what you're doing.