Project

General

Profile

Download (7.75 KB) Statistics
| Branch: | Tag: | Revision:
1 737ed7d1 jim-p
<?php
2
/*
3
	diag_dns.php
4
5
	Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
6
	All rights reserved.
7
8
	Redistribution and use in source and binary forms, with or without
9
	modification, are permitted provided that the following conditions are met:
10
11
	1. Redistributions of source code must retain the above copyright notice,
12
	this list of conditions and the following disclaimer.
13
14
	2. Redistributions in binary form must reproduce the above copyright
15
	notice, this list of conditions and the following disclaimer in the
16
	documentation and/or other materials provided with the distribution.
17
18
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
22
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
	POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30 13d193c2 Scott Ullrich
/*
31
	pfSense_MODULE:	dns
32
*/
33
34 09128488 Vinicius Coque
$pgtitle = array(gettext("Diagnostics"),gettext("DNS Lookup"));
35 737ed7d1 jim-p
require("guiconfig.inc");
36
37
/* Cheap hack to support both $_GET and $_POST */
38
if ($_GET['host'])
39
	$_POST = $_GET;
40
41 e55d4b3c Scott Ullrich
if($_GET['createalias'] == "true") {
42
	$host = trim($_POST['host']);
43
	if($_GET['override'])
44
		$override = true;
45
	$a_aliases = &$config['aliases']['alias'];
46
	$type = "hostname";
47
	$resolved = gethostbyname($host);
48
	if($resolved) {
49
		$host = trim($_POST['host']);
50
		$dig=`dig "$host" A | grep "$host" | grep -v ";" | awk '{ print $5 }'`;
51
		$resolved = split("\n", $dig);
52
		$isfirst = true;
53
		foreach($resolved as $re) {
54 7a87cb97 Scott Ullrich
			if($re <> "") {
55
				if(!$isfirst) 
56
					$addresses .= " ";
57
				$addresses .= $re . "/32";
58
				$isfirst = false;
59
			}
60 e55d4b3c Scott Ullrich
		}
61
		$newalias = array();
62
		$aliasname = str_replace(array(".","-"), "_", $host);
63
		$alias_exists = false;
64
		$counter=0;
65
		foreach($a_aliases as $a) {
66
			if($a['name'] == $aliasname) {
67
				$alias_exists = true;
68
				$id=$counter;
69
			}
70
			$counter++;
71
		}
72
		if($override) 
73
			$alias_exists = false;
74
		if($alias_exists == false) {
75 705c72ea Scott Ullrich
			$newalias['name'] = $aliasname;
76 e1f6a0d9 Scott Ullrich
			$newalias['type'] = "network";
77 e55d4b3c Scott Ullrich
			$newalias['address'] = $addresses;
78
			$newalias['descr'] = "Created from Diagnostics-> DNS Lookup";
79
			if($override) 
80
				$a_aliases[$id] = $newalias;
81
			else
82
				$a_aliases[] = $newalias;
83
			write_config();
84
			$createdalias = true;
85
		}
86
	}
87
}
88
89 737ed7d1 jim-p
if ($_POST) {
90
	unset($input_errors);
91
92
	$reqdfields = explode(" ", "host");
93
	$reqdfieldsn = explode(",", "Host");
94
95
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
96
	$host = trim($_POST['host']);
97 b97c5ed6 sullrich
	$host_esc = escapeshellarg(trim($_POST['host']));
98
	
99 c1aa682e Chris Buechler
	if (!is_hostname($host) && !is_ipaddr($host)) 
100 ee91ae30 jean.feltrin
		$input_errors[] = gettext("Host must be a valid hostname or IP address.");
101 86ab47ff sullrich
102
	// Test resolution speed of each DNS server.
103
	if ((is_hostname($host) || is_ipaddr($host))) {
104
		$dns_speeds = array();
105
		list($pconfig['dns1'],$pconfig['dns2'],$pconfig['dns3'],$pconfig['dns4']) = $config['system']['dnsserver'];
106
		for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
107
			$dns_server = $pconfig['dns' . $dnscounter];
108 b97c5ed6 sullrich
			$query_time = `dig {$host_esc} @{$dns_server} | grep Query | cut -d':' -f2`;
109 77f87165 sullrich
			if($query_time == "")
110 ee91ae30 jean.feltrin
				$query_time = gettext("No response");
111 86ab47ff sullrich
			$new_qt = array();
112
			$new_qt['dns_server'] = $dns_server;
113 77f87165 sullrich
			$new_qt['query_time'] = $query_time;			
114 86ab47ff sullrich
			$dns_speeds[] = $new_qt;
115
			unset($new_qt);
116
		}
117 737ed7d1 jim-p
	}
