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 相关文章推荐
模仿OSO的论坛(三)
Oct 09 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
python输入中文的实例方法
2020/09/14 Python
python两种注释用法的示例
2020/10/09 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
校友会欢迎辞
2014/01/13 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
房屋出租委托书格式
2014/09/23 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers