我刚刚开始研究如何将开源安全产品 nmap 集成到一些 c++ 代码中。如果有人尝试过这个,并且对最佳方法有一些想法,我当然会很感激。
感谢您的回复。具体来说,我想运行端口扫描(ipv6)。我肯定更喜欢非 gpl 解决方案,例如命令行或套接字接口。然而,我也在这一点上寻找最快的解决方案,因为我们面临一些严格的时间表,如果需要,我们可以回载实施非 gpl 解决方案。
我刚刚开始研究如何将开源安全产品 nmap 集成到一些 c++ 代码中。如果有人尝试过这个,并且对最佳方法有一些想法,我当然会很感激。
感谢您的回复。具体来说,我想运行端口扫描(ipv6)。我肯定更喜欢非 gpl 解决方案,例如命令行或套接字接口。然而,我也在这一点上寻找最快的解决方案,因为我们面临一些严格的时间表,如果需要,我们可以回载实施非 gpl 解决方案。
(注意:我不是律师,这些都不应被视为法律建议)
您可能应该注意到,根据手册中的许可章节,Nmap 将解析其输出的产品视为衍生作品,因此属于 GPL 许可义务。GPLv2没有定义衍生作品是什么,而是让法院根据版权法中的定义来决定。通常的解释是,除了链接到操作系统中包含的系统库之外,任何形式的链接都会使链接的工作成为派生作品,而通过管道或网络进行对话的单独进程不一定是派生作品,尽管如在GPL常见问题解答,“如果通信的语义足够亲密,交换复杂的内部数据结构,那也可以作为将这两个部分组合成一个更大程序的基础。” 这似乎是 Nmap 开发人员正在采取的解释。
无论如何,假设您不需要担心 GPL,您可能想查看 Nmap 的输出选项;特别是-oX
对于 XML 输出和-oG
“greppable”输出。如果您需要更多地控制 Nmap 的功能,您应该查看Nmap 脚本引擎,这是 Nmap 中的 Lua 脚本引擎,可为您提供各种控制。
你总是可以在管道中阅读它。根据传统,即使非 GPL 访问 GPL 也是可以接受的。
您是否希望使用特定的功能?我发现在其他语言中使用 nmap 的一种简单方法是使用 -oX 开关让它吐出 xml。有一个 DTD(以及许多将其转换为您最喜欢的绑定工具的 xsd 的方法)您可以使用它来使用数据。
鉴于您是用 C++ 编写的,但如果需要,直接链接可能很容易。
“整合”并没有真正说得足够多。你想做什么样的事情?根据“集成”的级别,将 nmap 作为单独的进程运行并捕获其输出可能就足够了。这样做的好处是您可以更新 nmap 的版本,而无需重新构建您的应用程序。如果你需要更紧密的耦合,那么这取决于你需要什么功能和“库化”nmap,但要注意它是 GPL 代码,这种集成需要你的应用程序的源代码分发。