存档在 2016年3月

关于Go Daddy, Repossessed by repossesseddomain@godaddy.com

2016年3月30日

查询域名WHOIS时,发现有些域名信息中出现“Go Daddy, Repossessed by repossesseddomain@godaddy.com”。

处于这种状态的域名数以十万计。

这些属于被Godaddy回收的域名,回收原因多样,可能域名注册者存在恶意,使用了有问题的支付方式,存在商标争议等。

部分此类域名可能在Godaddy的域名市场上出售,一般拍卖起步价为25USD,也有50USD、280USD的,应该存在一个相对简单的上架前定价处理。

在出价人得标后,WHOIS资料将消失,代以新域名持有人的信息。

案例:
https://whoisdog.cn/creditnames.com

Domain Name: CREDITNAMES.COM
Registrar URL: http://www.godaddy.com
Registrant Name: Repossessed by Go Daddy
Registrant Organization: Repossessed by Go Daddy
Name Server: NS09.DOMAINCONTROL.COM
Name Server: NS10.DOMAINCONTROL.COM
DNSSEC: unsigned

在Godaddy Auctions中的展示界面是:

Repossessed

参考资料:
http://club.domain.cn/forum.php?mod=viewthread&tid=1956988
https://www.namepros.com/threads/repossessed-by-godaddy-anyone-know-what-that-means.745714/
http://www.domaininvesting.com/information-about-repossessed-by-go-daddy-registrant/

GoDaddy repossesses BobbiKristina .com

Repossessed By Go Daddy

域名人物:wuxiaodong

2016年3月17日

这位米友专注于优质NewGTLD域名的投资。

博客:http://bdomainname.com/

米表:http://gov.domains/

经典域名:

hi.world 你好,世界!

工具:把图片转换为MP4

2016年3月11日

最初发现可以使用视频作为背景是在 http://domainnamesales.com/ 发现的,它的写法是:

<video poster="//static.domainnamesales.com/bin/img/bg/Splash_BLUR.jpg" loop>
	<source	src="http://cdn-s3.domainnamesales.com/video/Splash_Video.mp4">
	<source	src="http://cdn-s3.domainnamesales.com/video/Splash_Video.webm" type='video/webm; codecs="vp8, vorbis"'>
</video>
<img src="//static.domainnamesales.com/bin/img/photos/paris-streets.jpg" />

1. 从已有GIF动画转换为MP4

在线工具:https://cloudconvert.com/gif-to-mp4

2. 从已有MP4转换为WEBM

在线工具:https://cloudconvert.com/mp4-to-webm

3. 从已有图片转换为MP4

客户端工具:http://www.huishenghuiying.com.cn/xiazai

为什么使用Redis

2016年3月7日

原文:《为什么使用 Redis及其产品定位》

传统MySQL+ Memcached架构遇到的问题

实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:

  1. MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。
  2. Memcached与MySQL数据库数据一致性问题。
  3. Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。
  4. 跨机房cache同步问题。

众多NoSQL百花齐放,如何选择

最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的问 题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题:

  1. 少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。
  2. 海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。
  3. 这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过 类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。
  4. Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。

面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。

Redis适用场景,如何正确的使用

前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed 的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用 Memcached,何时使用Redis呢?

Redis与Memcached的比较

  1. 网络IO模型
  2. Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接 描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。

    (Memcached网络IO模型)

    Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和 select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操 作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

  3. 内存管理方面
  4. Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存 储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数 据也可能会被剔除,原因可以参考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/

    Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎 片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致 swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

  5. 数据一致性问题
  6. Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。

  7. 存储方式及其它方面
  8. Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。

    Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。

  9. 关于不同语言的客户端支持
  10. 在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一 些,目前看在客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能等,对应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。

根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。

关于Redis的一些周边功能

Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。

总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。

总结:

  1. Redis使用最佳方式是全部数据in-memory。
  2. Redis更多场景是作为Memcached的替代者来使用。
  3. 当需要除key/value之外的更多数据类型支持时,使用Redis更合适。
  4. 当存储的数据不能被剔除时,使用Redis更合适。

工具:360网站卫士-PHP-DOS攻击脚本专杀工具

2016年3月3日
<?php
$username = "360"; //设置用户名
$password = "056493358"; //设置密码
ob_start();
set_time_limit(0);
error_reporting(E_ALL & ~E_NOTICE);
$md5 = md5(md5($username).md5($password));
$realpath = realpath('./');
$selfpath = $_SERVER['PHP_SELF'];
$selfpath = substr($selfpath, 0, strrpos($selfpath,'/'));
define('REALPATH', str_replace('//','/',str_replace('\\','/',substr($realpath, 0, strlen($realpath) - strlen($selfpath)))));
define('MYFILE', basename(__FILE__));
define('MYPATH', str_replace('\\', '/', dirname(__FILE__)).'/');
define('MYFULLPATH', str_replace('\\', '/', (__FILE__)));
define('HOST', "http://".$_SERVER['HTTP_HOST']);
?>
<html>
<head>
<title>360网站卫士-PHP-DOS攻击脚本专杀工具></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body{margin:0px;}
body,td{font: 12px Arial,Tahoma;line-height: 16px;}
a {color: #00f;text-decoration:underline;}
a:hover{color: #f00;text-decoration:none;}
.alt1 td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f1f1f1;padding:5px 10px 5px 5px;border-right: 1px solid #ddd;}
.alt2 td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f9f9f9;padding:5px 10px 5px 5px;border-right: 1px solid #ddd;}
.focus td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#d6e9c6;padding:5px 10px 5px 5px;}
.head td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#e9e9e9;padding:5px 10px 5px 5px;font-weight:bold;}
.head td span{font-weight:normal;}
</style>
</head>
<body>
<?php
if(!(isset($_COOKIE['360wzb']) && $_COOKIE['360wzb'] == $md5) && !(isset($_POST['username']) && isset($_POST['password']) && (md5(md5($_POST['username']).md5($_POST['password']))==$md5)))
{
 echo '<center><img src="http://wangzhan.360.cn/statics/img/logo.png?1381994291" title="360网站卫士" border="0"><br/>PHP-DOS攻击脚本专杀工具<br/><br/><br/><br/><form id="frmlogin" name="frmlogin" method="post" action="">用户名: <input type="text" name="username" id="username" /> 密码: <input type="password" name="password" id="password" /> <input type="submit" name="btnLogin" id="btnLogin" value="登陆" /></form></center>';
}
elseif(isset($_POST['username']) && isset($_POST['password']) && (md5(md5($_POST['username']).md5($_POST['password']))==$md5))
{
 setcookie("360wzb", $md5, time()+60*60*24*365,"/");
 echo "登陆成功!";
 header( 'refresh: 1; url='.MYFILE.'?action=scan' );
 exit();
}
else
{
 setcookie("360wzb", $md5, time()+60*60*24*365,"/");
 $action = isset($_GET['action'])?$_GET['action']:"";
 
 if($action=="logout")
 {
  setcookie ("360wzb", "", time() - 3600);
  Header("Location: ".MYFILE);
  exit();
 }
?>
<div style="width:1000px;margin:0px auto;border: 1px solid #ccc;">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tbody>
 <tr class="head">
  <td><img src="http://wangzhan.360.cn/statics/img/logo.png?1381994291" title="360网站卫士" border="0"></td>
 </tr>
 <tr class="head">
 <?php
 $v = file_get_contents('http://data.wangzhan.360.cn/version.php');//检查版本更新
 $v = explode('|',$v);
 ?>
  <td>PHP-DOS攻击脚本专杀工具 <span style="float: right;">您的IP:<?php if($_SERVER['SERVER_ADDR']){echo $_SERVER['SERVER_ADDR'];}else{ echo $_SERVER['LOCAL_ADDR'];}?> | 系统时间:<?php echo date("Y-m-d H:i:s");?></span></td>
  </tr>
  <tr class="head">
  <td align="center"><?php  if($v[2]){ echo "发现新版本,请立即更新到 V2.0 <a href='http://wangzhan.360.cn/statics/360doskill.zip'>点击下载</a>";} else {echo "当前已是最新版本";}?></td>
 </tr>
</tbody></table>
<br>
<?php
  $dir = isset($_POST['path'])?$_POST['path']:MYPATH;
  $dir = substr($dir,-1)!="/"?$dir."/":$dir;
?>
<form name="frmScan" method="post" action="">
<table width="100%%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="45" style="vertical-align:middle; padding-left:5px;">扫描路径:</td>
    <td width="690">
        <input type="text" name="path" id="path" style="width:600px" value="<?php echo $dir?>">
        &nbsp;&nbsp;<input type="submit" name="btnScan" id="btnScan" value="开始扫描"></td>
  </tr>
</table>
</form>
<?php
  if(isset($_POST['btnScan']))
  {
   $start=time();
   $list = "";
   
   if(!is_readable($dir))
    $dir = MYPATH;
   $count=$scanned=0;
   find($dir);
   $end=time();
   $spent = ($end - $start);
?>
<div style="padding:10px; background-color:#ccc">扫描: <?php echo $scanned?> 文件 | 发现: <?php echo $count?> 行恶意代码 | 耗时: <?php echo $spent?> 秒 | 请站长手动删除以下恶意文件</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr class="head">
    <td width="15" align="center">No.</td>
    <td width="350">恶意文件</td>
    <td width="100">所在行号</td>
    <td width="300">详细内容</td>
  </tr>
<?php
echo $list;
?>
</table>
<center><br /><br />此页面是由 <A HREF="http://wangzhan.360.cn" target="_BLANK">360网站卫士</a>提供的PHP-DOS攻击脚本专杀工具页面,使用反馈请联系:<a href="mailto:dongfang-s@360.cn?subject=DOS-feedback">dongfang-s@360.cn</a>.<br /><br />
Copyright©2011-2013 360网站卫士 <br /></center>
<script src="http://data.wangzhan.360.cn/version.php"></script>
<?php
  }
 }
ob_flush();
?>
</div>
</body>
</html>
<?php
$self = basename($_SERVER['PHP_SELF']);
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') {
	if ($code == 'UTF-8') {
		$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
		preg_match_all($pa, $string, $t_string);
		if (count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)) . "...";
		return join('', array_slice($t_string[0], $start, $sublen));
	} else {
		$start = $start * 2;
		$sublen = $sublen * 2;
		$strlen = strlen($string);
		$tmpstr = '';
		for($i = 0; $i < $strlen; $i++) {
			if ($i >= $start && $i < ($start + $sublen)) {
				if (ord(substr($string, $i, 1)) > 129) {
					$tmpstr .= substr($string, $i, 2);
				} else {
					$tmpstr .= substr($string, $i, 1);
				} 
			} 
			if (ord(substr($string, $i, 1)) > 129) $i++;
		} 
		if (strlen($tmpstr) < $strlen) $tmpstr .= "...";
		return $tmpstr;
	} 
} 

