Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我有一个哈希集,其中包含与当前机器关联的IP地址。如何确定每个IP地址的版本? //根据请求的版本返回IP地址 私有字符串GetIPAddress(int版本) { 字符串地址=空; var IPAddressHashSet=新的HashSet(Dns.GetHostAddresses(GetHostName()); 交换机(版本) { 案例4: //将ipv4地址作为字符串分配给“地址” 打破 案例6: //将ipv4地址作为字符串分配给“地址” 打破 违约: 地址=空; 打破 } 回信地址; }_C#_Ipv6_Hashset_Ipv4 - Fatal编程技术网

C# 我有一个哈希集,其中包含与当前机器关联的IP地址。如何确定每个IP地址的版本? //根据请求的版本返回IP地址 私有字符串GetIPAddress(int版本) { 字符串地址=空; var IPAddressHashSet=新的HashSet(Dns.GetHostAddresses(GetHostName()); 交换机(版本) { 案例4: //将ipv4地址作为字符串分配给“地址” 打破 案例6: //将ipv4地址作为字符串分配给“地址” 打破 违约: 地址=空; 打破 } 回信地址; }

C# 我有一个哈希集,其中包含与当前机器关联的IP地址。如何确定每个IP地址的版本? //根据请求的版本返回IP地址 私有字符串GetIPAddress(int版本) { 字符串地址=空; var IPAddressHashSet=新的HashSet(Dns.GetHostAddresses(GetHostName()); 交换机(版本) { 案例4: //将ipv4地址作为字符串分配给“地址” 打破 案例6: //将ipv4地址作为字符串分配给“地址” 打破 违约: 地址=空; 打破 } 回信地址; },c#,ipv6,hashset,ipv4,C#,Ipv6,Hashset,Ipv4,如您所见,我创建了一个名为“IPAddressHashSet”的哈希集 根据请求的IP版本,我想返回本地ipv4或ipv6地址 我想我可以通过获取哈希集中的每个IP地址并比较它是否适合某个帧(即“{0:###################”)来实现这一点,但即使这样,也无法确定该地址是否是本地地址、外部地址、网络设备等 在本例中,我只需要寻找一个基本的“192.168.0.#####”,但即使这样也不行,因为并非所有默认网关都以192.168开头 是否有任何.NET类对此有用? 基本上,我想确

如您所见,我创建了一个名为“IPAddressHashSet”的哈希集

根据请求的IP版本,我想返回本地ipv4或ipv6地址

我想我可以通过获取哈希集中的每个IP地址并比较它是否适合某个帧(即“{0:###################”)来实现这一点,但即使这样,也无法确定该地址是否是本地地址、外部地址、网络设备等

在本例中,我只需要寻找一个基本的“192.168.0.#####”,但即使这样也不行,因为并非所有默认网关都以192.168开头

是否有任何.NET类对此有用?
基本上,我想确定IP地址的版本,并在其默认网关上返回当前计算机的本地地址。

您可以使用
IPAddress.Family
。IPv4是
InterNetwork
,IPv6是
InterNetworkV6
。如果您想过滤掉外部ip,请使用示例代码检查这一点,说明如何检测ip是否属于专用范围。示例代码:

    //Returns an IP Address based on version requested
    private string GetIPAddress(int version)
    {
        string address = null;

        var IPAddressHashSet = new HashSet<IPAddress>(Dns.GetHostAddresses(GetHostName()));


        switch (version)
        {
            case 4:
                //Assign ipv4 address as string to "address"
                break;
            case 6:
                //Assign ipv4 address as string to "address"
                break;
            default:
                address = null;
                break;
        }

        return address;

    }

<代码> IPAdvult.PARSE < /代码>可能会帮助您担心不知道网络拓扑(“不是所有默认网关都会从192.168开始”),那么您可能需要考虑,当机器连接到多个网络时,也会出现更奇异的情况。在不知道您打算如何使用此地址的情况下,答案可能是没有这样的“本地”地址,确切地说是一个或多个。那么返回值的实际用途是什么呢?我通过使用NetworkInterface.GetAllInterface().ToList()解决了这个问题;然后,我可以使用该列表指定适配器。因此,计算机可以获得绑定到每个接口的IPv4和IPv6地址。
private IPAddress GetFirstPrivateIp(bool ipV4) {
    var interfaces = NetworkInterface.GetAllNetworkInterfaces();
    return interfaces
        .SelectMany(c => c.GetIPProperties().UnicastAddresses)
        .Where(c => 
            !IPAddress.IsLoopback(c.Address)
            && c.Address.AddressFamily == (ipV4 ? AddressFamily.InterNetwork : AddressFamily.InterNetworkV6)
            && (!ipV4 || IpIsPrivate(c.Address))) // IpIsPrivate - refer to question linked above
        .Select(c => c.Address)
        .FirstOrDefault();
}