关于伪造ip的可行性

举报
仙士可 发表于 2023/06/14 11:40:58 2023/06/14
【摘要】 今晚,用curl进一个网站发现ip被限制访问了,然后我又开始了百度伪造请求ip的方法关于php获取ip的函数 http://www.php20.cn/article/sw/ip/77php一般用3个参数去判断ipX_FORWARDED_FOR:获取http请求头X_FORWARDED_FOR属性HTTP_CLIENT_IP : 获取http请求头ip  CLIENT-IP属性REMOTE_A...

今晚,用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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。