Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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地址转换为CIDR_C#_Ip_Subnet_Cidr - Fatal编程技术网

C# 将IP地址转换为CIDR

C# 将IP地址转换为CIDR,c#,ip,subnet,cidr,C#,Ip,Subnet,Cidr,我想设计一个代码,在那里我可以搜索输入的IP地址,并使用它,它给出了IP地址的CIDR的输出。我需要的输出是一个变量,因为我需要在代码中的另一个步骤的CIDR static void Main(string[] args) { IPAddress addr = IPAddress.Parse("8.8.8.8"); IPHostEntry entry = Dns.GetHostEntry(addr); Console.W

我想设计一个代码,在那里我可以搜索输入的IP地址,并使用它,它给出了IP地址的CIDR的输出。我需要的输出是一个变量,因为我需要在代码中的另一个步骤的CIDR

 static void Main(string[] args)
 {
            IPAddress addr = IPAddress.Parse("8.8.8.8");
            IPHostEntry entry = Dns.GetHostEntry(addr);
            Console.WriteLine("IP Address: " + addr);
            Console.WriteLine("Host Name: " + entry.HostName);

我假设通过CIDR,您希望获得给定IP地址的类网络掩码长度。 作为引用,您可以将地址转换为一个位数组,然后检查第一个前导位

这个有用的扩展类将IP地址转换为位(实际上是布尔值):

//
///将字节数组转换为位数组实例,
///尊重操作系统的endian形式
/// 
公共静态类BitArrayExtensions
{
公共静态位数组ToBitArray(此字节[]字节)
{
bool[]allbits=新bool[bytes.Length*8];
for(int b=0;b
有了这个类,编写一个查找IP地址的类掩码长度:/8、/16或/24的方法非常容易

    /// <summary>
    /// Gets the length of the classful subnet mask of a given IPv4 address
    /// </summary>
    public int GetClassfulMaskbits(IPAddress address)
    {
        BitArray addressInBits = address.GetAddressBytes().ToBitArray();
        if (!addressInBits[0])  //leading bit = 0 => class A
            return 8; //default mask of class A = 255.0.0.0
        if(!addressInBits[1]) //leading bits = 10 => class B
            return 16; //default mask of class B = 255.255.0.0
        if (!addressInBits[2]) //leading bits = 110 => class C
            return 24; //default mask of class C = 255.255.255.0

        return 0; //class D or E has no classful subnet mask
    }
//
///获取给定IPv4地址的类子网掩码的长度
/// 
public int GetClassfulMaskbits(IPAddress地址)
{
BitArray addressInBits=address.GetAddressBytes().ToBitArray();
如果(!addressInBits[0])//前导位=0=>class A
返回8;//类A的默认掩码=255.0.0.0
如果(!addressInBits[1])//前导位=10=>B类
返回16;//类B的默认掩码=255.255.0.0
如果(!addressInBits[2])//前导位=110=>C类
返回24;//类C的默认掩码=255.255.255.0
返回0;//类D或E没有类子网掩码
}
BitArray扩展类也可以用于其他IP计算

    /// <summary>
    /// Gets the length of the classful subnet mask of a given IPv4 address
    /// </summary>
    public int GetClassfulMaskbits(IPAddress address)
    {
        BitArray addressInBits = address.GetAddressBytes().ToBitArray();
        if (!addressInBits[0])  //leading bit = 0 => class A
            return 8; //default mask of class A = 255.0.0.0
        if(!addressInBits[1]) //leading bits = 10 => class B
            return 16; //default mask of class B = 255.255.0.0
        if (!addressInBits[2]) //leading bits = 110 => class C
            return 24; //default mask of class C = 255.255.255.0

        return 0; //class D or E has no classful subnet mask
    }