分类目录归档: 学习日志

memcached不允许外网访问

lnmp默认安装的memcached是可以外网访问的,对于我这个小站来说外网不会用到,所以只允许内网用。修改文件vi /etc/init.d/memcached

PORT=11211
USER=root
MAXCONN=1024
CACHESIZE=32
OPTIONS=""
IP=127.0.0.1

RETVAL=0
prog="memcached"

start () {
    echo -n $"Starting $prog: "
    memcached -d -l $IP -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached.pid $OPTIONS
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}

如果有安装iptables的话可以用iptables来禁止外网访问。

iphone的备份2

struct fileinfo{
	char   *domain;
	char   *filename;
	char   *linktarget;
	char   *datahash;
	char   *unknown1;
	unsigned short  mode;
	unsigned int unknown2;
	unsigned int inode;
	unsigned int userid;
	unsigned int groupid;
	unsigned int mtime;
	unsigned int atime;
	unsigned int ctime;
	unsigned int filelen;
	unsigned int flag;
	unsigned int numprops;
};

unsigned int getint(const char *data, int *offset, int size)
{
	if(data == NULL || offset == NULL) return 0;

	unsigned int value = 0;
	while (size > 0)
	{
		unsigned char tmp = data[*offset];
		value <<= 8;
		value |= tmp;
		(*offset)++; size--;
	}
	return value;
}

char* getstring(const char *data, int *offset)
{
	if(data == NULL || offset == NULL) return NULL;

	char *str = NULL;
	int  slen = 0;
	if(data[*offset] == (char)0xff && data[*offset+1] == (char)0xff){
		*offset += 2;
		return str;
	}

	slen = getint(data, offset, 2);   //获取长度
	str = (char*)malloc(slen+1);   //申请空间
	memcpy(str, (void*)(data+*offset), slen);//拷贝数据
	str[slen] = 0;                    //补0;
	*offset += slen;
	return str;
}

char* toA(const unsigned char *data, int len)
{
	if(data == NULL) return NULL;

	char *str = (char*)malloc(len*2+1);
	memset(str, 0, len*2+1);
	for (int i = 0; i < len; i++)
	{
		char odata[3] = {0};
		itoa(data[i], odata, 16); //转出来是两个字节的字符串
		strcat(str, odata);
	}
	return str;
}

char* getstring_hash(const char *data, int *offset)
{
	if(data == NULL || offset == NULL) return NULL;

	unsigned char *str = NULL;
	char   *ostr = NULL;
	int    slen = 0;
	if(data[*offset] == (char)0xff && data[*offset+1] == (char)0xff){
		*offset += 2;
		return ostr;
	}

	slen = getint(data, offset, 2);    //获取长度
	str = (unsigned char*)malloc(slen);   //申请空间
	memcpy(str, (void*)(data+*offset), slen); //拷贝数据
	*offset += slen;

	ostr = toA(str, slen);
	free(str);
	return ostr;
}

int process_mbdb_file(char *filename, char *outfilename)
{

	int    filelen = 0;
	FILE   *pf = NULL;
	char   *filedata = NULL;
	char   *index = NULL;
	int    offset = 0;
	int    i = 0;

	if(filename == NULL || outfilename == NULL) return -1;

	FILE *opf = fopen(outfilename, "w+");
	if(opf == NULL) return -1;

	pf = fopen(filename, "rb");
	if(pf == NULL) goto _out;

	fseek(pf, 0, SEEK_END);
	filelen = ftell(pf);
	rewind(pf);

	filedata = (char*)malloc(filelen);
	if(filedata == NULL) goto _out;

	fread(filedata, 1, filelen, pf);
	if(memcmp(filedata, "mbdb", 4)) goto _out; //文件标识头

	index = filedata + 6;      //跳过 0×05 0×00
	offset = 0;
	while(offset < filelen-6)
	{
		fileinfo fi = {0};

		fi.domain  = getstring(index, &offset);
		fi.filename  = getstring(index, &offset);
		fi.linktarget = getstring(index, &offset);
		fi.datahash  = getstring_hash(index, &offset); //换成字符串
		fi.unknown1  = getstring(index, &offset);
		fi.mode   = getint(index, &offset, 2);      //八进制
		fi.unknown2  = getint(index, &offset, 4);
		fi.inode  = getint(index, &offset, 4);
		fi.userid  = getint(index, &offset, 4);
		fi.groupid  = getint(index, &offset, 4);
		fi.mtime  = getint(index, &offset, 4);
		fi.atime  = getint(index, &offset, 4);
		fi.ctime  = getint(index, &offset, 4);
		fi.filelen  = getint(index, &offset, 8);  //64位的 但一般情况下 不会有那么大的文件
		fi.flag   = getint(index, &offset, 1);  //目前发现有4 和0  0貌似表示目录
		fi.numprops  = getint(index, &offset, 1);

		if(fi.numprops)
			printf("发现有额外数据 偏移位置在 %d n", offset);

		fprintf(opf, "%s %s %s %s %s %u %u %u %u %u %u %u %u %u %u %un",
			fi.domain,
			fi.filename,
			fi.linktarget,
			fi.datahash,
			fi.unknown1,
			fi.mode,
			fi.unknown2,
			fi.inode,
			fi.userid,
			fi.groupid,
			fi.mtime,
			fi.atime,
			fi.ctime,
			fi.filelen,
			fi.flag,
			fi.numprops
			);
		fflush(opf);
		free(fi.domain);
		free(fi.filename);
		free(fi.linktarget);
		free(fi.datahash);
		free(fi.unknown1);
	}

_out:
	if(filedata) free(filedata);
	if(opf) fclose(opf);
	if(pf) fclose(pf);
	return 0;
}

