V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sherry00
V2EX  ›  问与答

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

  •  
  •   sherry00 · 2018-01-24 18:34:23 +08:00 · 4794 次点击
    这是一个创建于 2499 天前的主题,其中的信息可能已经有所发展或是发生改变。
    朋友用 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 条回复    2018-01-25 12:35:58 +08:00
    qsnow6
        1
    qsnow6  
       2018-01-24 19:00:05 +08:00 via iPhone
    这跟修改 fake 我的身份证号码一个难度
    fengdra
        2
    fengdra  
       2018-01-24 20:55:34 +08:00 via Android
    没学过计算机网络吧?
    blless
        3
    blless  
       2018-01-24 21:00:38 +08:00
    装一个假系统
    cevincheung
        4
    cevincheung  
       2018-01-24 21:01:25 +08:00
    无法伪造
    tomczhen
        5
    tomczhen  
       2018-01-24 21:02:04 +08:00   ❤️ 1
    直接用代理就能避开单纯 IP 限制,而且单纯通过 IP 限制以目前国内 ISP 大量分配内网 IP 的情况看,很容易误伤。

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

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

    或者简单点,客户端挂$$访问
    sherry00
        13
    sherry00  
    OP
       2018-01-24 23:06:58 +08:00 via iPhone
    感谢大佬们的建议(正在羞愧的看计算机网络....
    flynaj
        14
    flynaj  
       2018-01-25 08:35:23 +08:00 via Android
    RemoteAddr 是服务端参数,是你客户端的真实 ip,除非用代理
    julyclyde
        15
    julyclyde  
       2018-01-25 12:35:44 +08:00
    什么叫叫“传统的”方式?从来就没有这么个传统
    julyclyde
        16
    julyclyde  
       2018-01-25 12:35:58 +08:00
    现在写程序都不需要学习计算机基础了吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5953 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:10 · PVG 14:10 · LAX 22:10 · JFK 01:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.