118
119 da652a46 Vinicius Coque
	$type = "unknown";
120 737ed7d1 jim-p
	$resolved = "";
121 2312b0eb jim-p
	$ipaddr = "";
122
	$hostname = "";
123 737ed7d1 jim-p
	if (!$input_errors) {
124
		if (is_ipaddr($host)) {
125
			$type = "ip";
126
			$resolved = gethostbyaddr($host);
127 2312b0eb jim-p
			$ipaddr = $host;
128
			if ($host != $resolved)
129
				$hostname = $resolved;
130 737ed7d1 jim-p
		} elseif (is_hostname($host)) {
131
			$type = "hostname";
132
			$resolved = gethostbyname($host);
133 c43f732a Scott Ullrich
			if($resolved) {
134
				$dig=`dig "$host" A | grep "$host" | grep -v ";" | awk '{ print $5 }'`;
135
				$resolved = split("\n", $dig);
136
			}
137 2312b0eb jim-p
			$hostname = $host;
138
			if ($host != $resolved)
139 3e85ac2b Scott Ullrich
				$ipaddr = $resolved[0];
140 737ed7d1 jim-p
		}
141
142
		if ($host == $resolved) {
143 ee91ae30 jean.feltrin
			$resolved = gettext("No record found");
144 737ed7d1 jim-p
		}
145
	}
146
}
147
148
include("head.inc"); ?>
149
<body link="#000000" vlink="#000000" alink="#000000">
150
<? include("fbegin.inc"); ?>
151
<table width="100%" border="0" cellpadding="0" cellspacing="0">
152
        <tr>
153
                <td>
154
<?php if ($input_errors) print_input_errors($input_errors); ?>
155
	<form action="diag_dns.php" method="post" name="iform" id="iform">
156
	  <table width="100%" border="0" cellpadding="6" cellspacing="0">
157 4c7e2f4e sullrich
		<tr>
158 ee91ae30 jean.feltrin
			<td colspan="2" valign="top" class="listtopic"> <?=gettext("Resolve DNS hostname or IP");?></td>
159 4c7e2f4e sullrich
		</tr>
160 737ed7d1 jim-p
        <tr>
161 da652a46 Vinicius Coque
		  <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP");?></td>
162 737ed7d1 jim-p
		  <td width="78%" class="vtable">
163 a812abb3 Scott Ullrich
            <?=$mandfldhtml;?>
164
			<table>
165
				<tr><td valign="top">
166
			<input name="host" type="text" class="formfld" id="host" size="20" value="<?=htmlspecialchars($host);?>">
167
			</td>
168
			<td>
169 737ed7d1 jim-p
			<? if ($resolved && $type) { ?>
170 a812abb3 Scott Ullrich
			=  <font size="+1">
171
<?php
172 3a6dc294 Scott Ullrich
				$found = 0;
173 a812abb3 Scott Ullrich
				if(is_array($resolved)) { 
174
					foreach($resolved as $hostitem) {
175 3a6dc294 Scott Ullrich
						if($hostitem <> "") {
176
							echo $hostitem . "<br/>";
177
							$found++;
178
						}
179 a812abb3 Scott Ullrich
					}
180
				} else {
181
					echo $resolved; 
182
				} 
183 3a6dc294 Scott Ullrich
				if($found > 0) {
184
					if($alias_exists) {
185 68d98ce3 Scott Ullrich
						echo "<br/><font size='-2'>An alias already exists for the hostname {$host}.  To overwrite, click <a href='diag_dns.php?host=" . trim(urlencode($host)) . "&createalias=true&override=true'>here</a>.";
186 3a6dc294 Scott Ullrich
					} else { 
187
						if(!$createdalias) {
188 68d98ce3 Scott Ullrich
							echo "<br/><font size='-2'><a href='diag_dns.php?host=" . trim(urlencode($host)) . "&createalias=true'>Create alias</a> out of these entries.";
189 3a6dc294 Scott Ullrich
						} else {
190 68d98ce3 Scott Ullrich
							echo "<br/><font size='-2'>Alias created with name {$newalias['name']}";
191 3a6dc294 Scott Ullrich
						}
192 e55d4b3c Scott Ullrich
					}
193
				}
194 a812abb3 Scott Ullrich
?>
195
				<font size="-1>">
196 e55d4b3c Scott Ullrich
197 737ed7d1 jim-p
			<?	} ?>
