从C中的IP地址和子网掩码计算子网号码
问题描述:
我有一个任务需要在C#中完成。我有一个:从C中的IP地址和子网掩码计算子网号码
IP地址:192.168.1.57 和 子网掩码: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)加入子网号字节1 +。 +子网号码Octet 2 +。 +子网号码八位字节3 +。 +子网号码Octet 4
8)Voila!
但是,我的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)
Stackoverflow可能更合适。有人可以移动它吗? – Rilindo 2011-12-16 17:48:18
Stackoverflow是你想要的地方,但是你的逻辑是不正确的。忘记八位字节 - 它们是为了人类的可读性。全部加入,并以二进制比较。 刷上这里的子网划分: http://en.wikipedia.org/wiki/Subnetwork – Dan 2011-12-16 17:50:11
丹,谢谢你的方法的建议。但是,我没有进一步前进。我需要一些C#来做到这一点! – QuietLeni 2011-12-16 19:06:51