如何解决寻找可以在 C# 中规范子网的代码即将子网空间设置为“0”值
从现有链接中获取一些帮助 How to convert an IPv4 address into a integer in C#? 和 How to convert CIDR to network and IP address range in C#?
using System;
using System.Net;
class App
{
static uint ToInt(string addr)
{
// careful of sign extension: convert to uint first;
// unsigned NetworkToHostOrder ought to be provided.
return (uint)System.Net.IPAddress.NetworkToHostOrder(
(int)System.Net.IPAddress.Parse(addr).Address);
}
static string ToAddr(long address)
{
// return System.Net.IPAddress.Parse(address.ToString()).ToString();
// This also works:
return new System.Net.IPAddress((uint) System.Net.IPAddress.HostToNetworkOrder(
(int) address)).ToString();
}
static string NormalizedSubnet(string subnet)
{
if (subnet.Contains("/") == false)
{
return $"{subnet}/32";
}
else if (subnet.Contains("/32"))
return subnet;
// Check if subnet prefix is proper
var subnetSpl = subnet.Split('/');
var intip = ToInt(subnetSpl[0]);
var maskBits = int.Parse(subnetSpl[1]);
uint mask = ~(0xffffffff >> maskBits);
var network = intip & mask;
return $"{ToAddr(network)}/{maskBits}";
}
static void Main()
{
Console.WriteLine(NormalizedSubnet("61.233.187.90/24"));
Console.WriteLine(NormalizedSubnet("62.233.187.255/31"));
Console.WriteLine(NormalizedSubnet("63.233.187.129/32"));
}
}
输出:
61.233.187.0/24
61.233.187.254/31
61.233.187.129/32
任何更好的建议..
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。