1

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

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

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

但是,我需要能够在不使用 System.Net 库的情况下在 C# 中执行此操作(我正在编程的系统无法访问该库)。

看起来这个过程应该是这样的:

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

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

3) 子网编号 Octet 1 = IP 地址 Octet 1 Anded 与子网掩码 Octet 1

4) 子网编号 Octet 2 = IP 地址 Octet 2 Anded 与子网掩码 Octet 2

5) 子网编号 Octet 3 = IP 地址 Octet 3 Anded 与子网掩码 Octet 3

6) 子网编号 Octet 4 = IP 地址 Octet 4 Anded 与子网掩码 Octet 4

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

8)瞧!

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

4

2 回答 2

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);
于 2011-12-16T19:22:35.957 回答
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)
于 2011-12-16T18:08:04.650 回答