从C#中的IP地址和子网掩码计算子网号

时间:2011-12-16 17:46:01

标签: ip-address subnet c#

我有一项任务要在C#中完成。我有一个:

IP地址:192.168.1.57 和a 子网掩码:255.255.0.0

我需要找到子网号,在本例中为192.168.0.0。

但是,我需要能够在C#中完成此操作而不使用System.Net库(我编程的系统无法访问此库)。

似乎这个过程应该是这样的:

1)将IP地址拆分为八位字节

2)将子网掩码拆分为八位字节

3)子网编号八位位组1 = IP地址八位位组1以子网掩码八位位组1

4)子网编号八位位组2 = IP地址八位位组2以子网掩码八位位组2

5)子网编号八位位组3 = IP地址八位位组3用子网掩码八位组3

6)子网编号八位字节4 = IP地址八位字节4以子网掩码八位字节4

7)加入子网号码Octet 1 +。 +子网编号八位字节+。 +子网号码Octet 3 +。 +子网编号Octet 4

8)瞧!

然而,我的C#很差。有没有人有C#知识可以提供帮助?

2 个答案:

答案 0 :(得分:5)

这应该完成你描述的程序。

string ipAddress = "192.168.1.57";
string subNetMask = "255.255.0.0";

string[] ipOctetsStr = ipAddress.Split('.');
string[] snOctetsStr = subNetMask.Split('.');

if (ipOctetsStr.Length != 4 || snOctetsStr.Length != 4)
{
   throw new ArgumentException("Invalid input strings.");
}

string[] resultOctets = new string[4];
for (int i = 0; i < 4; i++) 
{
    byte ipOctet = Convert.ToByte(ipOctetsStr[i]);
    byte snOctet = Convert.ToByte(snOctetsStr[i]);
    resultOctets[i] = (ipOctet & snOctet).ToString();
}

string resultIP = string.Join(".", resultOctets);

答案 1 :(得分:1)

原谅我的VB代码,但几乎相同:

    Dim foo As Net.IPAddress = Net.IPAddress.Parse("192.168.1.57")
    Dim bar As Net.IPAddress = Net.IPAddress.Parse("255.255.0.0")

    Dim fooA() As Byte = foo.GetAddressBytes
    Dim barA() As Byte = bar.GetAddressBytes

    Array.Reverse(fooA)
    Array.Reverse(barA)

    Dim fooNum As Integer = BitConverter.ToInt32(fooA, 0)
    Dim barNum As Integer = BitConverter.ToInt32(barA, 0)

    Dim netNum As Integer = fooNum And barNum
    Dim netNumA() As Byte = BitConverter.GetBytes(netNum)
    Array.Reverse(netNumA)

    Dim subNet As New Net.IPAddress(netNumA)