function find($directory) {
	$self = basename($_SERVER['PHP_SELF']);
	global $list,$count,$scanned;
	$mydir = dir($directory);
	while ($file = $mydir -> read()) {
		if ((is_dir("$directory/$file")) && ($file != ".") && ($file != "..")) {
			find("$directory/$file");
		} else {
			if($file != $self){
			if ($file != "." && $file != ".." && preg_match("/.php/i", $file)) {
				$fd = realpath($directory . "/" . $file);
				$fp = fopen($fd, "r");				
				$scanned +=1;
				$i = 0;
				while ($buffer = fgets($fp, 4096)) {
					$i++;
					if ((preg_match('/(pfsockopen|fsockopen)\("(udp|tcp)/i', $buffer)) || (preg_match('/Php 2012 Terminator/i', $buffer)) || (preg_match('/[\$_GET|\$_REQUEST]\[\'rat\']/i', $buffer)) || (preg_match('/Tcp3 CC.center/i', $buffer)) || (preg_match('/xdos.s/i', $buffer)) || (preg_match('/儏摓煁晜泟/i', $buffer))) {
						$count += 1;
						$j = $count % 2 + 1;
						$buffer = htmlspecialchars(cut_str($buffer,80,0));
						$list.= "<tr class='alt$j' onmouseover='this.className=\"focus\";' onmouseout='this.className=\"alt$j\";'>
						  <td>$count</td>
						  <td>$fd</td>
						  <td>第 $i 行</td>
						  <td>$buffer</td>
						  </tr>";
					} 
				} 
				fclose($fp);
			} 
		}
		} 
	} 
	$mydir -> close();
} 
?>