198 a812abb3 Scott Ullrich
			</td></tr></table>
199 737ed7d1 jim-p
		  </td>
200
		</tr>
201 37d98ce7 sullrich
<?php		if($_POST): ?>
202 86ab47ff sullrich
		<tr>
203 ee91ae30 jean.feltrin
		  <td width="22%" valign="top" class="vncell"><?=gettext("Resolution time per server");?></td>
204 86ab47ff sullrich
		  <td width="78%" class="vtable">
205 87fa30ba sullrich
				<table width="170" border="1" cellpadding="2" style="border-width: 1px 1px 1px 1px; border-collapse: collapse;">
206 86ab47ff sullrich
					<tr>
207
						<td>
208 ee91ae30 jean.feltrin
							<b><?=gettext("Server");?></b>
209 86ab47ff sullrich
						</td>
210
						<td>
211 da652a46 Vinicius Coque
							<b><?=gettext("Query time");?></b>
212 86ab47ff sullrich
						</td>
213
					</tr>
214
<?php
215
					if(is_array($dns_speeds)) 
216
						foreach($dns_speeds as $qt):
217
?>
218
					<tr>
219
						<td>
220
							<?=$qt['dns_server']?>
221
						</td>
222
						<td>
223
							<?=$qt['query_time']?>
224
						</td>
225
					</tr>
226
<?php
227
					endforeach;
228
?>
229
				</table>
230
		  </td>
231
		</tr>
232 37d98ce7 sullrich
		<?php endif; ?>
233 2312b0eb jim-p
		<?php if (!$input_errors && $ipaddr) { ?>
234
		<tr>
235 ee91ae30 jean.feltrin
			<td width="22%" valign="top"  class="vncell"><?=gettext("More Information:");?></td>
236 2312b0eb jim-p
			<td width="78%" class="vtable">
237 ee91ae30 jean.feltrin
				<a target="_new" href ="/diag_ping.php?host=<?=$host?>&interface=wan&count=3"><?=gettext("Ping");?></a> <br/>
238
				<a target="_new" href ="/diag_traceroute.php?host=<?=$host?>&ttl=18"><?=gettext("Traceroute");?></a>
239 b8cc74ed sullrich
				<p/>
240 ee91ae30 jean.feltrin
				<?=gettext("NOTE: The following links are to external services, so their reliability cannot be guaranteed.");?><br/><br/>
241
				<a target="_new" href="http://private.dnsstuff.com/tools/whois.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP WHOIS @ DNS Stuff");?></a><br />
242 09128488 Vinicius Coque
				<a target="_new" href="http://private.dnsstuff.com/tools/ipall.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a>
243 2312b0eb jim-p
			</td>
244
		</tr>
245
		<?php } ?>
246 737ed7d1 jim-p
		<tr>
247
		  <td width="22%" valign="top">&nbsp;</td>
248
		  <td width="78%">
249 b97c5ed6 sullrich
			<br/>&nbsp;
250 ee91ae30 jean.feltrin
            <input name="Submit" type="submit" class="formbtn" value="<?=gettext("DNS Lookup");?>">
251 737ed7d1 jim-p
		</td>
252
		</tr>
253
	</table>
254
</form>
255
</td></tr></table>
256
<?php include("fend.inc"); ?>