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
Jun 29 PHP
基于Zend的Captcha机制的应用
May 02 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
php删除数组元素示例分享
Feb 17 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php设计模式之委托模式
Feb 13 PHP
php代码检查代理ip的有效性
Aug 19 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
php将html转为图片的实现方法
May 19 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 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
递归列出所有文件和目录
2006/10/09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
用php解析html的实现代码
2011/08/08 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
python设置环境变量的作用和实例
2019/07/09 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
Python验证码截取识别代码实例
2020/05/16 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
酒店管理求职信范文
2014/04/06 职场文书
骨干教师考核方案
2014/05/09 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年依法行政工作总结
2014/11/19 职场文书