📅  最后修改于: 2023-12-03 15:19:48.005000             🧑  作者: Mango
IP地址是计算机网络中的重要概念。在某些情况下,需要检测一个IP地址是否在某个范围内。C#中可以使用正则表达式来检测IP地址范围。下面是一个简单的示例,演示如何检测IP地址范围。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string ipAddress = "192.168.0.1";
string ipRange = "192.168.0.1-192.168.0.255";
string[] parts = ipRange.Split('-');
string startIP = parts[0];
string endIP = parts[1];
Regex regex = new Regex(@"^(?<start>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-(?<end>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$");
Match match = regex.Match(ipRange);
if (match.Success)
{
string startIP = match.Groups["start"].Value;
string endIP = match.Groups["end"].Value;
long startIPNum = IPToNum(startIP);
long endIPNum = IPToNum(endIP);
long ipAddressNum = IPToNum(ipAddress);
if (ipAddressNum >= startIPNum && ipAddressNum <= endIPNum)
{
Console.WriteLine("IP address {0} is within the range {1}", ipAddress, ipRange);
}
else
{
Console.WriteLine("IP address {0} is not within the range {1}", ipAddress, ipRange);
}
}
else
{
Console.WriteLine("Invalid IP address range: {0}", ipRange);
}
}
static long IPToNum(string ipAddress)
{
string[] parts = ipAddress.Split('.');
long num = 0;
foreach (string part in parts)
{
num = num * 256 + long.Parse(part);
}
return num;
}
}
上面的代码定义了一个IPToNum方法,将IP地址转换为数字。该方法将一个IP地址拆分成四个部分,并在每个部分上执行以下操作:
最终,四个部分组成一个整数,在32位无符号整数范围内。使用该方法可以比较两个IP地址。
正则表达式模式 ^(?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})-(?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})$ 匹配一个IP地址范围。该模式使用四个数字,每个数字在 1 到 3 之间。每个数字用 . 分隔。由两个 IP 地址组成的分隔符为“ - ”。使用命名捕获组 (?
运行该代码时,输出
IP address 192.168.0.1 is within the range 192.168.0.1-192.168.0.255
说明IP地址在指定的范围内。
注意:由于IP地址可以表示为四个1到255之间的数字,因此可以通过简单的数学计算来检测它们是否在范围内。正则表达式只是为了演示如何在C#中使用正则表达式来检测IP地址范围。