Commit a7e43fcc authored by Ad Schellevis's avatar Ad Schellevis

(legacy) refactor diag_dns.php

parent 55743152
<?php
/*
Copyright (C) 2014 Deciso B.V.
Copyright (C) 2016 Deciso B.V.
Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
All rights reserved.
......@@ -29,242 +29,130 @@
require_once("guiconfig.inc");
$host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'");
$host_esc = escapeshellarg($host);
if (isset($config['aliases']['alias']) && is_array($config['aliases']['alias'])) {
$a_aliases = &$config['aliases']['alias'];
} 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);
$resolved = array();
$dns_speeds = array();
if (!empty($_REQUEST['host'])) {
$host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'");
$host_esc = escapeshellarg($host);
if (!is_hostname($host) && !is_ipaddr($host)) {
$input_errors[] = gettext("Host must be a valid hostname or IP address.");
} else {
// Test resolution speed of each DNS server.
$dns_speeds = array();
$dns_servers = array();
exec("/usr/bin/grep nameserver /etc/resolv.conf | /usr/bin/cut -f2 -d' '", $dns_servers);
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");
if($query_time == "")
if ($query_time == "") {
$query_time = gettext("No response");
$new_qt = array();
$new_qt['dns_server'] = $dns_server;
$new_qt['query_time'] = $query_time;
$dns_speeds[] = $new_qt;
unset($new_qt);
}
$dns_speeds[] = array('dns_server' => $dns_server, 'query_time' => $query_time);
}
}
$type = "unknown";
$resolved = "";
$ipaddr = "";
$hostname = "";
if (!$input_errors) {
if (count($input_errors) == 0) {
if (is_ipaddr($host)) {
$type = "ip";
$resolved = gethostbyaddr($host);
$resolved[] = " " . gethostbyaddr($host); // add a space to provide an empty type field
$ipaddr = $host;
if ($host != $resolved)
$hostname = $resolved;
} elseif (is_hostname($host)) {
$type = "hostname";
$resolved = gethostbyname($host);
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);
exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep 'IN' | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $4 \" \" $5 }'", $resolved);
$ipaddr = explode(" ", $resolved[count($resolved)-1])[1];
}
$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"); ?>
<body>
<?php include("fbegin.inc"); ?>
<section class="page-content-main">
<div class="container-fluid">
<div class="row">
<form action="<?=$_SERVER['REQUEST_URI'];?>" method="post" name="iform" id="iform">
<form method="post" name="iform" id="iform">
<section class="col-xs-12">
<div class="content-box">
<?php if (isset($input_errors) && count($input_errors) > 0) print_input_errors($input_errors); ?>
<header class="content-box-head container-fluid">
<h3><?=gettext("Resolve DNS hostname or IP");?></h3>
</header>
<div class="content-box-main">
<div class="table-responsive">
<table class="table table-striped">
<tbody>
<tr>
<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>
<?php
$found = 0;
if(is_array($resolved)) {
foreach($resolved as $hostitem) {
if($hostitem <> "") {
echo $hostitem . "<br />";
$found++;
}
}
} else {
echo $resolved;
}
?>
<input name="host" type="text" value="<?=htmlspecialchars($host);?>" />
</td>
</tr>
<?php
if (count($resolved) > 0):?>
<tr>
<td><?=gettext("Response");?></td>
<td>
<?php if($found > 0): ?>
<?php if($alias_exists): ?>
<?= sprintf(gettext('An alias already exists for the hostname %s.'), htmlspecialchars($host)) ?>. <br />
<input type="hidden" name="override" value="true"/>
<input type="submit" class="btn btn-default" name="create_alias" value="Overwrite Alias"/>
<?php else: ?>
<?php if(!$createdalias): ?>
<input type="submit" class="btn btn-default" name="create_alias" value="Create Alias"/>
<?php else: ?>
<?= sprintf(gettext('Alias created with name %s.'), htmlspecialchars($newalias['name'])) ?>
<?php endif; endif; endif; ?>
<table class="table table-striped table-condensed">
<tr>
<th><?=gettext("Type");?></th>
<th><?=gettext("Address");?></th>
</tr>
<?php
foreach($resolved as $hostitem):?>
<tr>
<td><?=explode(' ',$hostitem)[0];?></td>
<td><?=explode(' ',$hostitem)[1];?></td>
</tr>
<?php
endforeach;?>
</table>
</td>
<?php else: ?>
<td></td><td></td>
<?php endif; ?>
</tr>
<?php if (!empty($_POST)): ?>
<tr>
<td><?=gettext("Resolution time per server");?></td>
<td colspan="3">
<table class="table table-striped">
<td colspan="2">
<table class="table table-striped table-condensed">
<tr>
<th><?=gettext("Server");?></th>
<th><?=gettext("Query time");?></th>
</tr>
<?php if(is_array($dns_speeds)): foreach($dns_speeds as $qt): ?>
<?php
foreach($dns_speeds as $qt): ?>
<tr>
<td>
<?=$qt['dns_server']?>
</td>
<td>
<?=$qt['query_time']?>
</td>
<td><?=$qt['dns_server']?></td>
<td><?=$qt['query_time']?></td>
</tr>
<?php endforeach; endif; ?>
<?php
endforeach; ?>
</table>
</td>
</tr>
<?php endif; ?>
<?php if (!$input_errors && $ipaddr): ?>
<?php
endif;
if (!empty($ipaddr)):?>
<tr>
<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>
<p>
<?=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/ipall.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a>
<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=<?=$ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a>
</p>
</td>
</tr>
<?php endif; ?>
<?php
endif; ?>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<input type="submit" class="btn btn-primary btn-fixed" value="<?=gettext("DNS Lookup");?>" />
</td>
</tr>
</tfoot>
</table>
</div>
<div class="container-fluid">
<input type="submit" class="btn btn-primary btn-fixed pull-right" value="<?=gettext("DNS Lookup");?>" />
</div>
</div>
</div>
</section>
</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