int main(int argc, char* argv[])
{
	process_mbdb_file("1.bin", "1.txt");
	return 0;
}

 

这是解析Manifest.mbdb文件的C语言版,写的非常粗糙的测试。网上有完整的:http://stackoverflow.com/questions/3085153/how-to-parse-the-manifest-mbdb-file-in-an-ios-4-0-itunes-backup 还有一个更详细的:http://code.google.com/p/iphonebackupbrowser/   关于文件的命名是  domain + "-" + filename 的sha-1的值。

iphone的备份

默认保存到C:Documents and SettingsAdministratorApplication DataApple ComputerMobileSyncBackup这个目录然后再用手机的UDID命名一个目录区分不同的手机设备。

目录下有 Status.plist、Info.plist、 Manifest.plist、 Manifest.mbdb、等文件。

Status.plist记录了备份的进度、时间、备份类型等信息。

Manifest.plist和Info.plist 记录了手机相关信息。

Manifest.mbdb这个文件记录了 手机上源文件名 跟 现在备份的文件名 对应关系。

如果谁备份文件还原不了的话可以直接在本目录找,只要把文件名后缀加上去就可以了。

如我要找回我的相片的话就可以

这些文件大小差不多的肯定是相片,只要改后缀就可以了。

【已解决】A5固件iphone4s 5.1.1版本越狱失败

超级悲剧。。。研究中!!!我的是早先升级到了5.1.1的。

一直都是这样。。。Recovery completed.

有时还会报错

2012-05-26 0:0分经过努力终于越狱成功了。

原因如下,因为我以前是通过在线升级从5.0.1升级到5.1.1的,就算是抹掉所有数据设置也不行,不知为什么就出现以上情况。

后来我去下载了4S的最新固件5.1.1,把手机进入恢复模式,然后用itunes平刷(就是不升级也不降级只是重新刷一遍)5.1.1固件,再用最新版的越狱工具absinthe-win-2.0,一键越狱成功。

如果不知道怎样平刷,刷机的可以到这个网站下载一键越狱工具,超级傻瓜化,超级简单,全中文,自带教程的。

苹果刷机助手 地址:http://www.i4.cn/

总结:如果是5.1.1最好重新刷一遍5.1.1,恢复出厂抹掉掉所有数据设置都不行,如果是5.0.1的升到5.1.1后再越狱。。。

最新消息,Chronic Dev Team刚刚更新了Absinthe 2.0,最新的版本号为2.0.1,修正了少量Bug。这可能解决了以上问题,那么以上的步骤就可以不用做了。

点击这里下载Mac版 Absinthe 2.0
点击这里下载Windows版 Absinthe 2.0
点击这里下载Linux版 Absinthe 2.0

wordpress调用sendmail发送邮件慢的问题

每次有人回复评论都会发个邮件到我的邮箱,自己体验了下发现奇慢无比,网上找原因原来是hosts文件设置问题。

vi /etc/hosts

我的原来是:
::1 localhost.localdomain localhost
127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
61.57.140.32 xdeng

默认是主机名的,改成
::1 localhost.localdomain localhost
127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
61.57.140.32 xdeng.cn

然后 service sendmail restart
经过测试速度非常地快。

参考:http://heaphy.me/189
lnmp不能发邮件可以参考这个://xdeng.cn/?p=915