PHP实现抓取Google IP并自动修改hosts文件


Posted in PHP onFebruary 12, 2015

无聊中居然又找到个php版本的抓取google hosts的文件,试了下还可以用,ping了下ip,延迟也不是很高,网页打开测试了下速度也很快,大家有兴趣的话可以试试.

自动更新hosts文件, 不覆盖已存在的记录,方便使用,不用每次都 复制->打开hosts文件->粘贴。

php文件:

<?php
/**
 * 免翻墙上google
 * @author 自娱自乐自逍遥 <wapznw@gmail.com>
 * Date: 2015/2/6
 * Time: 11:42
*/

define('START_TAG','#google-hosts-2015');
define('END_TAG','#google-hosts-2015-end');
if(!empty($argv[1])){
 $params = array();
 parse_str($argv[1], $params);
if(isset($params['url'])){
 define('GOOGLE_HOST_URL', $params['url']);
}
if(isset($params['del'])){
define('DELETE_GOOGLE_HOST',true);
}
}
defined('GOOGLE_HOST_URL') || define('GOOGLE_HOST_URL', 'http://www.360kb.com/kb/2_150.html');

if(PHP_OS == 'WINNT'){
 define('HOSTS_FILE_PATH', 'C:WindowsSystem32driversetchosts');
}else if(in_array(PHP_OS, array('Linux','Darwin','FreeBSD','OpenBSD','WIN32','Windows','Unix'))){
 define('HOSTS_FILE_PATH', '/etc/hosts');
}else{
 die('Unsupported system!'.PHP_EOL);
}

if(!is_writable(HOSTS_FILE_PATH)){
 die('Without permission, please use the root user to perform!'.PHP_EOL);
}

$hosts = file_get_contents(HOSTS_FILE_PATH);

$startPos = strpos($hosts, START_TAG);
if(!defined('DELETE_GOOGLE_HOST')){
 $gs = get_google_hosts();
 echo GOOGLE_HOST_URL.PHP_EOL;
 echo $gs.PHP_EOL;
}else{
 $gs = '';
 echo 'reset hosts'.PHP_EOL;
}

if($startPos){
 $_tmp = substr($hosts, $startPos, strpos($hosts, END_TAG) - $startPos + strlen(END_TAG));
 $hosts = str_replace($_tmp,$gs,$hosts);
}else{
 $hosts.= PHP_EOL.$gs;
}

$old_file_size = filesize(HOSTS_FILE_PATH);

if(file_put_contents(HOSTS_FILE_PATH, $hosts)){
 die('success. '.PHP_EOL);
}else{
die('fail'.PHP_EOL);
}

function get_google_hosts(){
 $html = file_get_contents(GOOGLE_HOST_URL);
 $html = strip_tags($html);
 $startPos = strpos($html, START_TAG);
 $html = substr($html, $startPos, strpos($html,END_TAG) - $startPos);
 $html = str_replace(' ',' ',$html);
 return $html.PHP_EOL.END_TAG;
}
PHP 相关文章推荐
PHP字符串处理的10个简单方法
Jun 30 PHP
php代码书写习惯优化小结
Jun 20 PHP
php5.3 注意事项说明
Jul 01 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
实例解析php的数据类型
Oct 24 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
windows系统php环境安装swoole具体步骤
Mar 04 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 #PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 #PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 #PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 #PHP
php使用类继承解决代码重复的问题
Feb 11 #PHP
php中使用url传递数组的方法
Feb 11 #PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 #PHP
You might like
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
锐步英国官网:Reebok英国
2019/11/29 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
户外拓展活动方案
2014/02/11 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
广告学专业求职信
2014/06/19 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
Golang 并发下的问题定位及解决方案
2022/03/16 Golang