Любые идеи о том, как программно интегрироваться с Nmap?
Я только начинаю изучать, как интегрировать Nmap, продукт безопасности с открытым исходным кодом, в некоторый код на C++. Если бы кто-нибудь попробовал это, и у него есть идеи по поводу наилучшего подхода, я, безусловно, был бы признателен за это.
Спасибо за ответы. В частности, я хотел бы запустить сканирование портов (ipv6). Я определенно предпочел бы не-gpl решения, такие как командная строка или интерфейс сокетов. Тем не менее, я также хочу найти самое быстрое решение (я), поскольку мы сталкиваемся с некоторыми жесткими временными рамками, и мы можем при необходимости выполнить обратную загрузку реализации решения не-gpl.
4 ответа
(примечание: я не юрист, и ничего из этого не следует воспринимать как юридическую консультацию)
Вы, вероятно, должны заметить, что Nmap рассматривает продукт, который анализирует свою продукцию как производное произведение, в соответствии с главой о лицензировании в руководстве, и, таким образом, подпадает под обязательства по лицензированию GPL. GPLv2 не определяет, что является производным произведением, вместо того, чтобы разрешить это решать судам и в соответствии с определениями в законе об авторском праве. Обычная интерпретация состоит в том, что любая форма связи, кроме связи с системными библиотеками, включенными в операционную систему, делает связанную работу производной работой, в то время как отдельный процесс, который взаимодействует по каналам или сети, не обязательно является производной работой, хотя, как упоминалось в FAQ по GPL, "если семантика коммуникации достаточно интимна и обменивается сложными внутренними структурами данных, это тоже может послужить основой для рассмотрения двух частей как объединенной в большую программу". Это, кажется, интерпретация, которую принимают разработчики Nmap.
В любом случае, предполагая, что вам не нужно беспокоиться о GPL, вы, вероятно, захотите посмотреть параметры вывода для Nmap; особенно, -oX
для вывода XML и -oG
для "greppable" вывода. Если вам нужен больший контроль над тем, что делает Nmap, вам следует взглянуть на Nmap Scripting Engine, механизм сценариев Lua в Nmap, который дает вам все виды контроля.
Вы всегда можете прочитать это в трубе. По традиции это приемлемо, даже если не GPL обращается к GPL.
Вы хотите использовать определенные функциональные возможности? Я нашел простой способ использования nmap на других языках - заставить его выплевывать xml с помощью ключа -oX. Существует DTD (и множество способов преобразовать его в xsd для вашего любимого инструмента связывания), который вы можете использовать для потребления данных.
Учитывая, что вы пишете на C++, возможно, было бы достаточно просто ссылаться на него напрямую, если вам нужно.
"Интеграция" на самом деле не говорит достаточно. Какие вещи вы хотите сделать? В зависимости от уровня "интеграции" может быть достаточно запустить nmap как отдельный процесс и записать его вывод. Преимущество в том, что вы можете обновить версию nmap, не перестраивая приложение. Если вам требуется более тесная связь, то это зависит от того, какая функциональность вам нужна, и от nmap для "библиотеки", но имейте в виду, что это код GPL, и для такого рода интеграции потребуется распространение исходного кода вашего приложения.