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 相关文章推荐
linux下 C语言对 php 扩展
Dec 14 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
symfony表单与页面实现技巧
Jan 26 PHP
PHP中的流(streams)浅析
Jul 02 PHP
PHP邮件群发机实现代码
Feb 16 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP数字金额转换成中文大写显示
Jan 05 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
python与idea的集成的实现
2020/11/20 Python
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
运动会广播稿60字
2014/01/15 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
医学生求职信
2014/07/01 职场文书
大学生实习证明范本
2014/09/19 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers