-1
<pre>

<?php

$newline = "\n";

$hit = 0;
$id = "id";
while ($hit < 10) { 
    $a = rand(0, 255);
    $b = rand(0, 255);
    $c = rand(0, 255);
    $d = rand(0, 255);

    $name = gethostbyaddr("$a.$b.$c.$d");

    if (!strpos($name, $id) === false) {
        print "  " . "<a href=$name>$name</a>" . $newline;
        $hit = $hit + 1;
    }
}

print $newline;
print "Copyright Search Engine" . $newline;
?>

这是一个小型搜索引擎,适用于私人企业家,或者它会是,如果它有效的话。
代码执行,速度慢得令人难以置信。有谁知道为什么。

如果代码是价值,标题是 NeoSearch,销售条件就是这些。

信息
秩序

10% Promille 100
万美元美国

雷克斯:。

4

2 回答 2

3

许多站点的反向 DNS 设置不正确,因此gethostbyaddr()如果您点击其中任何一个地址,调用速度会很慢。

此外,您可能应该限制$arand(0, 223). 此范围之外的任何内容都是多播地址,对搜索引擎没有用处。

即使解决了这个问题,您的代码也一定会很慢。您正在寻找可以解析为名称的地址id。绝大多数名称不符合该模式,因此您必须测试数千个名称才能获得 10 个您想要的名称。

这不是真正的搜索引擎的工作方式,它们不会查找随机 IP。他们从一组众所周知的网页开始,然后按照所有页面中的链接查找其他站点。

于 2019-11-01T02:39:09.610 回答
0

我不确定您要在这里完成什么,但是查看您的代码并在本地对其进行测试我可以告诉您,您必须搜索很多主机才能找到包含“id”的主机大多数 IPv4 地址的主机名是 IP 地址本身。

您面临的另一个问题是您正在执行单个线程,这意味着您将请求 1 个 IP 地址主机名,然后等待返回响应。

如果您想查看您的代码在做什么,请尝试运行以下修改后的代码。

<?php

$newline = "\n";

$hit = 0;
$id = "id";
$hosts = 0;
while ($hit < 10) {
    $a = rand(0, 255);
    $b = rand(0, 255);
    $c = rand(0, 255);
    $d = rand(0, 255);

    $ip = "$a.$b.$c.$d";

    $name = gethostbyaddr("$a.$b.$c.$d");
    print($name . $newline);

    if (!strpos($name, $id) === false) {
        print "  " . "<a href=\"$name\">$name</a>" . $newline;
        $hit++;
    }

    $hosts++;
    print($hosts . $newline);
}

print $newline;
print "Copyright Search Engine" . $newline;
?>

我停在了刚刚超过 500 台主机上,而且每个主机都需要大约一秒钟的时间。这意味着要抓取所有 14+ 十亿个 IPv4 地址将需要很长时间,更不用说使用 random 可能会重复。

如果您让我们知道,很高兴帮助您更多地完成您正在尝试做的事情

于 2019-11-01T04:40:00.633 回答