【问题标题】:Network protocol structure definitions in machine readable form (xml,json,other?)?机器可读形式的网络协议结构定义(xml、json、其他?)?
【发布时间】:2015-02-25 21:19:12
【问题描述】:

我正在寻找结构化机器可读形式网络协议结构定义,例如xml、json 或我目前不知道的其他描述语言。 (例如 yaml)

我在这里谈论的是标准的东西:以太网、IP、TCP、UDP、ICMP 等,以及可以通过网络 [有线和无线] 运行的所有其他东西。 例如,可以用wireshark嗅探的所有东西。

我即将进行的项目需要的是所有这些机器可读形式的协议定义,我不关心这些定义出现在哪件衣服上,我只需要它们。

在“互联网”中搜索这样一个“通用协议结构定义”就像大海捞针,什么都扔了,但这正是我要找的。​​p>

我什至粗略地检查了wireshark的可用代码,希望能找到一些有用的东西。 (事实并非如此,或者我看的不够深入......)

不存在,我是否必须为该任务发明一个新架构?

或者它只是在数小时的搜索中隐藏在我的眼前?

提前感谢stackoverflow专家。 :)

[编辑:]进一步澄清:

  • 我知道 Linux、Windows 和 OSX 都有所有基本协议的标头,但我想省略平台相关代码。对于标准和最常用的部分(Eth、ARP、IP、TCP、UDP、ICMP 等)来说就足够了,但是当你可以使用时,为什么要编程和构建更多对支持较少使用协议的库的依赖项您内部的一种机器可读格式能够定义所有协议吗? (这可能只是我的一个伟大的梦想......)

  • 规则并不重要,我需要基本结构和字段定义以及可选描述字段数据的用途。

    • 目标是能够使用结构信息构建数据包(无需合理性检查!),这将通过仅关于结构的测试,并解析数据包并将其呈现给用户,类似于wiresharks数据包帧输出树。 [不过以后应该可以进行合理性检查]
  • 你可以称它为协议字典......我简直不敢相信没有其他人已经有了这个想法,这就是我问这个问题的原因!

    • 但是当没有这样的字典时,我会急切地创建一个,即使它不是我的小爱好项目的主要目标......
  • 程序语言独立性很重要,对我的项目 (C++/Qt) 而言不是特别重要,但对其他对此类字典感兴趣的人而言也是如此。

【问题讨论】:

  • 我不知道谁拥有它们。据我所知,RFC(不是真正的机器可处理)是这些标准的规范“正确”定义。不过,您可能会查看 ASN.1,这是一种可以以机器可处理形式表示这些事物的通用方式。可能有人以这种方式嘲笑他们。 en.wikipedia.org/wiki/Abstract_Syntax_Notation_One
  • RFC 解析是在与朋友讨论我的项目时出现的一个想法。但是由于很可能不一致的描述语法而容易出错。我粗略地查看了 ASN.1,但据我了解,它总是一些标识符-长度-值-EOV 组合。你无法描述例如具有这种组合的 TCP,除了有一个选项可以省略仅描述的值部分。
  • RFC 解析对我来说听起来像是一场噩梦,最好留给自然语言处理人员与可以审查结果并确保其正确性的技术专家相结合。你在这个问题上得到了蟋蟀(这是一个很好的问题)。我猜这意味着你正在寻找的东西不存在。我们观察到,许多供应商以许多不同的方式实施这些规范。至少其中一些供应商必须拥有您正在寻找的东西,即某种已转换为代码的模型规范。
  • 有趣的是,对于一些主要的实现(比如linux对TCP的实现),除了实现的代码和我认为的RFP之外,没有模型或正式的描述。 ece.virginia.edu/cheetah/documents/papers/TCPlinux.pdf -- 你问的是模型驱动工程的典型激励用例
  • 如果您有兴趣,这也非常相关,但不幸的是,这不是答案:(Google 学者“使用 UML 设计通信协议”)

标签: xml json networking schema network-protocols


【解决方案1】:

Java 代码怎么样?它具有独立于平台的优势。

例如看看JNetPcap。它是 libpcap 的开源 Java 包装器。

它具有适用于各种协议的各种纯 Java 数据包解码器。包 org.jnetpcap.protocol 包含每个受支持协议的标头定义(例如 org.jnetpcap.protocol.network.Ipv4)。您可以直接使用它们,也可以扩展它们。

【讨论】:

  • 嘿,这是我大约 5 年前在我的硕士论文中已经使用的库。但这当然不是我需要的,也不是我要求的。我正在使用 C++/Qt,但这对于我的问题所针对的目标而言或多或少并不重要。
【解决方案2】:

因为找不到网络协议字典,所以我开始了。

见: https://github.com/qwc/network-protocol-dictionary

在撰写答案时,字典几乎和我的问题一样古老,并且由于时间不够,存储库仍处于非常粗糙的状态。但它会随着时间的推移而增长。 :)

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多