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



我正在关注这个问题的答案,但是使用答案中的代码并没有按照我想要的方式工作。

我想有某种方法来获取两个给定 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

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

最新更新