在NodeJS中伪造或构建数据包

时间:2014-02-25 00:31:57

标签: node.js

我必须发送一个数据包,当以十六进制查看时:

0A 00 2C 01 23 00 0C 00 B3 01

0A 00的长度为10 2C 01是标识符12c或者可以是十进制数据包ID 23 00是dec 35的版本。
0C 00是12月12日的另一个版本 b3 01是435。

来自不同的变量和配置。

var packet_id = 300;
var game_version = config.game.version; // 35 from config
var update_version = config.update.version; // 12 from config
var date_version = config.date.version; // 435 from version

然后根据长度计算长度。然后构建此缓冲区并发送它..

但是我该怎么做?我还想我想要预定义数据包结构,只需输入如下参数:

packet("versionCheck", // name of packet structure (defined somewhere
                 300 , // the packet id on the structure
          config.game.version, // the 2nd parameter for the versionCheck structure..... 
............

我正在尝试使用bigeasy的数据包来节点,但我只能使用Parsing,而不是使用Building数据包。

1 个答案:

答案 0 :(得分:0)

这实际上是数据包的一个非常基本的例子,因为一切都是静态的。这样的事情可能有用:

function Packet (length, id, v1, v2, other) {
    this._length = length;
    this._id = id;
    this._v1 = v1;
    this._v2 = v2;
    this._other = other;
}

Packet.prototype.toBuffer = function () {
    var buffer = new Buffer(this._length);

    buffer.writeUInt16LE(this._length, 0);
    buffer.writeUInt16LE(this._id, 2);
    buffer.writeUInt16LE(this._v1, 4);
    buffer.writeUInt16LE(this._v2, 6);
    buffer.writeUInt16LE(this._other, 8);

    return buffer;
}

var packet = new Packet(10, 0x12c, 35, 12, 435);

console.log(packet.toBuffer());

同样,对于解析,您不需要任何特殊内容,与toBuffer相同,但使用read代替write方法