原创

关于伪造ip的可行性

温馨提示:
本文最后更新于 2018年01月20日,已超过 2,454 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

今晚,用curl进一个网站发现ip被限制访问了,然后我又开始了百度伪造请求ip的方法

关于php获取ip的函数 http://www.php20.cn/article/sw/ip/77

php一般用3个参数去判断ip

X_FORWARDED_FOR:获取http请求头X_FORWARDED_FOR属性

HTTP_CLIENT_IP : 获取http请求头ip  CLIENT-IP属性

REMOTE_ADDR :与服务器握手的客户端ip

理解了这3个参数之后,我百度了下curl伪造ip

仙士可博客

然后我访问自己的网站的以下代码(本地局域网访问),

curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json; charset=utf-8;X-FORWARDED-FOR:111.222.333.4', 'CLIENT-IP:111.222.333.4'));
//上面这行是curl的,懒得写全,毕竟不在同一个文件

echo getenv('HTTP_CLIENT_IP'); 
echo getenv('HTTP_X_FORWARDED_FOR'); 
echo getenv('REMOTE_ADDR');

运行结果如下

仙士可博客

不难发现,REMOTE_ADDR 是正确的ip,该ip是tcp协议握手时的客户端ip,是不能伪造的 而X_FORWARDED_FOR已经是返回了自定义的值

总结以下:

用户的真实ip是无法伪造的,因为不管怎么样,都得建立tcp连接,

除非不建立tcp连接,直接经过tcp第一次握手返回一个错误的ip,不接受服务器的返回数据,这样才可以伪装一次tcp握手请求,

在正常的一次tcp连接,ip永远无法被伪造,如果没有ip,tcp连接将不成立,服务器将无法与客户端建立连接,无法发送和获取客户端的数据

在这结论之中,移动端关于使用数据流量时,虽然能获取到用户的真实ip,但这个ip,是手机与运营商基站建立连接之后,运营商给基站不定时分配的ip,只要是用户连接上了这个基站,那么所有连接这个基站的用户ip都会相同

再然后,由于REMOTE_ADDR是获取握手ip,如果使用跳板(代理服务器.服务器设定的cdn等)访问,则获取到的是代理服务器和cdn节点服务器的真实ip,而非用户的真实ip,至于用户的真实ip,代理服务器,和cdn节点是可以获取的

有人可能会问,那用户通过跳板访问,能获取到真实ip吗?

答案是不行的,除非跳板做好事,给服务器返回客户端的真实ip;一般跳板会用http头的X-FORWARDED-FOR属性进行返回用户的真实ip,而会不会返回,这就是跳板的问题了

总而言之,只要经过tcp握手成功后,都不可能伪装ip,只能说通过跳板去变动ip,而这个变动ip,也是不能自定义的,这个ip也是ip协议上一个合法的ip

正文到此结束
本文目录