Node.js 在NodeJS中处理数据包
假设我正在节点Js中读取TCP或UDP流。这个问题基本上适用于任何语言或平台,但是我如何为我的数据层创建一个头部呢 我想我需要Node.js 在NodeJS中处理数据包,node.js,tcp,header,packet,Node.js,Tcp,Header,Packet,假设我正在节点Js中读取TCP或UDP流。这个问题基本上适用于任何语言或平台,但是我如何为我的数据层创建一个头部呢 我想我需要 用于标识标题的一组神奇字符 表示数据包长度的数字 我想对其进行未来验证,并遵循任何“典型”数据包头结构(可能它们通常包括版本?协议?),但我一生都无法在网上找到任何有用的信息。使用该格式。如果希望更深入地查看头字节,则应该具有所需的所有内容。Pcap是较旧的格式,但是 已经有了一个pcapng解析器,可以通过npm获得 如果你想要一个通用协议分析器,你应该看看 生成p
-c10
),并保存为pcapng格式(-F
)
tshark-w myfile.pcapng-F pcapng-c 10
JS pcapng库
pcap ng解析器
我们可以使用about页面上的示例js文件:
#temp.js
const PCAPNGParser=require('pcap-ng-parser')
const pcapNgParser=新的pcapNgParser()
const myFileStream=require('fs').createReadStream('./myfile.pcapng'))
myFileStream.pipe(pcapNgParser)
.on('data',parsedPacket=>{
console.log(解析包)
})
.on('interface',interfaceInfo=>{
控制台日志(interfaceInfo)
})
从pcapng文件获取信息
运行示例JS
在我的系统上运行它,我们可以看到链接和接口信息
$node temp.js
{
链接类型:1,
斯内普兰:524288,
名称:“en0\u0003\u0005Wi-Fi\t\u0001\u0006”,
代码_12:'Mac OS X 10.14.6,构建18G103(达尔文18.7.0)\u0000\u0000\u0000\u0000\u0000\u0000h\u0000\u0000\u0000\u0000'
}
{
接口ID:0,
最高:367043,
时间流:1954977647,
数据:
}
...
Vs tshark
根据您的用例,tshark可能会更有意义
tshark-rmyfile.pcapng-c1-tJSON
[
{
“_索引”:“数据包-2019-12-15”,
“\u类型”:“pcap\u文件”,
“_分数”:空,
“_来源”:{
“层”:{
“框架”:{
“frame.interface_id”:“0”,
“frame.interface\u id\u树”:{
“帧接口名称”:“en0”,
“帧接口描述”:“Wi-Fi”
},
“框架包装类型”:“1”,
“帧时间”:“2019年12月15日12:04:14.932076000太平洋标准时间”,
“帧偏移量_移位”:“0.000000000”,
“帧时间”——“1576440254.932076000”,
“帧时间增量”:“0.000000000”,
“显示帧时间增量”:“0.000000000”,
“相对帧时间”:“0.000000000”,
“帧编号”:“1”,
“frame.len”:“175”,
“框架盖面”:“175”,
“已标记帧”:“0”,
“frame.ignored”:“0”,
“frame.protocols”:“eth:ethertype:ip:udp:db lsp disc:json”,
“frame.coloring_rule.name”:“UDP”,
frame.coloring\u rule.string:“udp”
},
“eth”:{
“eth.dst”:“ff:ff:ff:ff:ff”,
“eth.dst_树”:{
...
Shoot,对不起。我想我的问题不清楚。我正在尝试创建自己的数据协议(如FTP或HTTP,但用于其他内容)我想看看一些包头的基本示例。我想我可以使用Wireshark,调查其他软件是如何发送数据的,但可能无法识别它们的头。看看Wireshark中的,看看字段相对于的结构。看看或使用。如果你仍然有相同的提问前,请务必阅读相关内容,以及作为对他人的礼貌。