PHP: výpis PTR z DNS s více záznamy

V jednom ze starších příspěvků, který naleznete zde, jsem popisoval možnost, jak si v PHP vygenerovat tabulku s doménami, u kterých hromadně provedeme příkaz ping a posléze získáme i PTR (reverzní) záznamy z DNS. Co když ale chceme prověřit, zda IP adresa vrací více než jeden PTR záznam? Původní řešení vrátí totiž jen jeden.

Vlastní skript

Pojďme bez dalších okolků rovnou na věc, tedy na zdrojový kód. Nečekejte žádné sofistikované řešení, ale funkční to je. Řešení pro vrácení více PTR záznamů může vypadat tedy např. takto:

<html>
<body>
<table style="border-collapse:collapse;border:1px solid gray;width:100%;">
<tr><th>IP</th><th>PTR</th></tr>
<?php
 $names = file('ip.txt');
 foreach ($names as $name) {
 
 $ip = substr($name, 0, -1);

$ip2 = explode(".", $ip);
$ip2 = array_reverse($ip2);
$ip2 = implode(".", $ip2);
$ip2 = dns_get_record($ip2.".in-addr.arpa", DNS_PTR);
$tmp = [];
foreach($ip2 as $record) {
   if($record['type'] != 'PTR') continue;
   $tmp[] = $record['target'];
}

$ip2 = implode(", ", $tmp);

echo "<tr><td>$ip</td><td>$ip2</td></tr>";
 }
?>


</table>
</body>
<html>

Skript pracuje s textovým souborem, který je umístěň ve stejné adresářové úrovni a kde je jednoduše zapsán seznam IP adres.Tedy něco jako:

216.58.201.78
31.13.73.36
104.244.42.193
130.89.148.14
195.46.50.112
195.181.218.215

Spuštěný kód pak může vypadat nějak takto:

IP PTR
216.58.201.78 prg03s01-in-f14.1e100.net, prg03s01-in-f14.1e100.net, prg03s01-in-f78.1e100.net, prg03s01-in-f78.1e100.net
31.13.73.36 edge-z-m-mini-shv-01-dub4.facebook.com
104.244.42.193
130.89.148.14 klecker4.snt.utwente.nl
195.46.50.112
195.181.218.215 ambroz.cloud

Publikováno 4.2.2017 v 19:00 | Kategorie: PHP