循环遍历c#中所有可能的ipv4地址



目前这就是我所拥有的:

for (int a = number; a < 255; a++)
{
for (int b = 0; b < 255; b++)
{
for (int c = 0; c < 255; c++)
{
for (int d = 0; d < 255; d++)
{
string ip = String.Concat(a, '.', b, '.', c, '.', d);
string _id = TruncateLongString(Hash(ip), 20);
if (_id == "AE18D602C836D7EAD1F8")
{
Console.WriteLine(ip);
Thread.Sleep(3600000);
}
}
}
}
}

但这非常缓慢,而且需要很长时间。有没有其他方法可以做到这一点,最好是以更快的方式?此外,原因是破解了sha1哈希,我和另一个人正试图弄清楚一个人是如何在大约三秒内破解一个ip的哈希(_id(的。Fyi这种杂碎还有一种盐,这是众所周知的。此外,如果你想知道,number是我给线程使用的数字,从1上升到大约40。我们也不知道这个人使用的是什么编码语言,但我们猜测c的速度,因为我们知道一些,但可能有更快的东西。

您需要减少方法Console的数量。WriteLine调用。使用并行。对于和具有生成的IP地址的阵列。不要使用众所周知的数据来生成散列,或者添加前缀";some_{Ip}";

var array = new string[255];
for (int a = 1; a < 256; a++)
{
for (int b = 0; b < 256; b++)
{
var prefB = String.Concat(a.ToString(), ".", b.ToString(), "."); 
for (int c = 0; c < 256; c++)
{
var prefC =  String.Concat(prefB, c.ToString(), "."); 
Parallel.For(0, 256, d =>
{
array[d] = String.Concat(prefC, d.ToString());

});

Console.WriteLine(string.Join(System.Environment.NewLine, array));
}
}
}

首先,有UInt32.MaxValue可能的IPv4地址,但并非所有IPv4值都在实际使用中。因此,您可以跳过永远不会映射的范围。

我想应该可以在大约3个CPU小时内计算出所有40亿个可能的哈希。如果使用单个常量salt,攻击者可能会花费时间预先计算完整的表以快速查找结果。40亿*10字节的答案只有40GB,很容易存储在HD上。

另一个小注意:IPv4地址的大小是1字节,所以它们从0到255,而不是254。

因此,必须调整for循环:

for (int a = 0; a < 256; a++) {
for (int b = 0; b < 256; b++) {
for (int c = 0; c < 256; c++) {
for (int d = 0; d < 256; d++) {

(很抱歉将通知作为答复,但我还不能发表评论(

最新更新