用c#从IP地址和子网掩码计算子网号

本文关键字:子网掩码 计算 子网 地址 IP | 更新日期: 2023-09-27 18:18:09

我有一个任务要用c#完成。我有一个:

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

我需要找到子网号,在本例中,它将是192.168.0.0。

然而,我需要能够在c# 中做到这一点,而不使用系统。. Net库(我正在编程的系统无法访问此库)。

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

1)拆分IP地址为八位组

2)将子网掩码分成八位

3)子网号Octet 1 = IP地址Octet 1和子网掩码Octet 1

4)子网号Octet 2 = IP地址Octet 2和子网掩码Octet 2

5)子网号Octet 3 = IP地址Octet 3和子网掩码Octet 3

6)子网号Octet 4 = IP地址Octet 4和子网掩码Octet 4

7)加入子网号1 +。+子网编号2 +。+子网号8位组3 +。+子网编号Octet 4

8)瞧!

然而,我的c#相当糟糕。有人有c#知识可以帮助吗?

用c#从IP地址和子网掩码计算子网号

这将完成您所描述的过程。

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);

请原谅我的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)