首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >广播地址验证

广播地址验证
EN

Stack Overflow用户
提问于 2013-05-15 14:12:43
回答 2查看 470关注 0票数 2

如何验证广播IP地址?

  • IP地址: 192.168.36.226
  • 网络掩码: 255.255.255.0
  • 广播: 192.168.36.255

是否可以提供任何广播地址(假设1.2.3.4)。如果是,将对其他网络的通信产生什么影响。

EN

回答 2

Stack Overflow用户

发布于 2013-05-16 15:05:07

IP地址和网络掩码确定广播地址。您不能只使用任何广播地址,否则任何需要广播通信的内容都无法工作。

网络掩码指定子网的大小。255.255.255.0的网络掩码通常表示为/24,这意味着IP地址的前24位指定了网络ID,其中最后8位是针对单个主机的。192.168.0.100/24是网络上的主机,ID为192.168.0.0,广播地址为192.168.0.255。网络中可用的最高值是广播地址。

10.1.2.3/8的广播地址是10.255.255.255,它的十进制子网掩码是255.0.0.0

票数 1
EN

Stack Overflow用户

发布于 2022-04-30 23:38:29

正如Brad提到的,如果您有网络掩码,那么计算广播地址非常容易。您只需交换所有位,并使用主IP地址执行OR操作。

现在不推荐输入诸如255.255.255.0这样的掩码。相反,您需要在IP上使用多个位。例如:192.168.36.226/24

24表示从最重要位开始的1s数。这是与IPv6相同的原理,它使用128位代替。因此,对于IPv6,这些数字通常要大得多。

计算IPv4掩码的一种方法是使用-1和32 - size (我们的例子是32 - 24 = 8):

代码语言:javascript
运行
复制
size = 24;  // somehow you get this number...
...
unsigned int mask = -1;
shift = 32 - size;
mask <<= shift; // C++ operator, in C write: mask = mask << shift;

现在,您可以通过翻转使用IP的掩码和ORing的所有比特来计算广播地址:

代码语言:javascript
运行
复制
broadcast_bits = ~mask;
broadcast_ip = ip | broadcast_bits;

我认为IPv6做同样的事情,但是有128位。此外,IPv6不提供多播(与224.0.0.0/4匹配的IP)。

如果您的问题是查找以太网或类似网卡接口中定义的广播地址,那么上述代码并不是您感兴趣的。相反,您希望列出接口,列出每个接口上定义的每个IP地址(在某些系统上,一个接口上最多可以有65536个IP)。该列表包括广播IP地址、主IP地址和掩码。换句话说,你可以:

代码语言:javascript
运行
复制
if(my_ip & mask == interface->ip & mask)
{
    if(my_ip == interface->broadcast_ip)
    {
        return interface;
    }
}
return nullptr;

访问接口列表的方法如下:

代码语言:javascript
运行
复制
struct ifaddrs * ifa_start(nullptr);
getifaddrs(&ifa_start);
for(struct ifaddrs * ifa(ifa_start); ifa != nullptr; ifa = ifa->ifa_next)
{
    if((ifa->ifa_flags & IFF_BROADCAST) != 0
    && ifa->ifa_broadaddr != nullptr)
    {
        // found the broadcast address of that interface
    }
}

有了这些信息,您应该能够找到上面使用的地址和掩码。请注意,所有接口都可能不支持广播(我认为不太可能)。

有关完整的实现,请参见利巴德尔 (C++)。接口实现在libaddr/iface.cpp中找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16567434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档