【问题标题】:PHP whois establishmentPHP whois 建立
【发布时间】:2022-01-01 14:18:28
【问题描述】:

我对 PHP 很陌生,但我正在为自己构建一个工具,以避免使用多个站点检查域信息,并且单击一次即可获得所有内容。

我遇到的问题是我正在尝试运行 whois 命令,如果我指定 IP 地址(在代码中手动写入 IP),该命令有效,就像我尝试插入变量而不是 IP 时一样(客户通过网站输入的是域名,我从域中获取IP(A记录),并尝试使用whois命令)grep似乎不再工作了。

我的想法是使用 grep “descr” 来查看 IP 属于哪个公司。

工作时的示例:

$Host = shell_exec("whois 141.136.44.163 | grep 'descr'");
echo "<pre>$Host</pre>"

输出:

描述:Hostinger International Ltd. 描述:主机LT

当我尝试使用一个变量时,我是通过这个命令行从域名中获取的:

$outputA = shell_exec("dig +short a $Domain");

我将它用于 whois:

$Host = shell_exec("whois $outputA | grep 'descr'");

我从 whois 收到的答案是完整的信息,就像您在没有 grep 的情况下运行命令一样:(whois IP:address)

因此,grep 似乎不再工作了。我得到这样的东西:enter image description here

知道如何解决这个问题,或者是什么导致了这个问题?一旦我用 $outputA 回显整个 whois 命令行,我就会收到一个正常的命令行,例如,如果我写入终端,它可以正常工作(收到来自 $outputA 的 IP,并且 grep 正在通过终端工作)。

作为参考,我的整个代码:

$Domain = $_POST['DomainName'];
echo "DNS records for domain:", $Domain;
$outputNS = shell_exec("dig +short ns $Domain");
$outputA = shell_exec("dig +short a $Domain");
$outputMX = shell_exec("dig +short mx $Domain");
$outputTXT = shell_exec("dig +short txt $Domain");
echo "<pre>$outputNS</pre>";
echo "<pre>$outputA</pre>";
echo "<pre>$outputMX</pre>";
echo "<pre>$outputTXT</pre>";
$Registrar = shell_exec("whois $Domain | grep 'Registrar'");
$Host = shell_exec("whois $outputA | grep 'descr'");
echo "Original domain's Registrar:";
echo "<pre>$Registrar<pre>";
echo "<pre>$Host<pre>";

【问题讨论】:

    标签: php whois


    【解决方案1】:

    你可以试试sprintf这个:

    <?php
    $outputA = '141.136.44.163';
    $command = sprintf("whois %s | grep 'descr'", $outputA );
    $Host = shell_exec($command);
    

    【讨论】:

    • 它按照您的建议以这种方式工作,尽管现在我觉得这个问题更清楚了。我从“dig”获得的 IP 地址似乎是问题所在。如果我按照您所写的方式手动输入 IP 地址,它会起作用,就像我使用它时一样: $outputA = shell_exec("dig +short a $Domain");它似乎没有被识别或什么的,IP似乎被正确传递了,但是使用dig IP后whois命令不再grep了:/最有趣的是,使用dig IP的输出和手动写入的IP回声相同 141.136.44.163 141.136.44.163
    • 仍然很困惑,不确定为什么挖掘的 IP 反应不同,而不是手动写入的 IP 地址。
    • @Hoolis 你是否已经尝试使用 exec() 而不是 shell_exed()?
    • 不确定你的意思,因为普通的 exec() 不能使用 whois 命令行,它需要通过 shell_exec() 作为终端命令行来执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多