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

2020-03-27 18:21:45 +08:00
 monkeyWie

例如客户端 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 来实现呢?

3015 次点击
所在节点    宽带症候群
33 条回复
ALLLi
2020-03-27 20:05:15 +08:00
肯定是自己的代理服务器才可以,别人的不行
jim9606
2020-03-27 20:07:18 +08:00
你是希望你要访问的站点直到客户端真实 IP 吧
HTTP 层面就是 X-Forward-For: client,proxy1,proxy2...
但是代理服务器(客户控制的)可以伪造这个头,所以站点认不认这个头要看情况
很多时候站点知道客户端真实 IP 并没有什么用,例如你客户端用的是私有地址
whywhywhy
2020-03-27 20:12:38 +08:00
如果目标服务器是你的,有办法,如果不是你的,早点休息,晚安
xcstream
2020-03-27 20:20:40 +08:00
普通需求 x-forwarded-for 可以
伪不伪造是另一个问题,需要加密协议
Vhc001
2020-03-27 21:12:37 +08:00
@ALLLi #19 受教 [抱拳]
yulihao
2020-03-28 09:24:57 +08:00
如一楼,除了 x-forwarded-for,没有其他办法
楼主在搞 DoH ?
monkeyWie
2020-03-28 09:31:44 +08:00
@Raynard 有例子吗?
monkeyWie
2020-03-28 09:35:25 +08:00
@yulihao x-forwarded-for 不行啊,目标服务器基本都是直接拿的 remote_ip
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
2020-03-28 16:18:52 +08:00
另外记得客户端的代理程序和 iptables 也要做相应的适应性更改
fan88
2020-03-28 19:31:53 +08:00
那必然是不可能的,即使你通过 iptables 或者别的东西做 nat 把 TCP 数据包的源 IP 改了。
一旦源 IP 改了,数据包不会返回给你的代理服务器,而是直接去客户端了。
你的客户端收到这个数据包以后会丢弃他,客户端建立连接的对象是代理服务器。
WuhuiMurong
2020-03-29 01:29:39 +08:00
@Raynard l 浏览器的 webRTC...
WuhuiMurong
2020-03-29 01:30:28 +08:00
浏览器 WebRTC 很容易泄露

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/656890

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX