扫码关注官方订阅号
如果被封IP了,怎么模拟其它IP?
人生最曼妙的风景,竟是内心的淡定与从容!
基本两个种情况吧1.http header 考虑一下对方是如何取IP并封禁的。网上很多取IP的方法是先考虑陛 x-forward-for, x-real-ip 这些代理http头,取不到才会取 remote_addr这个tcp建连的真实IP。所以如果对方是一个懒散的程序员,可以手工设置这些头来试一试,看是否能够突破。
2.http proxy 当然,很多被搞过的站都有过类似经历,封禁用的IP大多会用tcp建连的IP,这时候你就需要找一些代理来用了。当然网上有一大堆免费代理,只是寿命都不长,而且稳定性堪忧。如果你是长期干这个事,推荐你自己维护一个代理库。
方法: 抓取:找一些提供免费代理的站点,写爬虫去抓上面的代理IP和端口。检测可用性然后入库。 过滤:另一个独立进程定时遍历这些代理,发现有不可用的就踢出库。 这样两个线程一起协同工作,一个抓取,一个过滤。基本就能给你提供一个相对稳定的代理IP库。 我现在就这样搞的,只跑了两个单线程,抓了四五个站,目前基本可用的代理大概在2000个左右。
php<?php function getIPaddress() { $IPaddress = ''; if (isset($_SERVER)) { if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { $IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $IPaddress = $_SERVER["HTTP_CLIENT_IP"]; } else { $IPaddress = $_SERVER["REMOTE_ADDR"]; } } else { if (getenv("HTTP_X_FORWARDED_FOR")) { $IPaddress = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("HTTP_CLIENT_IP")) { $IPaddress = getenv("HTTP_CLIENT_IP"); } else { $IPaddress = getenv("REMOTE_ADDR"); } } return $IPaddress; } $ip = getIPaddress(); $url = 'http://www.baidu.com'; $curl = curl_init($url); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.81 Chrome/43.0.2357.81 Safari/537.36"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip, 'Host: www.baidu.com')); //构造IP $result = curl_exec($curl); $code = curl_getinfo($curl,CURLINFO_HTTP_CODE); curl_close($curl); echo $result;
php
<?php function getIPaddress() { $IPaddress = ''; if (isset($_SERVER)) { if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { $IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $IPaddress = $_SERVER["HTTP_CLIENT_IP"]; } else { $IPaddress = $_SERVER["REMOTE_ADDR"]; } } else { if (getenv("HTTP_X_FORWARDED_FOR")) { $IPaddress = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("HTTP_CLIENT_IP")) { $IPaddress = getenv("HTTP_CLIENT_IP"); } else { $IPaddress = getenv("REMOTE_ADDR"); } } return $IPaddress; } $ip = getIPaddress(); $url = 'http://www.baidu.com'; $curl = curl_init($url); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.81 Chrome/43.0.2357.81 Safari/537.36"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip, 'Host: www.baidu.com')); //构造IP $result = curl_exec($curl); $code = curl_getinfo($curl,CURLINFO_HTTP_CODE); curl_close($curl); echo $result;
这是之前抓取别人数据时候写的,你可以参考一下,就是获取用户IP,然后伪造用户的IP去访问站点抓取数据,成功突破限制
function curlPost($url, $post='', $autoFollow=0){ $ch = curl_init(); $user_agent = 'Safari Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/5 curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); // 2. 设置选项,包括URL curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:61.135.169.125', 'CLIENT-IP:61.135.169.125')); //构造IP curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com/"); //构造来路 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); if($autoFollow){ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //启动跳转链接 curl_setopt($ch, CURLOPT_AUTOREFERER, true); //多级自动跳转 } // if($post!=''){ curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); curl_close($ch); return $output; }
CURLOPT_HTTPHEADER,
写爬虫必备,百试不爽
唉,就是你们这些人啊,我们每天被广告的东西烦死,真心防不胜防
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
基本两个种情况吧
1.http header
考虑一下对方是如何取IP并封禁的。网上很多取IP的方法是先考虑陛 x-forward-for, x-real-ip 这些代理http头,取不到才会取 remote_addr这个tcp建连的真实IP。所以如果对方是一个懒散的程序员,可以手工设置这些头来试一试,看是否能够突破。
2.http proxy
当然,很多被搞过的站都有过类似经历,封禁用的IP大多会用tcp建连的IP,这时候你就需要找一些代理来用了。当然网上有一大堆免费代理,只是寿命都不长,而且稳定性堪忧。如果你是长期干这个事,推荐你自己维护一个代理库。
方法:
抓取:找一些提供免费代理的站点,写爬虫去抓上面的代理IP和端口。检测可用性然后入库。
过滤:另一个独立进程定时遍历这些代理,发现有不可用的就踢出库。
这样两个线程一起协同工作,一个抓取,一个过滤。基本就能给你提供一个相对稳定的代理IP库。
我现在就这样搞的,只跑了两个单线程,抓了四五个站,目前基本可用的代理大概在2000个左右。
这是之前抓取别人数据时候写的,你可以参考一下,就是获取用户IP,然后伪造用户的IP去访问站点抓取数据,成功突破限制
CURLOPT_HTTPHEADER,
写爬虫必备,百试不爽
唉,就是你们这些人啊,我们每天被广告的东西烦死,真心防不胜防