例如客户端 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 来实现呢?
1
ThirdFlame 2020-03-27 18:29:09 +08:00
如果代理 给你发来了 x-forwarded-for,那么可以参考这个值。
改变 tcp 源 IP,那你服务器数据回复到哪里呢。 再说一点,不用代理了。用梯子,你怎么找到源 ip 。 所以请放弃 挣扎。 |
2
jangit 2020-03-27 18:31:08 +08:00 via iPhone
不大可能呢
代理后面的客户端说不定是内网地址呢 |
3
monkeyWie OP @ThirdFlame 额,可能我没太说明白,我现在的角色是客户端和代理服务器,就是想让别人知道我的真实 ip,而不是代理服务器 ip
|
5
yaoliyc 2020-03-27 18:35:46 +08:00 via iPhone
代理服务器转发可以拿到,不转发拿不到
|
6
CallMeReznov 2020-03-27 18:41:31 +08:00
WebRTC 可以拿到,不过也可以关闭
|
7
Tianao 2020-03-27 18:43:50 +08:00 1
只要你可以控制代理服务器,代理服务器就可以伪造源 IP,但伪造生成的 IP 报文能不能被路由到目标服务器,又能不能从目标服务器被路由回来就看你本事了,这里的本事就是操纵 IP 路由的本事。比如这两天闹得沸沸扬扬的中间人攻击事件的攻击者就有这个本事。
|
8
wwbfred 2020-03-27 18:48:55 +08:00
没试过,理论上应该可以做到,但为了满足需求可能要动内核,且回程必定是直连.
你可以先试试 iptables 在本地和代理各做一次 DNAT,不要 SNAT,然后看看本地是怎么对待返回包的. |
9
geekvcn 2020-03-27 19:28:38 +08:00
楼主需求,我想要快递直接把货送到我家里,但是不想让快递知道我在哪个小区,怎么办
|
10
hshpy 2020-03-27 19:30:42 +08:00
请求头不可信,除非你控制得了代理服务器,不然拿不到。
|
11
cyberpoint 2020-03-27 19:31:54 +08:00
做梦
|
12
unixeno 2020-03-27 19:40:34 +08:00 via Android
如果代理服务器和目标服务器都是你控制的话,可以
|
13
jugelizi 2020-03-27 19:42:29 +08:00 via iPhone 1
好比你叫了一个跑腿的 去超市买袋米 跑腿的买米自己付钱 拿回来给你 请问超市怎么知道你在买米?
|
14
Vhc001 2020-03-27 19:43:39 +08:00
TCP 不行,服务器拿到的 100%是真实 IP (就是你代理服务器的 IP )
UDP 可以 |
17
guoqiyi 2020-03-27 19:53:54 +08:00
真有这技术,本站不少人早被请去喝茶了
|
18
Raynard 2020-03-27 19:55:55 +08:00
能,
挂全局还能获取真实 ip,环境是常规电脑,不做其它匿名操作 不知道怎么实现的 |
19
ALLLi 2020-03-27 20:04:46 +08:00 via Android
|
20
ThirdFlame 2020-03-27 20:04:51 +08:00
@monkeyWie 那你的代理 就加 x-forwarded-for 即可。服务器端如果认可这个就 ok 了。
但是 由于 x-forwarded-for 可以伪造,所以好多服务器端已经不认这个了。 那么你可以和服务器端协商一个 header,代理用这个 header 写上客户端 ip,发给我服务器端即可。 |
21
ALLLi 2020-03-27 20:05:15 +08:00 via Android
肯定是自己的代理服务器才可以,别人的不行
|
22
jim9606 2020-03-27 20:07:18 +08:00
你是希望你要访问的站点直到客户端真实 IP 吧
HTTP 层面就是 X-Forward-For: client,proxy1,proxy2... 但是代理服务器(客户控制的)可以伪造这个头,所以站点认不认这个头要看情况 很多时候站点知道客户端真实 IP 并没有什么用,例如你客户端用的是私有地址 |
23
whywhywhy 2020-03-27 20:12:38 +08:00 via Android
如果目标服务器是你的,有办法,如果不是你的,早点休息,晚安
|
24
xcstream 2020-03-27 20:20:40 +08:00
普通需求 x-forwarded-for 可以
伪不伪造是另一个问题,需要加密协议 |
26
yulihao 2020-03-28 09:24:57 +08:00
如一楼,除了 x-forwarded-for,没有其他办法
楼主在搞 DoH ? |
28
monkeyWie OP @yulihao x-forwarded-for 不行啊,目标服务器基本都是直接拿的 remote_ip
|
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 写在那 |
30
cdh1075 2020-03-28 16:18:52 +08:00
另外记得客户端的代理程序和 iptables 也要做相应的适应性更改
|
31
fan88 2020-03-28 19:31:53 +08:00 via Android
那必然是不可能的,即使你通过 iptables 或者别的东西做 nat 把 TCP 数据包的源 IP 改了。
一旦源 IP 改了,数据包不会返回给你的代理服务器,而是直接去客户端了。 你的客户端收到这个数据包以后会丢弃他,客户端建立连接的对象是代理服务器。 |
32
WuhuiMurong 2020-03-29 01:29:39 +08:00
@Raynard l 浏览器的 webRTC...
|
33
WuhuiMurong 2020-03-29 01:30:28 +08:00
浏览器 WebRTC 很容易泄露
|