我可以从网络接口/适配器获取哪些信息来确定它连接到哪个网络?

我可以从网络接口/适配器获取哪些信息来确定它连接到哪个网络?

我计划开发一个桌面应用程序,该应用程序可以根据系统所连接的网络提供各种功能,例如设置路由。

因此,我正在寻找一种方法来识别和分配接口/适配器所连接的网络的人性化标签。我指的是“家庭 Wi-Fi”、“XYZ 的 Wi-Fi”、“办公室以太网”等标签,或者在虚拟接口的情况下,诸如“XYZ 公司 VPN”、“VPN 服务 X 的纽约服务器”、“VPN 服务 Y 的巴黎服务器”等。我希望此应用程序的用户能够自己标记网络。我只需要一种可靠地识别它们并区分它们的方法。

为此,我可以从网络接口获取什么样的信息来识别特定网络,并区分多个网络?

就不需要发出外部请求的事情而言,我想到的是:

  • 物理接口类型(以太网、Wi-Fi 等)
  • 本地 IP 地址和网络掩码
  • 网关
  • DNS 服务器

...虽然这些似乎不是实现此目的的可靠方法。不同的不相关网络可以共享相同的本地 IP 地址范围、网关 IP 甚至 DNS 服务器。

剩下的就是需要发出一些外发请求的事情,例如:

  • 公共 IP 地址
  • 本地域名(如果有)
  • 查看同一网络上连接的其他系统(可能通过 MAC 地址识别)

这些在我看来也不是很可靠,因为公共 IP 地址可能会发生变化,而且并不是每个本地网络都有自己的域名或可靠地连接到它的服务器。

我希望避免使用任何特定于操作系统或应用程序的方法,例如查看系统设置或第三方 VPN 客户端的设置,因为在所有主流操作系统及其网络客户端中,配置此类内容的方法实在太多了。

有没有一种可靠的方法?或许是所有这些方法的组合?

答案1

我见过的最好的例子是 Cisco Jabber(即时通讯/电话软件)的“网络位置”功能。

位置定义为每个唯一的子网和默认网关 MAC 地址(不是本地 MAC)。

Jabber 位置

使用网关的 MAC 地址可以让您查看某人是否使用 VPN 或在办公室,即使子网相同。

相关内容