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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
PHP学习 变量使用总结
Mar 24 PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 PHP
php权重计算方法代码分享
Jan 09 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 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/08 PHP
深入PHP数据加密详解
2013/06/18 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php类的定义与继承用法实例
2015/07/07 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
Python中time模块和datetime模块的用法示例
2016/02/28 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python实现支付宝转账接口
2019/05/07 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
学年自我鉴定
2014/01/16 职场文书
经营理念标语
2014/06/21 职场文书
七一建党节演讲稿
2014/09/11 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL