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获取地址栏信息的代码
Oct 08 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
php调用自己java程序的方法详解
May 13 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
php实现的数组转xml案例分析
Sep 28 PHP
关于laravel 日志写入失败问题汇总
Oct 17 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php生成shtml类用法实例
2014/12/09 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python实现计算最小编辑距离
2016/03/17 Python
python访问抓取网页常用命令总结
2017/04/11 Python
python 获取图片分辨率的方法
2019/01/08 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
什么是类的返射机制
2016/02/06 面试题
管理专员自荐信
2014/01/26 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
Python自动化测试PO模型封装过程详解
2021/06/22 Python
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
Nginx源码编译安装过程记录
2021/11/17 Servers