📜  regex ip rage detect c# (1)

📅  最后修改于: 2023-12-03 15:19:48.005000             🧑  作者: Mango

在C#中使用正则表达式检测IP地址范围

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地址拆分成四个部分,并在每个部分上执行以下操作:

  • 将第1个部分左移24位
  • 将第2个部分左移16位
  • 将第3个部分左移8位
  • 添加第4个部分

最终,四个部分组成一个整数,在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 地址范围的起始和结束地址。

运行该代码时,输出

IP address 192.168.0.1 is within the range 192.168.0.1-192.168.0.255

说明IP地址在指定的范围内。

注意:由于IP地址可以表示为四个1到255之间的数字,因此可以通过简单的数学计算来检测它们是否在范围内。正则表达式只是为了演示如何在C#中使用正则表达式来检测IP地址范围。