ash*_*iso 3 javascript protocols binary-data wireshark node.js
我正试图通过RCON协议从node.js与SRCDS服务器通信.RCON协议似乎已经足够解释,可以在每个主要编程语言的网站底部找到实现.使用它们很简单,但理解协议和开发JS库是我打算做的.
作为一名自学成才的程序员,我跳过了很多计算机科学基础知识 - 只学习了我需要的东西,完成了我想要的东西.我开始使用PHP进行编码,最终围绕OO,与数据库等进行了交谈.我目前正在使用JavaScript进行编程,更具体地说是使用node.js进行Web编写.
我已阅读并理解绝对二进制基础知识.但是当谈到数据包数据时,我完全迷失了.我想阅读并理解wireshark输出,但是如果它没有任何意义.我最大的问题可能是我不明白JS的各种INT和STRING(char ..)的二进制表示是什么样的,以及我如何将从服务器获得的数据转换为程序中可用的东西.
如果有人能指点我这些主题的教程,我将不胜感激.教程,如"只有凡人才能理解的解释,最好不是由CS教授写的".:)当我看到PHP参考实现时,我看到(太多)魔术发生在那里我无法翻译成JS.从套接字发送和读取数据没有问题,但我需要知道PHPs解包函数如何分别如何在JS中使用node.js.
所以我希望你能看到我在这里想要完成的事情.首要的是理解实现协议所需的整个理论.但是因为我只使用脚本语言,如果有人可以在PHP/JS的HOWTO部分中指导我,那将会非常有用.
非常感谢您的参与!
我赞赏低级协议的追求.
我会告诉你我走的路.我的方法是使用已经讲过协议的客户端和服务器,并使用libpcap进行分析.我创建了一个库,能够解压缩我在此阶段分析的自定义协议.
从这样的图表开始,它非常有用:

来自TCP上的wiki.它是一种非常有用的可视化二进制数据结构的方法.它紧密包装,所以切片分开需要注意细节.
我读了Buffer.它是你在节点中处理二进制的方式.http://nodejs.org/docs/v0.4.8/api/buffers.html - 这里要实现的第一件事是缓冲区可以通过数组语法逐位访问,即缓冲区[0]等.
能够将二进制数据转储为十六进制表示非常有用.我使用https://github.com/a2800276/hexy.js来实现这一目标.
我抓住了https://github.com/mranney/node_pcap-这相当于wireshark,但你可以通过编程方式查看所有传出和传入的流量.我加了UDP有效载荷支持:https://github.com/jmoyers/node_pcap/commit/2852a8123486339aa495ede524427f6e5302326d
我通读了所有mranney的"unpack"代码https://github.com/mranney/node_pcap/blob/master/pcap.js#L116-171
我找到了https://github.com/rmustacc/node-ctype
我仔细阅读了所有"解包"代码https://github.com/rmustacc/node-ctype/blob/master/ctio.js
现在,当你仔细研究这些东西时要记住的事情.大多数时候,他们采用二进制缓冲区表示并转换为本机javascript类型,比如说Number或String.他们将使用先进的技术来实现这一点 - 像移位这样的按位操作.你不一定需要理解这一切.
关键是:
1)字节顺序 - 位的排序(网络和主机字节顺序可以相互反转),因为这与事物的解包方式有关
2)Javascript Number表示是古怪的 - node-ctype在关于如何在javascript的Number中转换各种数字类型的注释中详细说明.整数,浮点数,双精度等都是javascript中的数字.
最后,如果你只是为了你的冒险而使用这些拆包机,它可能会很好.我最终不得不解压这些库中未涵盖的东西,比如GUID等,这对研究源非常有帮助.
过滤,过滤,过滤.定位一个主机.瞄准一个方向.定位一种消息类型.专注于首先剥离具有已知固定长度的数据 - 通常协议中的标头是一个好的起点.一旦你从二进制文件中解压缩到一个漂亮的json结构中,你就可以了.
之后,它一次一个字段,从上到下,一次一条消息.您可以使用Buffer#slice和node-ctype中的解包函数一次抓取每个数据.
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |