【问题标题】:How to know if given IPV6 address belongs to the same subnet as local machine如何知道给定的 IPV6 地址是否与本地计算机属于同一子网
【发布时间】:2016-10-03 11:31:38
【问题描述】:

目前我有一个 c 函数,它接受一个 ip 地址和子网掩码并检查给定的 ipv4 是否是私有/公共的。

它通过以下逻辑来匹配子网:

(local ipv4 address && local subnetmask) == (given ipv4 && given subnetmask)

ipv6可以写什么逻辑?我可以编写一个函数来接收 IP 和子网前缀。我可以获取本地子网前缀吗?

【问题讨论】:

  • 相同的逻辑,更大的数字
  • 这是否有意义取决于您要确定的内容。 IPv6 用户通常从 ISP 获得 /48(或至少 /56),而所有子网都是 /64。你想确定地址是否在同一个子网上,或者地址是否属于同一个用户?第二个更难。
  • @Sander Steffann 我正在寻找第一个。我在某处配置了一个 IP,我想知道它是否属于我的子网。如果是,我将其视为私有 IP,否则我将其视为公共 IP。

标签: networking network-programming ipv6 ipv4 windows-networking


【解决方案1】:

我命令确定两个主机是否在同一个子网上,同时获取它们的地址和前缀长度(子网掩码)。

如果前缀长度不同,则它们不在同一个网络上。

如果前缀长度相同,则取其长度(很可能是 64,所以让我们假设)并将两个地址的前 64 位相互比较。如果它们相同,则它们都在同一个网络上。

这与您对 IPv4 所做的基本相同,只是将不属于前缀的位设置为前缀。虽然有 128 个地址,但将其实现为一次比较 4 位(比较十六进制表示法)或一次比较 8 位(比较解析的字节)的循环可能会更容易。

【讨论】:

  • 问题是,我不知道如何在C代码中获取本地机器的前缀。
  • 然后为此打开一个新问题
猜你喜欢
  • 2011-04-10
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2017-10-30
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多