使用二进制解析器库访问已解析的输出缓冲区

时间:2015-05-27 14:37:34

标签: javascript node.js parsing binary decode

https://github.com/keichi/binary-parser

Node的binary-parser库是否允许您访问已从输入缓冲区解析的变量?快速入门说明状态“ 已解析的结果将作为对象返回。 ”。

我看不到引用构造函数的机制,在Create API方法中概述。

“创建(constructorFunction) 设置应该调用的构造函数,以创建从解析方法返回的对象。“

如何访问已解析的数据?对于GitHub示例,tcp.js,示例tcp.js中的值(如下所示):

https://github.com/keichi/binary-parser/tree/master/example

var Parser = require('../lib/binary_parser').Parser;

var tcpHeader = new Parser()
    .endianess('big')
    .uint16('srcPort')
    .uint16('dstPort')
    .uint32('seq')
    .uint32('ack')
    .bit4('dataOffset')
    .bit6('reserved')
    .nest('flags', {
        type: new Parser()
            .bit1('urg')
            .bit1('ack')
            .bit1('psh')
            .bit1('rst')
            .bit1('syn')
            .bit1('fin')
    })
    .uint16('windowSize')
    .uint16('checksum')
    .uint16('urgentPointer');

var buf = new Buffer('e8a203e108e177e13d20756b801829d3004100000101080a2ea486ba793310bc', 'hex');

console.log(tcpHeader.parse(buf));

使用解析(buf)的二进制解析器输出

*{ srcPort: 59554,
  dstPort: 993,
  seq: 148994017,
  ack: 1025537387,
  flags: { urg: 0, ack: 1, psh: 1, rst: 0, syn: 0, fin: 0 },
  dataOffset: 8,
  reserved: 0,
  windowSize: 10707,
  checksum: 65,
  urgentPointer: 0 }*

如果我想访问 dstPort 993 值,该怎么办?二进制解析器允许我在Node.js中执行此操作吗?

换句话说,我如何使用解析操作中的值?在我目前对Node.js的有限知识中,我相信根据文档我应该能够单独提取解析的值吗?我是否误解二元解析器将变量名称与类型分配给可在用户程序中使用的变量的能力?我的目标是访问这些变量,无论是在我的程序的后续部分中的数组还是其他数据结构中。

1 个答案:

答案 0 :(得分:0)

我不确定你的技能水平是什么,但是你可以尝试var dstPort = tcpHeader.parse(buf).dstPort; console.log(dstPort)看看它是否是993.那个输出看起来像一个JavaScript对象 - 我不知道为什么你有星号周围。解析函数以您设置它的方式为您提供基本的JavaScript对象,而不是二进制解析器特有的任何东西。