簡體   English   中英

根據C#中的IP地址和子網掩碼計算子網號

[英]Calculating a Subnet number from an IP Address and Subnet Mask in C#

我有一個任務要用C#完成。 我有一個:

IP地址:192.168.1.57和子網掩碼:255.255.0.0

我需要找到子網號,在這種情況下為192.168.0.0。

但是,我需要能夠在C#中做到這一點,而無需使用System.Net庫 (我正在編程的系統無法訪問此庫)。

似乎該過程應該是這樣的:

1)將IP地址拆分為八位字節

2)將子網掩碼拆分為八位字節

3)子網號八位位組1 = IP地址八位位組1與子網掩碼八位位組Anded

4)子網號八位位組2 = IP地址八位位組2與子網掩碼八位位組Anded

5)子網號八位位組3 = IP地址八位位組3與子網掩碼八位位組Anded

6)子網號八位位組4 = IP地址八位位組4與子網掩碼八位位組Anded

7)加入子網號八位位組1 +。 +子網號八位位組2 +。 +子網號八位位組3 +。 +子網編號八位位組

8)瞧!

但是,我的C#非常差。 有誰擁有C#知識來幫助您?

這應該完成您描述的過程。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM