V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
monkeyWie
V2EX  ›  宽带症候群

不懂就问,有没有办法能实现在通过代理服务器访问时,让服务器拿到客户端的 ip 而不是代理服务器的

  •  
  •   monkeyWie · 2020-03-27 18:21:45 +08:00 · 3120 次点击
    这是一个创建于 1694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如客户端 ip 是 1.1.1.1,通过一个 HTTP 代理服务器 2.2.2.2 访问 www.baidu.com ,百度获取到我的客户端 ip 是 2.2.2.2,有没有办法让百度拿到客户端的 ip 1.1.1.1 呢?

    在应用层伪造 HTTP 请求头(x-forwarded-for)基本上是不行的,能不能改变 TCP 上的源 ip 来实现呢?

    33 条回复    2020-03-29 01:30:28 +08:00
    ThirdFlame
        1
    ThirdFlame  
       2020-03-27 18:29:09 +08:00
    如果代理 给你发来了 x-forwarded-for,那么可以参考这个值。

    改变 tcp 源 IP,那你服务器数据回复到哪里呢。

    再说一点,不用代理了。用梯子,你怎么找到源 ip 。 所以请放弃 挣扎。
    jangit
        2
    jangit  
       2020-03-27 18:31:08 +08:00 via iPhone
    不大可能呢
    代理后面的客户端说不定是内网地址呢
    monkeyWie
        3
    monkeyWie  
    OP
       2020-03-27 18:32:46 +08:00
    @ThirdFlame 额,可能我没太说明白,我现在的角色是客户端和代理服务器,就是想让别人知道我的真实 ip,而不是代理服务器 ip
    monkeyWie
        4
    monkeyWie  
    OP
       2020-03-27 18:35:10 +08:00
    @jangit 客户端出网是外网 ip 呀,代理服务器和客户端不是一个局域网下的,代理服务器单独部署在外网。
    yaoliyc
        5
    yaoliyc  
       2020-03-27 18:35:46 +08:00 via iPhone
    代理服务器转发可以拿到,不转发拿不到
    CallMeReznov
        6
    CallMeReznov  
       2020-03-27 18:41:31 +08:00
    WebRTC 可以拿到,不过也可以关闭
    Tianao
        7
    Tianao  
       2020-03-27 18:43:50 +08:00   ❤️ 1
    只要你可以控制代理服务器,代理服务器就可以伪造源 IP,但伪造生成的 IP 报文能不能被路由到目标服务器,又能不能从目标服务器被路由回来就看你本事了,这里的本事就是操纵 IP 路由的本事。比如这两天闹得沸沸扬扬的中间人攻击事件的攻击者就有这个本事。
    wwbfred
        8
    wwbfred  
       2020-03-27 18:48:55 +08:00
    没试过,理论上应该可以做到,但为了满足需求可能要动内核,且回程必定是直连.
    你可以先试试 iptables 在本地和代理各做一次 DNAT,不要 SNAT,然后看看本地是怎么对待返回包的.
    geekvcn
        9
    geekvcn  
       2020-03-27 19:28:38 +08:00
    楼主需求,我想要快递直接把货送到我家里,但是不想让快递知道我在哪个小区,怎么办
    hshpy
        10
    hshpy  
       2020-03-27 19:30:42 +08:00
    请求头不可信,除非你控制得了代理服务器,不然拿不到。
    cyberpoint
        11
    cyberpoint  
       2020-03-27 19:31:54 +08:00
    做梦
    unixeno
        12
    unixeno  
       2020-03-27 19:40:34 +08:00 via Android
    如果代理服务器和目标服务器都是你控制的话,可以
    jugelizi
        13
    jugelizi  
       2020-03-27 19:42:29 +08:00 via iPhone   ❤️ 1
    好比你叫了一个跑腿的 去超市买袋米 跑腿的买米自己付钱 拿回来给你 请问超市怎么知道你在买米?
    Vhc001
        14
    Vhc001  
       2020-03-27 19:43:39 +08:00
    TCP 不行,服务器拿到的 100%是真实 IP (就是你代理服务器的 IP )
    UDP 可以
    ALLLi
        15
    ALLLi  
       2020-03-27 19:45:39 +08:00 via Android
    @Vhc001 TCP 可以,OPTION 头几年可以记录真实 IP
    Vhc001
        16
    Vhc001  
       2020-03-27 19:47:57 +08:00
    @ALLLi #15 那你挂全局代理访问百度试试
    guoqiyi
        17
    guoqiyi  
       2020-03-27 19:53:54 +08:00
    真有这技术,本站不少人早被请去喝茶了
    Raynard
        18
    Raynard  
       2020-03-27 19:55:55 +08:00
    能,

    挂全局还能获取真实 ip,环境是常规电脑,不做其它匿名操作

    不知道怎么实现的
    ThirdFlame
        20
    ThirdFlame  
       2020-03-27 20:04:51 +08:00
    @monkeyWie 那你的代理 就加 x-forwarded-for 即可。服务器端如果认可这个就 ok 了。
    但是 由于 x-forwarded-for 可以伪造,所以好多服务器端已经不认这个了。

    那么你可以和服务器端协商一个 header,代理用这个 header 写上客户端 ip,发给我服务器端即可。
    ALLLi
        21
    ALLLi  
       2020-03-27 20:05:15 +08:00 via Android
    肯定是自己的代理服务器才可以,别人的不行
    jim9606
        22
    jim9606  
       2020-03-27 20:07:18 +08:00
    你是希望你要访问的站点直到客户端真实 IP 吧
    HTTP 层面就是 X-Forward-For: client,proxy1,proxy2...
    但是代理服务器(客户控制的)可以伪造这个头,所以站点认不认这个头要看情况
    很多时候站点知道客户端真实 IP 并没有什么用,例如你客户端用的是私有地址
    whywhywhy
        23
    whywhywhy  
       2020-03-27 20:12:38 +08:00 via Android
    如果目标服务器是你的,有办法,如果不是你的,早点休息,晚安
    xcstream
        24
    xcstream  
       2020-03-27 20:20:40 +08:00
    普通需求 x-forwarded-for 可以
    伪不伪造是另一个问题,需要加密协议
    Vhc001
        25
    Vhc001  
       2020-03-27 21:12:37 +08:00
    @ALLLi #19 受教 [抱拳]
    yulihao
        26
    yulihao  
       2020-03-28 09:24:57 +08:00
    如一楼,除了 x-forwarded-for,没有其他办法
    楼主在搞 DoH ?
    monkeyWie
        27
    monkeyWie  
    OP
       2020-03-28 09:31:44 +08:00 via Android
    @Raynard 有例子吗?
    monkeyWie
        28
    monkeyWie  
    OP
       2020-03-28 09:35:25 +08:00 via Android
    @yulihao x-forwarded-for 不行啊,目标服务器基本都是直接拿的 remote_ip
    cdh1075
        29
    cdh1075  
       2020-03-28 16:16:42 +08:00
    改一下代理服务器上代理程序的源代码和 iptables 脚本,把所有来自 1.1.1.1 去往百度的数据包的源 ip 都改成 1.1.1.1,这是唯一的办法
    其他人所说的办法只是百度可以那样干,但百度并没有那样干,想让百度那样干只有改百度的代码,但你的条件中说你的角色是客户端和代理服务器,很显然改不了百度的代码
    百度的代码只看一样东西,就是数据包的源 ip,既然你改变不了百度,只能把 1.1.1.1 写在那
    cdh1075
        30
    cdh1075  
       2020-03-28 16:18:52 +08:00
    另外记得客户端的代理程序和 iptables 也要做相应的适应性更改
    fan88
        31
    fan88  
       2020-03-28 19:31:53 +08:00 via Android
    那必然是不可能的,即使你通过 iptables 或者别的东西做 nat 把 TCP 数据包的源 IP 改了。
    一旦源 IP 改了,数据包不会返回给你的代理服务器,而是直接去客户端了。
    你的客户端收到这个数据包以后会丢弃他,客户端建立连接的对象是代理服务器。
    WuhuiMurong
        32
    WuhuiMurong  
       2020-03-29 01:29:39 +08:00
    @Raynard l 浏览器的 webRTC...
    WuhuiMurong
        33
    WuhuiMurong  
       2020-03-29 01:30:28 +08:00
    浏览器 WebRTC 很容易泄露
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:35 · PVG 10:35 · LAX 18:35 · JFK 21:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.