通过手动修改 HTTP 请求头的方式可以轻易骗过服务器,达到所谓的“伪造”客户端 IP 地址的目的,这招并非对于所有的网站有效(这取决于服务器获取 ClientIP 的方式)。
问题,如何避免访问网站的服务器端获取到本地真实 ip 呢?
1
dallaslu 2016-01-08 08:59:56 +08:00
不如挂代理。
|
3
fxxkgw 2016-01-08 09:21:11 +08:00
X-Forwarded-For
|
5
Keita1314 2016-01-08 09:26:22 +08:00 1
这个只能用各种方法去测试服务端是通过哪种方式来判断的,然后去 hack ,但是永远也无法改变自己的真实 IP 地址,因为 TCP 连接是端到端的, 你要能接收到返回的信息,服务端始终需要知道你的真实 IP 。
|
6
dallaslu 2016-01-08 09:27:10 +08:00
醒醒吧。
|
7
lycos OP @Keita1314 修改访问网站的 ip 地址后,服务器端同时检测到修改 ip 和本地的。想让其只检测到修改过的不检测本地的 除了 hack 级别的方式 没别的方式吗?
|
8
Keita1314 2016-01-08 09:39:56 +08:00
@lycos 服务端的规则是它定的,你只能利用他们的规则。如果你是服务端的设计者,可以知道本地和修改的 IP ,你肯定用本地的。
|
10
imn1 2016-01-08 10:21:14 +08:00 1
http 先要 ip-ip 握手,或者 ip-proxy-ip
然后才是 http 数据( http 头数据就在这里)传输,如何伪造前面的握手 ip ? 改 http 只能测试服务器的程序的处理方式而已 你需要 tor |
12
fising 2016-01-08 10:30:32 +08:00
想要伪造请求来源,除非你要做的只是攻击,而不是抓内容。
|
15
TheCure 2016-01-08 10:34:08 +08:00
就算你 fake 了一个请求,服务器怎么把包还给你呢?除非你不希望与服务器继续通信
当然了,这只是理论,有的结构比较复杂的是设计,比如服务器在调度器后面,这样他是拿不到用户真实的 ip,他需要检查 http 的 x forwarded for 字段,这个字段本来应该是调度器加上的,但是如果你已经加了这个字段,有可能欺骗调度器或者服务器 |
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 建立连接 一段 |
20
mcfog 2016-01-08 10:52:58 +08:00
|
21
Havee 2016-01-08 10:55:31 +08:00
有些服务上了 cdn ,来路就基本都是那些 cdn 节点了
这个时候读 http head 省事 |
22
Shieffan 2016-01-08 11:01:10 +08:00
挂代理、 VPN
或者你修改本机 IP ,然后修改从本机 IP 到目标主机的所有路由设备的路由信息,以便它们能给你寻路,嗯,上帝模式。 |
25
gamexg 2016-01-08 11:34:08 +08:00 1
tcp 协议设计之初就考虑到会有楼主这种伪装 ip 的攻击,设计时就封堵的差不多了。
后期一些容易操作的有问题的设计(例如源端路由)也都被纠正了。 另外一些就是运营商才能做到的了。 |
26
Strikeactor 2016-01-08 11:36:29 +08:00
乖乖挂代理吧,这事你不是运营商就别想了
|
27
jin5354 2016-01-08 11:55:03 +08:00
各种代理和 VPN 就是专门做这个的。憋寻思别的了
|
29
lycos OP @Strikeactor 我当时是抱着等待高手的出现 看看高手有何高见的 。。现在看来是基本不可能了
|
30
TheCure 2016-01-08 12:38:20 +08:00
我来替 lz 总结一下
我是 lz 我的问题是白痴 你们回到不出我的问题,你们都不是高手 哈哈 |
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 也是这样。 |
33
Cloudee 2016-01-08 13:02:58 +08:00
可以认为是不可能的
简单理解的话,就是服务器总是要知道你的 IP 来发回复的信息的,所以这个用于发送返回信息的 IP 服务器肯定有办法知道,如果你骗过这个的话,服务器的回复也回复不到你这里了 而因为 TCP 握手是要交互几次的,因此也不存在你把请求丢过去不管返回的情况 |
34
mornlight 2016-01-08 13:10:48 +08:00 1
楼主你可以逆向思维一下,如果可以仅在客户端伪造来源 ip 的话,那防火墙的 ip 过滤规则还有什么用?
按目前的协议设计,想要用假 ip 又正常通信,是不可能的。 所谓的改请求头的方式,只是针对非匿名代理或者 CDN 这种(会自动在 HTTP 头里标明请求的源 ip )。很多网站后端取 ip 时会优先拿请求头里的源 ip 。 |
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 的,并不直接回复给你。 |
38
jasontse 2016-01-08 13:40:54 +08:00 via iPad
客户端 A: 你好我是客户端 B 。
服务器 A: 欢迎你,客户端 B 。 客户端 B: 莫名其妙,谁找我? 客户端 A: 尼玛! 服务器 A 不理我(其实招呼打到客户端 B 去了)。。。。 |
40
Cloudee 2016-01-08 17:12:52 +08:00 via iPhone
@mengzhuo 但是你要有可用的代理,并且代理是知道你的 ip 的,因此你还要代理不通过 http 头泄露你的真实 ip
|
41
jugelizi 2016-01-08 17:20:02 +08:00
好比你让儿子去邻居老王家借点盐,儿子刚出名你就把门给封了,不想让他回来
这个,,,当然也是可以的 |
42
iyangyuan 2016-01-08 18:24:17 +08:00 via iPhone
这只能用代理,否则怎么通信?
|
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 。 |