|
这个思路一直静静地躺在我服务器上,迪酷宣称花了巨资搞了那个平台,但是我在Linux下进行了模拟,经过实验,测试有效,而这个方案我仅仅报价为7500。与其浪费,不如我公开核心思路,把它给需要的人。
这个东西,我选择Linux平台主要考虑
第一:Linux的稳定
第二:强大的Shell功能便于实施集群管理
第三:数据的安全性有保障
首先是用户注册系统,这需要一个Web环境,考虑到后面要对数据库导出后进行操作,我选择了MySQL
通常意义,这个Web程序应该具备服务器管理及会员注册功能,其中会员密码为了方面后面操作可以采取明码方式进行储存
下面是我设计的数据库结构
- CREATE TABLE `access` (
- `webpage` varchar(50) NOT NULL default '',
- `fromurl` varchar(100) NOT NULL default '',
- `fromip` varchar(10) NOT NULL default '',
- `fromarea` varchar(10) NOT NULL default '',
- `accesstime` datetime NOT NULL default '0000-00-00 00:00:00'
- ) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
- CREATE TABLE `const` (
- `id` tinyint(1) unsigned NOT NULL default '0',
- `webname` varchar(50) NOT NULL default '',
- `webtitle` varchar(50) NOT NULL default '',
- `copyright` varchar(100) NOT NULL default '',
- `shownumperpage` tinyint(4) NOT NULL default '0',
- `tim` int(10) unsigned NOT NULL default '0',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
- INSERT INTO `const` (`id`, `webname`, `webtitle`, `copyright`, `shownumperpage`, `tim`) VALUES (1, 'HLServer.net用户注册系统', 'HLServer.net用户注册系统', 'yuan', 15, 4294967295);
- CREATE TABLE `server` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `area` varchar(10) NOT NULL default '',
- `city` varchar(100) NOT NULL default '',
- `serverurl` varchar(100) NOT NULL default '',
- `usercount` int(10) unsigned default NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 AUTO_INCREMENT=2 ;
- CREATE TABLE `static` (
- `statdate` date NOT NULL default '0000-00-00',
- `totalip` int(10) unsigned NOT NULL default '0',
- `pageviews` int(10) unsigned NOT NULL default '0',
- `lasttime` datetime NOT NULL default '0000-00-00 00:00:00',
- PRIMARY KEY (`statdate`)
- ) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
- CREATE TABLE `user` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `userno` varchar(20) NOT NULL default '',
- `remark_0` varchar(20) NOT NULL default 'ss_qx_cjt_1',
- `account` varchar(20) default NULL,
- `password` varchar(16) NOT NULL default '',
- `remark_1` varchar(20) NOT NULL default 'ss_qx_cjt_2',
- `username` varchar(10) NOT NULL default '',
- `level` tinyint(1) NOT NULL default '0',
- `question` varchar(200) NOT NULL default '',
- `answer` varchar(100) NOT NULL default '',
- `addtime` date NOT NULL default '0000-00-00',
- `logins` int(10) unsigned NOT NULL default '0',
- `logintime` datetime NOT NULL default '0000-00-00 00:00:00',
- `loginip` varchar(10) NOT NULL default '',
- `iflock` tinyint(1) NOT NULL default '0',
- `serverids` varchar(200) NOT NULL default '',
- `remark_2` varchar(20) NOT NULL default 'ss_qx_cjt3',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1 ;
复制代码
AMX的用户权限系统,AMX提供了配置文件管理用户(admin)权限,一般意义上这个配置文件装载的用户是有限的(#define MAX_ADMINS 64),但是它的源文件提供了MySQL形式的连接,只需要重新编译,源文件是如此描述:
- // Uncomment the following line to load admins from a database
- //#define USE_SQL
- /* If you enable USE_SQL, you might create your MySQL admins table with this SQL query :
- CREATE TABLE admins (
- `auth` varchar(32) NOT NULL default '',
- `password` varchar(32) NOT NULL default '',
- `access` varchar(32) NOT NULL default '',
- `flags` varchar(32) NOT NULL default '',
- PRIMARY KEY (`auth`)
- ) TYPE=MyISAM;
- * IMPORTANT:
- * Check $moddir/addons/amx/config/mysql.cfg for MySQL access configuration
- *
- */
复制代码
在我的测试服务器上,我的用户权限数据记录是这样的
- CREATE TABLE `admins` (
- `auth` varchar(32) NOT NULL default '',
- `password` varchar(32) NOT NULL default '',
- `access` varchar(32) NOT NULL default '',
- `flags` varchar(32) NOT NULL default '',
- PRIMARY KEY (`auth`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
- INSERT INTO `admins` (`auth`, `password`, `access`, `flags`) VALUES ('ss', '123456', 'abcdefghijklmnopqrstu', 'a');
复制代码
如何第一段数据库里的user信息插入进MySQL就是问题关键,这里采用了grep等程序过滤数据库文本,例如:
- ./usr/bin/mysqldump -uroot -ppassword -B amx_user --tables user --no-create-info >/usr/local/songsong/amx_user_shell/amx_user.sql
- grep INSERT amx_user.sql |sed 's/ss_qx_cjt3/\n/g'|sed 's/\(.*\)*.ss_utf_7/\n/g'|sed 's/\(.*\)ss_utf_8.*/\1/g'|sed '/^ *$/d'|sed -e "s/');//g" -e "s/','/"/g" -e "s/"/" "/g" -e "s/^" //g" -e "s/ "$//g"|sed '/^ *$/d'|sed -e "s/$/ "j" "a"/g"
复制代码
众所周知,MySQL提供了良好的远程通讯功能,这为注册用户在集群服务器之间的帐号通用提供老可能
至于备份远程服务器的日志,则可以通过SCP进行通讯,比如
- #!/usr/bin/expect
- spawn scp -P 27 root@123.456.78.90:/root/hlds/home/hlds_l/cstrike/logs/*.* /home/logs
- expect "password:"
- send "yourpassword\r"
- expect >
- interact
复制代码
这段代码可能有安全隐患,建议以非root用户操作。另外传递是逆向的,稍微好一些。当被crond载入后可以实现定时传递远程备份的数据
监听远程服务器状态效率比较好的办法有2个
一个是采用官方提供的接口进行数据分析,这段代码我会在近期公布
一个是利用nmap功能,采用UDP协议,对27010-27030进行定时监听,形成缓存记录并在前台以Web方式显示 |
|