Commit a7e43fcc authored by Ad Schellevis's avatar Ad Schellevis

(legacy) refactor diag_dns.php

parent 55743152
<?php <?php
/* /*
Copyright (C) 2014 Deciso B.V. Copyright (C) 2016 Deciso B.V.
Copyright (C) 2009 Jim Pingle (jpingle@gmail.com) Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
All rights reserved. All rights reserved.
...@@ -29,242 +29,130 @@ ...@@ -29,242 +29,130 @@
require_once("guiconfig.inc"); require_once("guiconfig.inc");
$host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'"); $resolved = array();
$host_esc = escapeshellarg($host); $dns_speeds = array();
if (!empty($_REQUEST['host'])) {
if (isset($config['aliases']['alias']) && is_array($config['aliases']['alias'])) { $host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'");
$a_aliases = &$config['aliases']['alias']; $host_esc = escapeshellarg($host);
} else {
$a_aliases = array();
}
$aliasname = str_replace(array(".","-"), "_", $host);
$alias_exists = false;
$counter=0;
foreach($a_aliases as $a) {
if($a['name'] == $aliasname) {
$alias_exists = true;
$id=$counter;
}
$counter++;
}
if( ($_GET['host']) && ($_GET['dialog_output']) ) {
display_host_results($host,$resolved,$dns_speeds);
exit;
}
if(isset($_POST['create_alias']) && (is_hostname($host) || is_ipaddr($host))) {
if($_POST['override'])
$override = true;
$resolved = gethostbyname($host);
$type = "hostname";
if($resolved) {
$resolved = array();
exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved);
$isfirst = true;
foreach($resolved as $re) {
if($re <> "") {
if(!$isfirst)
$addresses .= " ";
$addresses .= rtrim($re) . "/32";
$isfirst = false;
}
}
$newalias = array();
if($override)
$alias_exists = false;
if($alias_exists == false) {
$newalias['name'] = $aliasname;
$newalias['type'] = "network";
$newalias['address'] = $addresses;
$newalias['descr'] = gettext('Created from Diagnostics-> DNS Lookup');
if($override)
$a_aliases[$id] = $newalias;
else
$a_aliases[] = $newalias;
write_config();
$createdalias = true;
}
}
}
if ($_POST) {
unset($input_errors);
$reqdfields = explode(" ", "host");
$reqdfieldsn = explode(",", "Host");
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
if (!is_hostname($host) && !is_ipaddr($host)) { if (!is_hostname($host) && !is_ipaddr($host)) {
$input_errors[] = gettext("Host must be a valid hostname or IP address."); $input_errors[] = gettext("Host must be a valid hostname or IP address.");
} else { } else {
// Test resolution speed of each DNS server. // Test resolution speed of each DNS server.
$dns_speeds = array();
$dns_servers = array(); $dns_servers = array();
exec("/usr/bin/grep nameserver /etc/resolv.conf | /usr/bin/cut -f2 -d' '", $dns_servers); exec("/usr/bin/grep nameserver /etc/resolv.conf | /usr/bin/cut -f2 -d' '", $dns_servers);
foreach ($dns_servers as $dns_server) { foreach ($dns_servers as $dns_server) {
$query_time = exec("/usr/bin/drill {$host_esc} " . escapeshellarg("@" . trim($dns_server)) . " | /usr/bin/grep Query | /usr/bin/cut -d':' -f2"); $query_time = exec("/usr/bin/drill {$host_esc} " . escapeshellarg("@" . trim($dns_server)) . " | /usr/bin/grep Query | /usr/bin/cut -d':' -f2");
if($query_time == "") if ($query_time == "") {
$query_time = gettext("No response"); $query_time = gettext("No response");
$new_qt = array(); }
$new_qt['dns_server'] = $dns_server; $dns_speeds[] = array('dns_server' => $dns_server, 'query_time' => $query_time);
$new_qt['query_time'] = $query_time;
$dns_speeds[] = $new_qt;
unset($new_qt);
} }
} }
$type = "unknown";
$resolved = "";
$ipaddr = ""; $ipaddr = "";
$hostname = ""; if (count($input_errors) == 0) {
if (!$input_errors) {
if (is_ipaddr($host)) { if (is_ipaddr($host)) {
$type = "ip"; $resolved[] = " " . gethostbyaddr($host); // add a space to provide an empty type field
$resolved = gethostbyaddr($host);
$ipaddr = $host; $ipaddr = $host;
if ($host != $resolved)
$hostname = $resolved;
} elseif (is_hostname($host)) { } elseif (is_hostname($host)) {
$type = "hostname"; exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep 'IN' | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $4 \" \" $5 }'", $resolved);
$resolved = gethostbyname($host); $ipaddr = explode(" ", $resolved[count($resolved)-1])[1];
if($resolved) {
$resolved = array();
exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved);
} }
$hostname = $host;
if ($host != $resolved)
$ipaddr = $resolved[0];
}
if ($host == $resolved) {
$resolved = gettext("No record found");
}
}
}
function display_host_results ($address,$hostname,$dns_speeds) {
$map_lengths = function($element) { return strlen($element[0]); };
echo gettext("IP Address") . ": {$address} \n";
echo gettext("Host Name") . ": {$hostname} \n";
echo "\n";
$text_table = array();
$text_table[] = array(gettext("Server"), gettext("Query Time"));
if (is_array($dns_speeds)) {
foreach ($dns_speeds as $qt) {
$text_table[] = array(trim($qt['dns_server']), trim($qt['query_time']));
}
}
$col0_padlength = max(array_map($map_lengths, $text_table)) + 4;
foreach ($text_table as $text_row) {
echo str_pad($text_row[0], $col0_padlength) . $text_row[1] . "\n";
} }
} }
include("head.inc"); ?> include("head.inc"); ?>
<body> <body>
<?php include("fbegin.inc"); ?> <?php include("fbegin.inc"); ?>
<section class="page-content-main"> <section class="page-content-main">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<form method="post" name="iform" id="iform">
<form action="<?=$_SERVER['REQUEST_URI'];?>" method="post" name="iform" id="iform">
<section class="col-xs-12"> <section class="col-xs-12">
<div class="content-box"> <div class="content-box">
<?php if (isset($input_errors) && count($input_errors) > 0) print_input_errors($input_errors); ?> <?php if (isset($input_errors) && count($input_errors) > 0) print_input_errors($input_errors); ?>
<header class="content-box-head container-fluid"> <header class="content-box-head container-fluid">
<h3><?=gettext("Resolve DNS hostname or IP");?></h3> <h3><?=gettext("Resolve DNS hostname or IP");?></h3>
</header> </header>
<div class="content-box-main">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped"> <table class="table table-striped">
<tbody> <tbody>
<tr> <tr>
<td><?=gettext("Hostname or IP");?></td> <td><?=gettext("Hostname or IP");?></td>
<td><input name="host" type="text" class="form-control" id="host" size="20" value="<?=htmlspecialchars($host);?>" /></td>
<?php if ($resolved && $type): ?>
<td> <td>
<?php <input name="host" type="text" value="<?=htmlspecialchars($host);?>" />
$found = 0;
if(is_array($resolved)) {
foreach($resolved as $hostitem) {
if($hostitem <> "") {
echo $hostitem . "<br />";
$found++;
}
}
} else {
echo $resolved;
}
?>
</td> </td>
</tr>
<?php
if (count($resolved) > 0):?>
<tr>
<td><?=gettext("Response");?></td>
<td> <td>
<?php if($found > 0): ?> <table class="table table-striped table-condensed">
<?php if($alias_exists): ?> <tr>
<?= sprintf(gettext('An alias already exists for the hostname %s.'), htmlspecialchars($host)) ?>. <br /> <th><?=gettext("Type");?></th>
<input type="hidden" name="override" value="true"/> <th><?=gettext("Address");?></th>
<input type="submit" class="btn btn-default" name="create_alias" value="Overwrite Alias"/> </tr>
<?php else: ?> <?php
<?php if(!$createdalias): ?> foreach($resolved as $hostitem):?>
<input type="submit" class="btn btn-default" name="create_alias" value="Create Alias"/> <tr>
<?php else: ?> <td><?=explode(' ',$hostitem)[0];?></td>
<?= sprintf(gettext('Alias created with name %s.'), htmlspecialchars($newalias['name'])) ?> <td><?=explode(' ',$hostitem)[1];?></td>
<?php endif; endif; endif; ?> </tr>
<?php
endforeach;?>
</table>
</td> </td>
<?php else: ?>
<td></td><td></td>
<?php endif; ?>
</tr> </tr>
<?php if (!empty($_POST)): ?>
<tr> <tr>
<td><?=gettext("Resolution time per server");?></td> <td><?=gettext("Resolution time per server");?></td>
<td colspan="3"> <td colspan="2">
<table class="table table-striped table-condensed">
<table class="table table-striped">
<tr> <tr>
<th><?=gettext("Server");?></th> <th><?=gettext("Server");?></th>
<th><?=gettext("Query time");?></th> <th><?=gettext("Query time");?></th>
</tr> </tr>
<?php if(is_array($dns_speeds)): foreach($dns_speeds as $qt): ?>
<?php
foreach($dns_speeds as $qt): ?>
<tr> <tr>
<td> <td><?=$qt['dns_server']?></td>
<?=$qt['dns_server']?> <td><?=$qt['query_time']?></td>
</td>
<td>
<?=$qt['query_time']?>
</td>
</tr> </tr>
<?php endforeach; endif; ?> <?php
endforeach; ?>
</table> </table>
</td> </td>
</tr> </tr>
<?php endif; ?> <?php
<?php if (!$input_errors && $ipaddr): ?> endif;
if (!empty($ipaddr)):?>
<tr> <tr>
<td><?=gettext("More Information:");?></td> <td><?=gettext("More Information:");?></td>
<td colspan="3"><a href ="/diag_ping.php?host=<?=htmlspecialchars($host)?>&amp;interface=wan&amp;count=3"><?=gettext("Ping");?></a> <br /> <td>
<a href ="/diag_ping.php?host=<?=htmlspecialchars($host)?>&amp;interface=wan&amp;count=3"><?=gettext("Ping");?></a> <br />
<a href ="/diag_traceroute.php?host=<?=htmlspecialchars($host)?>&amp;ttl=18"><?=gettext("Traceroute");?></a> <a href ="/diag_traceroute.php?host=<?=htmlspecialchars($host)?>&amp;ttl=18"><?=gettext("Traceroute");?></a>
<p> <p>
<?=gettext("NOTE: The following links are to external services, so their reliability cannot be guaranteed.");?><br /><br /> <?=gettext("NOTE: The following links are to external services, so their reliability cannot be guaranteed.");?><br /><br />
<a target="_blank" href="http://private.dnsstuff.com/tools/whois.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP WHOIS @ DNS Stuff");?></a><br /> <a target="_blank" href="http://private.dnsstuff.com/tools/whois.ch?ip=<?=$ipaddr; ?>"><?=gettext("IP WHOIS @ DNS Stuff");?></a><br />
<a target="_blank" href="http://private.dnsstuff.com/tools/ipall.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a> <a target="_blank" href="http://private.dnsstuff.com/tools/ipall.ch?ip=<?=$ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a>
</p> </p>
</td> </td>
</tr> </tr>
<?php endif; ?> <?php
endif; ?>
</tbody> </tbody>
<tfoot>
<tr>
<td></td>
<td>
<input type="submit" class="btn btn-primary btn-fixed" value="<?=gettext("DNS Lookup");?>" />
</td>
</tr>
</tfoot>
</table> </table>
</div> </div>
<div class="container-fluid">
<input type="submit" class="btn btn-primary btn-fixed pull-right" value="<?=gettext("DNS Lookup");?>" />
</div>
</div>
</div> </div>
</section> </section>
</form> </form>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment