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

飞鱼星官方日志服务器为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/bin
DEAMON=/path/to/vls/vls.js
LOG=/var/log/vls
PID=/var/run/vls.pid

case "$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
        ;;
esac
exit 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值