获取 2 个给定地址之间所有可能的 IP

Get all possible IPs between 2 given addresses

我一直在关注 this question 上的答案,但使用答案中的代码并没有按照我想要的方式工作。

我想要某种方法来获取两个给定 IP 之间的所有可能 IP(如问题所述)并将它们存储在数组或某种对象中,但那里的 OP 没有尝试如评论所述,使用建议的库。

我正在使用 .NET Core 3.1。

主要:

static void Main(string[] args)
{
    if (args.Length < 4)
    {
        throw new ApplicationException("Not enough args!");
    }
    Console.WriteLine("Sufficient arguments.");

    IPAddress ipRangeStart = IPAddress.Parse(args[0]);
    IPAddress ipRangeEnd = IPAddress.Parse(args[1]);
    Console.WriteLine("IPs parsed.");
    int port;
    try
    {
        port = Convert.ToInt32(args[2]);
    }
    catch (Exception)
    {
        throw new FormatException("Invalid port value!");
    }

    if (port > 65535 || port < 1) throw new InvalidOperationException("Port must be in the valid range!");
            
    Console.WriteLine("Port integer parsed.");

    string filePath = args[3];

    if (!(File.Exists(filePath))) File.Create(filePath);
            
    Console.WriteLine("Output file resolved.");

    IPAddressRange addies = new IPAddressRange(ipRangeStart, ipRangeEnd);

    Console.WriteLine("IP range created.");

    List<IPAddy> ipList = new List<IPAddy>();
            
    Console.WriteLine("IP list initialized.");
            
    Console.WriteLine("Adding IPs to list...");
            
    // Program hangs here
    
    foreach (var ip in addies)
    {
        Console.WriteLine("Parsing: " + ip.ToString());
        ipList.Add(new IPAddy(ip.ToString()));    
    }
            
    Console.WriteLine("IP range parsed.");
            
    Console.WriteLine("Scanning...");
    Dictionary<string, bool > ipsEvaluated = Scanner.ScanRanges(ipList.ToArray(), port);

    Console.WriteLine("Evaluating keys...");
    string[] IPPortsOpen = ipsEvaluated.getTrueKeys();
            
    Console.WriteLine("Writing results...");
    StreamWriter sw = new StreamWriter(filePath, true);

    foreach (string i in IPPortsOpen)
    {
        sw.WriteLine(i);
    }
            
    Console.WriteLine("Done!");
}

这是 IPv4 吗?还是 IPv6?如果我们假设 IPv4... 那么 IP 地址实际上只是 32 位大端无符号整数。我们以 125.80.207.121 和 141.221.132.118 为例;现在用十六进制来考虑它们...

十进制的 125.80.207.121 是十六进制的 7D.50.CF.79; 7D50CF79 是 2102447993

十进制 141.221.132.118 是十六进制 8D.DD.84.4F; 8DDD844F 是 2380104783

所以 125.80.207.121 和 141.221.132.118 之间的 IP 地址与 2102447993 和 2380104783 之间的 整数 相同,当被视为 32 位大端无符号值时 -然后将八位位组分成几部分并将每个八位位组输出为整数。