如何获得主机';默认网络适配器的广播地址?C#

本文关键字:网络适配器 广播地址 默认 何获得 主机 | 更新日期: 2023-09-27 18:29:55

假设我想向我的子网中的每个主机发送一条udp消息(然后从我的子网上的任何主机接收一条udp消息):

现在我做:

IPAddress broadcast = IPAddress.Parse("192.168.1.255");

但我当然希望在子网不同于192.168.1/24的情况下正常完成。我尝试过:

IPAddress broadcast = IPAddress.Broadcast;

但是IPAddress.Broacast表示"255.255.255.255",不能用于发送消息(它引发异常)。。。所以:

如何获取本地网络适配器广播地址(当然也可以是网络掩码)?

这是我提出的最终解决方案

public IPAddress getBroadcastIP()
{
    IPAddress maskIP = getHostMask();
    IPAddress hostIP = getHostIP();
    if (maskIP==null || hostIP == null)
        return null;
    byte[] complementedMaskBytes = new byte[4];
    byte[] broadcastIPBytes = new byte[4];
    for (int i = 0; i < 4; i++)
    {
        complementedMaskBytes[i] =  (byte) ~ (maskIP.GetAddressBytes().ElementAt(i));
        broadcastIPBytes[i] = (byte) ((hostIP.GetAddressBytes().ElementAt(i))|complementedMaskBytes[i]);
    }
    return new IPAddress(broadcastIPBytes);
}

private IPAddress getHostMask()
{
    NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface Interface in Interfaces)
    {
        IPAddress hostIP = getHostIP();
        UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses;
        foreach (UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol)
        {
            if (UnicatIPInfo.Address.ToString() == hostIP.ToString())
            {
                return UnicatIPInfo.IPv4Mask;
            }
        }
    }
    return null;
}
private IPAddress getHostIP()
{
    foreach (IPAddress ip in (Dns.GetHostEntry(Dns.GetHostName())).AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
            return ip;
    }
    return null;
}

如何获得主机';默认网络适配器的广播地址?C#

如果您获得了本地IP和子网,那么计算应该没有问题。

也许是这样的?

using System;
using System.Net.NetworkInformation;
public class test
{
    public static void Main()
    {
        NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces();
        foreach(NetworkInterface Interface in Interfaces)
        {
            if(Interface.NetworkInterfaceType == NetworkInterfaceType.Loopback) continue;
            if (Interface.OperationalStatus != OperationalStatus.Up) continue;
            Console.WriteLine(Interface.Description);
            UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses;
            foreach(UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol)
            {
                Console.WriteLine("'tIP Address is {0}", UnicatIPInfo.Address);
                Console.WriteLine("'tSubnet Mask is {0}", UnicatIPInfo.IPv4Mask);
            }
        }
    }
}

当给出IP地址和网络掩码时,如何计算IP范围?应该给你剩下的。