获取 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 位大端无符号值时 -然后将八位位组分成几部分并将每个八位位组输出为整数。
我一直在关注 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 位大端无符号值时 -然后将八位位组分成几部分并将每个八位位组输出为整数。