我正在尝试使用 c 或 c++ 构建一个显示网络拓扑的应用程序。我有套接字的知识。我知道这是一个没有多少细节的广泛问题。只是我还没有找到任何可以开始的地方。我不知道该怎么做。
2 回答
就像您在生活中遇到的任何问题一样,这需要对问题进行明确的定义。你需要把它分解成几部分。
首先,您是否需要“发现”拓扑,或者您是否已经在某个文本文件中提供了它?您的要求仅仅是绘制拓扑图(在这种情况下,一个名为“graphviz”的程序可能已经完成了您需要的工作)?如果一定要发现拓扑,那是什么样的网络呢?局域网?广域网?TCP/IP?还有什么?
然后你必须问自己为什么要使用 C 或 C++ - 从你的问题中可以看出你对网络没有太多经验 - 因此你不知道为什么要麻烦使用低级语言来完成您选择的任务。也许在短期内使用高级语言是合适的。
请注意,许多人都面临着与您相同的挑战——绘制网络拓扑图;因此有许多应用程序可以做到这一点。也许您可以详细说明您想自己尝试这项任务的原因?
我将做一些假设:
1. 您与设备有网络连接。2. 您拥有或可以接收SNMP 读取权限。
大多数网络设备都可以与 SNMP 通信。从 SNMP 信息中,您可以确定有关设备的大量信息。您可以获得的信息中有“CDP”和“LLDP”信息。“CDP”是 Cisco 用于邻居信息的专有协议,“LLDP”是 Cisco 设备通常也支持的开放标准。
如果设备没有运行 CDP 或 LLDP 并且您无法将其打开,则可以改用FDB(转发数据库)。这意味着您将通过 SNMP 获得的接口设备的 MAC 地址与其他设备接口的 MAC 地址表相匹配。这有点复杂,因为 MAC 地址可以显示在多个接口上。我不知道它的确切表示方式。
因此,对于弄清楚事物如何连接的逻辑部分,我认为这是要走的路。其他人必须帮助您的图形部分。