2014-12-29 4 views
2

Я ищу определения структуры сетевого протокола в структурированная машиночитаемая форма, как xml, json или другой язык описания, о котором я сейчас не знаю. (например, yaml)Определения структуры сетевого протокола в машиночитаемой форме (xml, json, other?)?

Я говорю здесь о стандартном материале: Ethernet, IP, TCP, UDP, ICMP и т. д. и обо всем остальном, который может работать через сеть [кабель и беспроводной]. Все, что можно обнюхивать с помощью wirehark, например.

Что мне нужно для моего предстоящего проекта - это все эти определения протоколов в машиносчитываемой форме, мне все равно, в какой одежде эти определения приходят, я просто нуждаюсь в них.

Поиск «interwebs» для такого определения универсальной структуры протокола - это искать иглу в стоге сена и бросать все, но то, что я ищу.

Я даже легко проверил доступный код проводов в надежде найти что-то пригодное для использования. (Что было не так, или я не выглядел достаточно глубоко ...)

Не существует и не нужно изобретать новую схему для задачи?

Или он просто прячется у меня на глазах в часы поиска?

Заранее спасибо, специалисты stackoverflow. :)

[Edit:] Некоторые дальнейшие разъяснения:

  • Я знаю, что Linux, Windows и OSX получили заголовки для всех основных протоколов, но я хочу, чтобы опустить платформу коды зависимой от. Этого было бы достаточно для стандартных и наиболее часто используемых компонентов (Eth, ARP, IP, TCP, UDP, ICMP и т. Д.), Но зачем программировать и наращивать гораздо больше зависимостей от библиотек, которые поддерживают более редко используемые протоколы, когда вы можете использовать ОДИН машиночитаемый формат внутри вас может определять ВСЕ протоколы? (Возможно, это просто замечательный мой сон ...)

  • Правила не важны, мне нужна базовая структура и определения полей с дополнительным описанием, для чего предназначены данные поля.

    • Цель состоит в том, чтобы иметь возможность построить пакет с информацией о структуре (без проверки достоверности!), Который будет проходить испытание в отношении только структуры, и разобрать пакет и представить его пользователю, подобно к дереву вывода пакетов пакетов. [Проверка достоверности должна впоследствии можно хотя]
  • Вы могли бы назвать это словарем протокола ... и я просто не могу поверить, что никто другой не имел эту идею уже, вот почему я задаю этот вопрос!

    • Но когда нет такого словаря, я жадно создать один, даже если это не главная цель моей маленький проект хобби ...
  • Программа языка независимость важна , не особенно для моего проекта (C++/Qt), но для всех, кого интересует такой словарь.

+0

Я не знаю, кто у них есть. Насколько я знаю, RFC (которые на самом деле не обрабатываются машиной) являются каноническими «правильными» определениями этих стандартов. Тем не менее, вы можете взглянуть на ASN.1, который является общим способом, который можно было бы представить в машинной обрабатываемой форме. Может быть, кто-то издевался над ними так. http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One – FrobberOfBits

+0

Разбор RFC был идеей, появившейся во время обсуждения с моим другом для моего проекта. Но была бы склонна к ошибкам из-за, по всей вероятности, непротиворечивого описания синтаксиса. Я с любопытством посмотрел на ASN.1, но, насколько я понимаю, всегда есть комбинация идентификаторов-длина-значение-EOV. Вы не можете описать, например. TCP с этими комбинациями, за исключением того, что есть возможность опустить часть значения, которую нужно просто описать. – qwc

+0

RFC-анализ звучит как кошмар для меня, лучше всего подходит для людей, обрабатывающих естественный язык, в сочетании с техническими экспертами, которые могут проверять результаты и гарантировать, что они верны. Вы получаете сверчков по этому вопросу (что хорошо). Я предполагаю, что это означает, что то, что вы ищете, не существует. Мы видим, что эти спецификации реализованы многими разными способами многими поставщиками. По крайней мере, некоторые из этих поставщиков должны иметь то, что вы ищете, т. Е. Какую-то модельную спецификацию, переведенную в код. – FrobberOfBits

ответ

0

Поскольку я не смог найти словарь для сетевых протоколов, я начал его.

См: https://github.com/qwc/network-protocol-dictionary

На момент написания ответа словаря является почти столь же стара, как и мой вопрос, и из-за какой-то причине нехватки времени хранилище все еще находится в очень грубом состоянии. Но со временем оно будет расти. :)

0

Как насчет кода Java? Он имеет преимущество независимо от платформы.

Например, посмотрите на JNetPcap. Это оболочка Java с открытым исходным кодом для libpcap.

Он имеет все виды чистых Java-декодеров Java для широкого спектра протоколов. Пакет org.jnetpcap.protocol содержит определения заголовков для каждого из поддерживаемых протоколов (например, org.jnetpcap.protocol.network.Ipv4). Вы можете использовать их из коробки или расширить их.

+0

Эй, это библиотека, которую я уже использовал около 5 лет назад в моей магистерской диссертации. Но, конечно, это не то, что мне нужно, и то, что я просил. Я работаю с C++/Qt, но это более или менее не важно для цели, которую я нацелил на мой вопрос. – qwc