217.33.193.179:3128 为透明代理。
11.11.11.11 为用户真实IP(打码)。
匿名代理无解,现希望在用户使用透明代理的情况下,正确获取他的真实IP。
nginx 相关设置:
uwsgi_param Host $host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
curl -x 217.33.193.179:3128 http://test.com
获取的META信息:
'HTTP_X_FORWARDED_FOR': '11.11.11.11'
'REMOTE_ADDR': '217.33.193.179'
'X-Real-IP': '217.33.193.179'
'X-Forwarded-For': '11.11.11.11, 217.33.193.179'
curl -x 217.33.193.179:3128 -H "X-Forwarded-For:192.168.0.1, 192.168.0.2" http://test.com
获取的META:
'HTTP_X_FORWARDED_FOR': '192.168.0.1, 192.168.0.2, 11.11.11.11'
'REMOTE_ADDR': '217.33.193.179'
'X-Real-IP': '217.33.193.179'
'X-Forwarded-For': '192.168.0.1, 192.168.0.2, 11.11.11.11, 217.33.193.179'
curl -H "X-Forwarded-For:192.168.0.1, 192.168.0.2" http://test.com
获取的META:
'HTTP_X_FORWARDED_FOR': '192.168.0.1, 192.168.0.2'
'REMOTE_ADDR': '11.11.11.11'
'X-Real-IP': '11.11.11.11'
'X-Forwarded-For': '192.168.0.1, 192.168.0.2, 11.11.11.11'
curl http://test.com
获取的META:
'HTTP_X_FORWARDED_FOR': None
'REMOTE_ADDR': '11.11.11.11'
'X-Real-IP': '11.11.11.11'
'X-Forwarded-For': '11.11.11.11'
1
oott123 2014-10-13 23:58:08 +08:00 via Android
不要信任任何 HTTP 头。
也就是说,直接用 remote address 吧。 鬼知道用户会不会伪装成一个透明代理? |
2
xingzhi OP @oott123 HTTP 头可伪造,但如果直接用REMOTE_ADDR的话,当使用透明代理时,就无法获取真实IP了,难度无解了?
|
3
oott123 2014-10-14 00:01:58 +08:00 via Android 1
@xingzhi 现在用透明代理的有几个啊…那都是上古的事情了吧。
说拿 IP,确实无解了,但用户的真实 IP 又有什么用呢?这可能有其它的方法来实现你的需求了。 |
5
cevincheung 2014-10-14 00:13:58 +08:00
从来都直接获取remote_addr,一直无视用户使用代理情况,误杀就误杀了。
|
6
joyqi 2014-10-14 00:44:34 +08:00 1
|
7
kevinv 2014-10-14 00:47:17 +08:00
曾经也曾被获取ip的问题折腾过,真心没有办法,只能换其他的思路去解决问题。
|
8
SoloCompany 2014-10-14 01:00:08 +08:00 1
https://code.google.com/p/xebia-france/wiki/RemoteIpValve
你看完这篇文字,理解了里面的 internalProxies 和 trustedProxies 大概就明白应该怎么做才能在得到真实IP和安全性(IP伪造)之间得到折衷了 |
9
zyx89513 2014-10-14 04:59:54 +08:00 1
如果你不介意付费的话, 可以试试这个产品 https://www.maxmind.com/en/proxy
|
10
cevincheung 2014-10-14 06:52:11 +08:00
@zyx89513 感觉这东西没用,临时搭建一批proxy太容易了
|
11
zyx89513 2014-10-14 07:57:40 +08:00
@cevincheung 那倒是, 可能他们是收集了一些主流的代理服务商把
|
12
z4213489 2014-10-14 09:53:08 +08:00
看场景吧
对真实性要求不高的可以用http头(部分伪造的可以忽略),如果真实性要求高的只能忽略代理情况直接用remote_addr了 |
13
jookr 2014-10-14 11:18:04 +08:00
只有REMOTE_ADDR伪造不了 不用这个还用哪个
|