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

关于修改 HTTP 请求头问题

  •  
  •   lycos · 2016-01-08 08:45:02 +08:00 · 6347 次点击
    这是一个创建于 3036 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过手动修改 HTTP 请求头的方式可以轻易骗过服务器,达到所谓的“伪造”客户端 IP 地址的目的,这招并非对于所有的网站有效(这取决于服务器获取 ClientIP 的方式)。
    问题,如何避免访问网站的服务器端获取到本地真实 ip 呢?

    46 条回复    2016-01-09 10:03:11 +08:00
    dallaslu
        1
    dallaslu  
       2016-01-08 08:59:56 +08:00
    不如挂代理。
    lycos
        2
    lycos  
    OP
       2016-01-08 09:06:52 +08:00
    @dallaslu 对于限制地址的网站 有没有什么方式让其识别为它地址范围内的呢?
    fxxkgw
        3
    fxxkgw  
       2016-01-08 09:21:11 +08:00
    X-Forwarded-For
    lycos
        4
    lycos  
    OP
       2016-01-08 09:25:08 +08:00
    @fxxkgw 修改相应的 ip 后,但是百度搜出来的地址还是本地的。。如何能让百度搜出来的也是改过的 ip 呢?
    Keita1314
        5
    Keita1314  
       2016-01-08 09:26:22 +08:00   ❤️ 1
    这个只能用各种方法去测试服务端是通过哪种方式来判断的,然后去 hack ,但是永远也无法改变自己的真实 IP 地址,因为 TCP 连接是端到端的, 你要能接收到返回的信息,服务端始终需要知道你的真实 IP 。
    dallaslu
        6
    dallaslu  
       2016-01-08 09:27:10 +08:00
    醒醒吧。
    lycos
        7
    lycos  
    OP
       2016-01-08 09:32:11 +08:00
    @Keita1314 修改访问网站的 ip 地址后,服务器端同时检测到修改 ip 和本地的。想让其只检测到修改过的不检测本地的 除了 hack 级别的方式 没别的方式吗?
    Keita1314
        8
    Keita1314  
       2016-01-08 09:39:56 +08:00
    @lycos 服务端的规则是它定的,你只能利用他们的规则。如果你是服务端的设计者,可以知道本地和修改的 IP ,你肯定用本地的。
    lycos
        9
    lycos  
    OP
       2016-01-08 09:44:20 +08:00
    @Keita1314 恩 是的,没有突破服务端规则的方式吗?让它只识别修改的?
    imn1
        10
    imn1  
       2016-01-08 10:21:14 +08:00   ❤️ 1
    http 先要 ip-ip 握手,或者 ip-proxy-ip
    然后才是 http 数据( http 头数据就在这里)传输,如何伪造前面的握手 ip ?
    改 http 只能测试服务器的程序的处理方式而已

    你需要 tor
    lycos
        11
    lycos  
    OP
       2016-01-08 10:29:07 +08:00
    @imn1 专业!
    fising
        12
    fising  
       2016-01-08 10:30:32 +08:00
    想要伪造请求来源,除非你要做的只是攻击,而不是抓内容。
    lycos
        13
    lycos  
    OP
       2016-01-08 10:31:11 +08:00
    @imn1 可否在详细的说下?一些很专业的知识目前还不太懂
    lycos
        14
    lycos  
    OP
       2016-01-08 10:33:06 +08:00
    @fising 不做攻击的。。
    TheCure
        15
    TheCure  
       2016-01-08 10:34:08 +08:00
    就算你 fake 了一个请求,服务器怎么把包还给你呢?除非你不希望与服务器继续通信

    当然了,这只是理论,有的结构比较复杂的是设计,比如服务器在调度器后面,这样他是拿不到用户真实的 ip,他需要检查 http 的 x forwarded for 字段,这个字段本来应该是调度器加上的,但是如果你已经加了这个字段,有可能欺骗调度器或者服务器
    lycos
        16
    lycos  
    OP
       2016-01-08 10:41:05 +08:00
    @callofmx 服务器端怎么设计我不知道 但是肯定的服务器现在能检测到本地的 。
    fising
        17
    fising  
       2016-01-08 10:44:47 +08:00
    @lycos 了解 TCP 协议的话,就不会问这个问题了。
    lycos
        18
    lycos  
    OP
       2016-01-08 10:47:24 +08:00
    @fising 恩 没深入了解过。。
    imn1
        19
    imn1  
       2016-01-08 10:48:27 +08:00
    @lycos
    我不专业,专业的没啥时间来回答你而已,例如 5L ,我只是比较闲
    具体你可以去 wiki/google TCP 握手,或者看看 socket-http 程序
    https://zh.wikipedia.org/wiki/%E4%BC%A0%E8%BE%93%E6%8E%A7%E5%88%B6%E5%8D%8F%E8%AE%AE 建立连接 一段
    mcfog
        20
    mcfog  
       2016-01-08 10:52:58 +08:00
    Havee
        21
    Havee  
       2016-01-08 10:55:31 +08:00
    有些服务上了 cdn ,来路就基本都是那些 cdn 节点了
    这个时候读 http head 省事
    Shieffan
        22
    Shieffan  
       2016-01-08 11:01:10 +08:00
    挂代理、 VPN



    或者你修改本机 IP ,然后修改从本机 IP 到目标主机的所有路由设备的路由信息,以便它们能给你寻路,嗯,上帝模式。
    lycos
        23
    lycos  
    OP
       2016-01-08 11:02:57 +08:00
    @mcfog 服务端不是我控制的
    lycos
        24
    lycos  
    OP
       2016-01-08 11:11:25 +08:00
    @Shieffan 修改了本机 ip 不可行的
    gamexg
        25
    gamexg  
       2016-01-08 11:34:08 +08:00   ❤️ 1
    tcp 协议设计之初就考虑到会有楼主这种伪装 ip 的攻击,设计时就封堵的差不多了。
    后期一些容易操作的有问题的设计(例如源端路由)也都被纠正了。

    另外一些就是运营商才能做到的了。
    Strikeactor
        26
    Strikeactor  
       2016-01-08 11:36:29 +08:00
    乖乖挂代理吧,这事你不是运营商就别想了
    jin5354
        27
    jin5354  
       2016-01-08 11:55:03 +08:00
    各种代理和 VPN 就是专门做这个的。憋寻思别的了
    lycos
        28
    lycos  
    OP
       2016-01-08 11:56:30 +08:00
    @jin5354 恩恩 这个问题问的有点白痴了。。 基本是不可能做到的
    lycos
        29
    lycos  
    OP
       2016-01-08 11:57:18 +08:00
    @Strikeactor 我当时是抱着等待高手的出现 看看高手有何高见的 。。现在看来是基本不可能了
    TheCure
        30
    TheCure  
       2016-01-08 12:38:20 +08:00
    我来替 lz 总结一下

    我是 lz
    我的问题是白痴
    你们回到不出我的问题,你们都不是高手

    哈哈
    lycos
        31
    lycos  
    OP
       2016-01-08 12:41:48 +08:00
    @callofmx haha.... 大家回答的都很专业 只是我不专业..
    just1
        32
    just1  
       2016-01-08 13:02:47 +08:00 via Android   ❤️ 1
    REMOTE_ADDR 是无法伪造的
    当使用了 cdn , REMOTE_ADDR 是 cdn 的 ip 。
    但是 cdn 一般会传回一个客户的真实 ip 在 header 里。
    比如 cf:HTTP_CF_CONNECTING_IP 就是 cdn 接受到的 remote_addr(也就是客户的真实 ip)。
    所以隐藏是不太可能的。
    但可以这样:穿透 cdn 找到源站 ip(虽然不容易,却也不是没办法), hosts 指向。在每次请求头加入"HTTP_CF_CONNECTING_IP",当然如果对方限制了仅 cdnip 可访问那就没办法了。
    但是,这是根据程序逻辑来的,有的网站只获取 xff 并不校验,那修改 xff 就够了,同理 clientip 也是这样。
    Cloudee
        33
    Cloudee  
       2016-01-08 13:02:58 +08:00
    可以认为是不可能的

    简单理解的话,就是服务器总是要知道你的 IP 来发回复的信息的,所以这个用于发送返回信息的 IP 服务器肯定有办法知道,如果你骗过这个的话,服务器的回复也回复不到你这里了

    而因为 TCP 握手是要交互几次的,因此也不存在你把请求丢过去不管返回的情况
    mornlight
        34
    mornlight  
       2016-01-08 13:10:48 +08:00   ❤️ 1
    楼主你可以逆向思维一下,如果可以仅在客户端伪造来源 ip 的话,那防火墙的 ip 过滤规则还有什么用?

    按目前的协议设计,想要用假 ip 又正常通信,是不可能的。

    所谓的改请求头的方式,只是针对非匿名代理或者 CDN 这种(会自动在 HTTP 头里标明请求的源 ip )。很多网站后端取 ip 时会优先拿请求头里的源 ip 。
    mengzhuo
        35
    mengzhuo  
       2016-01-08 13:27:27 +08:00
    @mornlight
    @Cloudee

    各种 sock_proxy 、 http_proxy 不就是改 IP 源么?
    Cloudee
        36
    Cloudee  
       2016-01-08 13:31:56 +08:00
    @mengzhuo 那是代理服务器做了中转。比如网站 B 和代理服务器 A ,你连 A , A 连 B ,对于你来说你只跟 A 交互,对于 B 来说, A 才是自己的客户。
    并不是你的数据包直接用 A 的 IP 发过去了,而你你把数据包发给 A , A 把数据包原样用自己的 IP 发给 B 了。这个时候 B 回复是回复给 A 的,并不直接回复给你。
    lycos
        37
    lycos  
    OP
       2016-01-08 13:39:54 +08:00
    @Cloudee 所以这个过程是服务端既获取到 A 的 ip , 又识别了数据包头的源 ip
    jasontse
        38
    jasontse  
       2016-01-08 13:40:54 +08:00 via iPad
    客户端 A: 你好我是客户端 B 。
    服务器 A: 欢迎你,客户端 B 。
    客户端 B: 莫名其妙,谁找我?
    客户端 A: 尼玛! 服务器 A 不理我(其实招呼打到客户端 B 去了)。。。。
    mengzhuo
        39
    mengzhuo  
       2016-01-08 16:38:15 +08:00
    @Cloudee

    对啊,不就是这么个意思吗?
    Cloudee
        40
    Cloudee  
       2016-01-08 17:12:52 +08:00 via iPhone
    @mengzhuo 但是你要有可用的代理,并且代理是知道你的 ip 的,因此你还要代理不通过 http 头泄露你的真实 ip
    jugelizi
        41
    jugelizi  
       2016-01-08 17:20:02 +08:00
    好比你让儿子去邻居老王家借点盐,儿子刚出名你就把门给封了,不想让他回来
    这个,,,当然也是可以的
    iyangyuan
        42
    iyangyuan  
       2016-01-08 18:24:17 +08:00 via iPhone
    这只能用代理,否则怎么通信?
    simpx
        43
    simpx  
       2016-01-08 19:16:19 +08:00
    你给对方寄了一个快递,盒子上写了你的地址 A ,盒子里附带了一封信,写着『我家住在地址 B 』,对方给你回寄东西的时候,如果地址 A 是错的,那你就收不到东西了。但对方在登记你的信息的时候,有时候会傻傻的用你盒子里的信里声明的地址 B 。

    你给对方发了一个 HTTP 请求, ip 协议里写了你的 ip 地址 A , HTTP 请求头里伪造了 ip 地址 B 。服务端始终回复数据给地址 A ,伪造地址 A 会导致你收不到服务端响应。但很多 web server 在记录你的 ip 信息时,会省事使用 HTTP 请求头里的 ip 地址 B 。
    simpx
        44
    simpx  
       2016-01-08 19:17:00 +08:00
    @simpx 想要对方不知道你真实地址,在现实的例子中,你可以用『菜鸟驿站』,也就是代理
    msg7086
        45
    msg7086  
       2016-01-09 00:12:00 +08:00
    #39 @mengzhuo 不是改源 IP ,而是重新定义了连接。
    本来网络连接是从你到服务器,现在变成了从代理到服务器。
    源 IP 还是连接的这一头,也就是代理的 IP 。
    这不是伪造源 IP ,因为你的数据的确就是从源 IP ,也就是代理,发出去的。
    mengzhuo
        46
    mengzhuo  
       2016-01-09 10:03:11 +08:00
    @Cloudee
    @msg7086

    你们说的都是对客户端来讲的,对服务器来说,源 IP 不一样了嘛,这样不就是 OP 的原始诉求了么?
    其实常见的生活中 NAT 也是一种“改源 IP ”的方法。
    当然,要是能控制 AS , L3 级的更改也不是事了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1282 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:16 · PVG 01:16 · LAX 10:16 · JFK 13:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.