我正在开发一个服务台应用程序,它可以在PC的本地网络上返回各种信息。
我想要做的是获取PC的IP地址 - 比如说10.20.30.1 / 24,然后获取网络八位字节。在这种情况下10.20.30。但是,即使网络类似于100.15.1,它仍然需要工作。
然后我想添加不同的设备号码。例如,如果网络中的所有交换机都按策略落在230-235范围内,我希望能够循环并ping那些寻找活动交换机的数字。
现在我只与/ 24网络合作。
到目前为止,我正在将PC的IP地址拉得很好,但是我对如何继续下去有点迷失..我应该将IP更改成字符串并使用某种正则表达式方法去除前三个八位字节?感觉有点笨重。
我不介意阅读新的方法等,我只是想指向正确的方向,可以这么说。
答案 0 :(得分:1)
只需
var s = "10.20.30.1 / 24";
s = s.Substring(0, s.LastIndexOf(".")); //"10.20.30"
答案 1 :(得分:1)
您应该使用解析ipnetworks的IPNetwork2 nuget包。
IPNetwork ipnetwork = IPNetwork.Parse("10.20.30.1/24");
Console.WriteLine("Network : {0}", ipnetwork.Network);
输出
Network : 10.20.30.0
玩得开心!
答案 2 :(得分:0)
正则表达式方法不起作用,除非网络地址是8位倍数。对于a.b.c.d / n的网络地址,您需要做的是创建一个带有n-1的位掩码,然后按位 - 并将其添加到您要测试的IP地址。
因此mask = 0xffffffff << (32-n)
为您提供位掩码,然后IPAddress_as_uint && mask
为您提供网络部分。