用nodejs自创飞鱼星日志服务器记录日志

来源:互联网 发布:npm淘宝源 编辑:程序博客网 时间:2024/06/11 17:11

飞鱼星官方日志服务器为win软件,无法顺利在linux上运行,甚至在win7上运行也无法成功

废话少说,简单记录

0、选型:nodejs(dgram、mysql)、mysql、forever

1、安装nodejs、npm(win、linux),自行脑补

2、抓包udp,使用到了wireshark 下载地址https://1.na.dl.wireshark.org/win64/Wireshark-win64-2.2.4.exe

分析包内容 type1:4Byte,type2:4Byte,ip:32Byte,msg:剩余,端口:服务器20000,客户端2000

3、分析官方vls数据表结构得到基本元素(ip,type1,type2,msg)(最终没使用其官方表结构)

4、创建项目目录/path/to/vls,初始化项目,否则npm报错(win),npm init -f

5、npm安装dgram以处理UDP包npm install dgram -g

6、npm安装mysql以连接数据库npm install mysql -g

7、服务端代码后附

8、防火墙(如果有,请开放200000端口,请自行脑补)

9、安装forever npm install forever -g

10、创建自启动脚本/etc/init.d/vls并设置可执行权限,代码后附

11、启动service vls start

12、设置开机自启动chkconfig vls on


服务端代码

const dgram = require('dgram');const server = dgram.createSocket('udp4');const mysql = require('mysql');var conn = mysql.createConnection(    {host:'localhost', user:'root', password:'', database:'vls', port:'3306'}//修改成自己的数据库信息);conn.connect();server.on('error', function(err) {  console.log('server error:\n'+$err.stack);  server.close();});server.on('message', function (msg, rinfo) {  if(rinfo.address=='*.*.*.*' && rinfo.port=='2000'){//修改成设备ip    var s1 = msg.slice(0,4);    var s2 = msg.slice(4,8);    var s3 = msg.slice(8,40);    var s4 = msg.slice(40);    conn.query('insert into test (ip,type1,type2,msg) values(?, ?, ?, ?)',[s3.toString().replace(/\s+$/g,""),s1.readInt32BE(0),s2.toString('hex'),s4.toString().replace(/\s+$/g,"")],function(error,results,fields){});    console.log('server got: %d from %s:%d',msg.length,rinfo.address,rinfo.port);  }});server.on('listening', function() {  var address = server.address();  console.log('server listening %s:%d',address.address,address.port);});server.on('close', function(msg) {  console.log('server has been closed %s',msg);});server.bind(20000);

自启动脚本

#!/bin/bash## node      Start up node server daemon## chkconfig: 345 85 15# description: Forever for Node.js#PATH=/usr/binDEAMON=/path/to/vls/vls.jsLOG=/var/log/vlsPID=/var/run/vls.pidcase "$1" in    start)        forever start -l $LOG/vls.log -o $LOG/vls_out.log -e $LOG/vls_err.log --pidFile $PID -a $DEAMON        ;;    stop)        forever stop --pidFile $PID $DEAMON        ;;    stopall)        forever stopall --pidFile $PID        ;;    restartall)        forever restartall --pidFile $PID        ;;    reload|restart)        forever restart -l $LOG/vls.log -o $LOG/vls_out.log -e $LOG/vls_err.log --pidFile $PID -a $DEAMON        ;;    list)        forever list        ;;    *)        echo "Usage: /etc.init.d/vls {start|stop|restart|reload|stopall|restartall|list}"        exit 1        ;;esacexit 0

数据库(索引自己加)

create table vls (id bigint(20) auto_increment primary key, ip char(15) not null default '',type1 int(8) not null default 0,type2 binary(8) not null default '\0\0\0\0\0\0\0\0',msg char(576) not null default '',dateline timestamp not null default CURRENT_TIMESTAMP);


更深入的分析请自行脑补

0 0
原创粉丝点击