C# 将IP地址转换为CIDR
我想设计一个代码,在那里我可以搜索输入的IP地址,并使用它,它给出了IP地址的CIDR的输出。我需要的输出是一个变量,因为我需要在代码中的另一个步骤的CIDRC# 将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
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
}