【发布时间】:2023-03-06 22:01:01
【问题描述】:
我有一个使用 MG Soft SDK 用 C++ 编写的 SNMP 管理器。到目前为止,它只使用 IPv4 发送 Get 和接收 Trap。现在应连接第二个 SNMP 代理,但这个代理具有 IPv6。一个应用程序是否可以使用同一网卡同时连接到一个使用 IPv4 的远程系统和另一个使用 IPv6 的远程系统?还是我需要 2 个网卡,一个用于 IPv4,另一个用于 IPv6?
【问题讨论】:
-
IPv4 和 IPv6 是完全独立的协议,彼此不知道。您可以运行各种网络协议,例如IPv4、IPv6、IPX、AppleTalk 等,同时在同一个网络接口上。
-
真正的问题是“MG Soft SDK”(无论是什么)是否提供了足够干净的 API 来同时拥有两者。是否有一个标签会引起 MG Soft SDK 专家的注意?
-
鉴于如果不跳过“评估我们的产品”圈子,甚至无法下载 SDK 标头,我怀疑您会得到比“一个 NIC,两个连接(IPV4 和 IPV6)更好的答案很好,除非 API 真的很糟糕”。如果 API 很糟糕,第二个 NIC 可能也无济于事 :-)
-
感谢您的回答。这对我有帮助。 sdk if 用于 SNMP 实现,它支持 v4 和 v6
-
一种同时支持 IPv4 和 IPv6 的便捷方法(在具有双栈功能的操作系统上,也就是说大多数操作系统上)是将您的程序移植到使用 IPv6,然后执行
setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, &myFalseValue, sizeof(myFalseValue))on您的 IPv6 套接字。现在您有一个可以连接到任何 IPv6 地址(在这种情况下它将使用 IPv6)或任何 IPv4 映射的 IPv6 地址的套接字(在这种情况下,该套接字将在内部使用 IPv4,但对于您的程序来说仍然看起来像一个 IPv6 套接字) .这大大简化了您的程序,因为您只需要一个代码路径而不是两个。