京东客服职场体验报告:花生壳动态域名解析协议(DDNS)剖析|中文方案文档站(提供各类方案下载,WORD文档下载...

来源:百度文库 编辑:偶看新闻 时间:2024/04/25 03:36:45

花生壳是国内动态ip上网用户常用的一款架站软件之一,据称目前有一百多万用户
在使用,是一款不错的动态域名解析软件,遗憾的是该软件目前只提供了windows版,
广大linux\freebsd用户无缘享受这一服务,其实只要对该软件略作抓包分析,是
不难搞清楚它所用协议的,由此也很容易设计出unix版的客户端。

花生壳客户端启动后,首先以tcp方式登录ph002.oray.net服务器,端口号5050,
连接过程记录如下(方括号内容是加上去的,以区分是哪一方发送的数据):

[server]220 oray.net dhrp server ready
[client]auth cram-md5
[server]334 239qbbj4h3nxqkoe7i9xjq==

[client]s04stkvuiibqzs5xbp/nwnchq5g62wi=
[server]250 authentication passed
[server]sample.vicp.net
[server]

[client]regi a sample.vicp.net
[server]cnfm
[server]250 register successfully
[server]250 1382418101 887031714

[client]quit
[server]221 good bye

从上面的记录可以看出,花生壳的登录认证采用的是cram-md5方式,即服务器发一个
key给客户端,客户端用这个key用md5加密登录口令,然后以“用户名+空格+
加密后的登录口令”的格式发送登录数据给服务器。注意:服务器发来的key是用
base64编码的,使用前要先用base64解码还原,同样客户端发过去的登录数据也要
先用base64编码。

服务器收到客户端发来的登录数据后,先用base64解码还原,分解出用户名和密码,
核对用户名和密码都正确后,发250通知客户端认证通过,同时发此用户注册的域名。

客户端发regi命令选择使用其中一个域名,然后服务器发来两个整数数字,供客户端
以后刷新ip地址时使用。

以上就完成了tcp登录过程,以后客户端每分钟发送一个20字节的udp数据包给服务器,
以便保持在线状态和刷新ip地址,udp端口号5050,数据格式如下:

struct udp_data
{
   unsigned int loginid;
   unsigned int datatype;      //0x0a或者0x0b,表示在线或者注销
   unsigned int sequence;      //每发一次加1
   unsigned int data1;         //data1=-(seq+datatype)
   unsigned int data2;         //data2=0
}

其中loginid,sequence就是tcp登录时收到的那两个整数,datatype+sequence+
+data1+data2必须等于0。发送前用blowfish加密方式对datatype以下的16字节进行
加密,所用的key就是在tcp登录中收到的那个key。

服务器收到后,会应答一个20字节的upd包,格式同上,表示动态域名解析正常。
客户端接收、解码,核对loginid和sequence,如果不对或者5分钟以上收不到应答包,
就会重新进行tcp登录,重发udp包,以保持在线状态。