summaryrefslogtreecommitdiffstats
path: root/usr/local/www/diag_traceroute.php
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2013-04-02 11:46:21 -0400
committerjim-p <jimp@pfsense.org>2013-04-02 11:50:17 -0400
commit643bc7b01fc53409872728d0c1b2955cfe34bfcf (patch)
tree6a5e7fe77b01a45ee0f377ccc391e64610603d9a /usr/local/www/diag_traceroute.php
parentdbd182af2eeadd00897d6406e8a451e9e01d700e (diff)
downloadpfsense-643bc7b01fc53409872728d0c1b2955cfe34bfcf.zip
pfsense-643bc7b01fc53409872728d0c1b2955cfe34bfcf.tar.gz
Fix up traceroute page to allow it to use all possible source addresses, add selection for IPv4/IPv6, allow autocomplete, clean up HTML/whitespace, correct output formatting.
Diffstat (limited to 'usr/local/www/diag_traceroute.php')
-rwxr-xr-xusr/local/www/diag_traceroute.php189
1 files changed, 115 insertions, 74 deletions
diff --git a/usr/local/www/diag_traceroute.php b/usr/local/www/diag_traceroute.php
index 31dd376..467138b 100755
--- a/usr/local/www/diag_traceroute.php
+++ b/usr/local/www/diag_traceroute.php
@@ -28,7 +28,7 @@
POSSIBILITY OF SUCH DAMAGE.
*/
-/*
+/*
pfSense_BUILDER_BINARIES: /usr/sbin/traceroute
pfSense_MODULE: routing
*/
@@ -42,6 +42,7 @@
require("guiconfig.inc");
+$allowautocomplete = true;
$pgtitle = array(gettext("Diagnostics"),gettext("Traceroute"));
include("head.inc");
@@ -65,11 +66,16 @@ if ($_POST || $_REQUEST['host']) {
if (($_REQUEST['ttl'] < 1) || ($_REQUEST['ttl'] > MAX_TTL)) {
$input_errors[] = sprintf(gettext("Maximum number of hops must be between 1 and %s"), MAX_TTL);
}
+ $host = trim($_REQUEST['host']);
+ $ipproto = $_REQUEST['ipproto'];
+ if (($ipproto == "ipv4") && is_ipaddrv6($host))
+ $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname.");
+ if (($ipproto == "ipv6") && is_ipaddrv4($host))
+ $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname.");
if (!$input_errors) {
- $gateway = $_REQUEST['gateway'];
+ $sourceip = $_REQUEST['sourceip'];
$do_traceroute = true;
- $host = $_REQUEST['host'];
$ttl = $_REQUEST['ttl'];
$resolve = $_REQUEST['resolve'];
}
@@ -84,76 +90,111 @@ if (!isset($do_traceroute)) {
?>
<?php if ($input_errors) print_input_errors($input_errors); ?>
- <form action="diag_traceroute.php" method="post" name="iform" id="iform">
- <table width="100%" border="0" cellpadding="6" cellspacing="0">
- <tr>
- <td colspan="2" valign="top" class="listtopic"><?=gettext("Traceroute");?></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Host");?></td>
- <td width="78%" class="vtable">
- <?=$mandfldhtml;?><input name="host" type="text" class="formfld" id="host" size="20" value="<?=htmlspecialchars($host);?>"></td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
- <td width="78%" class="vtable">
- <select name="gateway" class="formfld">
- <option value="default" <?php echo ($interface == "default" ? "selected" : "") ?>>Default</option>
- <?php $gateways = return_gateways_array();
- foreach ($gateways as $gwname => $gwitem): ?>
- <option value="<?=$gwitem['interface'];?>" <?php if (!link_interface_to_bridge($gwitem['friendlyiface']) && $gwitem['interface'] == $gateway) echo "selected"; ?>>
- <?=htmlspecialchars($gwname);?>
- </option>
- <?php endforeach; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Maximum number of hops");?></td>
- <td width="78%" class="vtable">
- <select name="ttl" class="formfld" id="ttl">
- <?php for ($i = 1; $i <= MAX_TTL; $i++): ?>
- <option value="<?=$i;?>" <?php if ($i == $ttl) echo "selected"; ?>><?=$i;?></option>
- <?php endfor; ?>
- </select>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Reverse Address Lookup");?></td>
- <td width="78%" class="vtable">
- <input name="resolve" type="checkbox"<?php echo (!isset($resolve) ? "" : " CHECKED"); ?>>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("Use ICMP");?></td>
- <td width="78%" class="vtable">
- <input name="useicmp" type="checkbox"<?php if($_REQUEST['useicmp']) echo " CHECKED"; ?>>
- </td>
- </tr>
- <tr>
- <td width="22%" valign="top">&nbsp;</td>
- <td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Traceroute");?>">
- </td>
- </tr>
- <tr>
- <td valign="top" colspan="2">
- <p><span class="vexpl"><span class="red"><b><?=gettext("Note: ");?></b></span><?=gettext("Traceroute may take a while to complete. You may hit the Stop button on your browser at any time to see the progress of failed traceroutes.");?></span><p>
- <?php if ($do_traceroute) {
- echo "<font face='terminal' size='2'>";
- echo("<br><strong>" . gettext("Traceroute output:") . "</strong><br>");
- echo('<pre>');
- ob_end_flush();
- $useicmp = isset($_REQUEST['useicmp']) ? "-I" : "";
- $srcint = ($gateway != "default") ? "-i " . escapeshellarg(get_real_interface($gateway)) : "";
- $n = isset($resolve) ? "" : "-n";
- system("/usr/sbin/traceroute $n $srcint $useicmp -w 2 -m " . escapeshellarg($ttl) . " " . escapeshellarg($host));
- system("/usr/sbin/traceroute6 $n $srcint $useicmp -w 2 -m " . escapeshellarg($ttl) . " " . escapeshellarg($host));
- echo('</pre>');
- }
- ?>
- </td>
- </tr>
- </table>
+<form action="diag_traceroute.php" method="post" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="6" cellspacing="0">
+<tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Traceroute");?></td>
+</tr>
+<tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Host");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="host" type="text" class="formfld" id="host" size="20" value="<?=htmlspecialchars($host);?>"></td>
+</tr>
+<tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ipproto" class="formselect">
+ <option value="ipv4" <?php if ($ipproto == "ipv4") echo 'selected="selected"' ?>>IPv4</option>
+ <option value="ipv6" <?php if ($ipproto == "ipv6") echo 'selected="selected"' ?>>IPv6</option>
+ </select>
+ </td>
+</tr>
+<tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="sourceip" class="formselect">
+ <option value="">Any</option>
+ <?php $sourceips = get_possible_traffic_source_addresses();
+ foreach ($sourceips as $sip):
+ $selected = "";
+ if (!link_interface_to_bridge($sip['value']) && ($sip['value'] == $sourceip))
+ $selected = 'selected="selected"';
+ ?>
+ <option value="<?=$sip['value'];?>" <?=$selected;?>>
+ <?=htmlspecialchars($sip['name']);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+</tr>
+<tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Maximum number of hops");?></td>
+ <td width="78%" class="vtable">
+ <select name="ttl" class="formfld" id="ttl">
+ <?php for ($i = 1; $i <= MAX_TTL; $i++): ?>
+ <option value="<?=$i;?>" <?php if ($i == $ttl) echo "selected"; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ </td>
+</tr>
+<tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Reverse Address Lookup");?></td>
+ <td width="78%" class="vtable">
+ <input name="resolve" type="checkbox"<?php echo (!isset($resolve) ? "" : " CHECKED"); ?>>
+ </td>
+</tr>
+<tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Use ICMP");?></td>
+ <td width="78%" class="vtable">
+ <input name="useicmp" type="checkbox"<?php if($_REQUEST['useicmp']) echo " CHECKED"; ?>>
+ </td>
+</tr>
+<tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Traceroute");?>">
+ </td>
+</tr>
+<tr>
+ <td valign="top" colspan="2">
+ <span class="vexpl">
+ <span class="red"><b><?=gettext("Note: ");?></b></span>
+ <?=gettext("Traceroute may take a while to complete. You may hit the Stop button on your browser at any time to see the progress of failed traceroutes.");?>
+ <br/><br/>
+ <?=gettext("Using a source interface/IP address that does not match selected type (IPv4, IPv6) will result in an error or empty output.");?>
+ </span>
+ </td>
+</tr>
+<tr>
+ <td valign="top" colspan="2">
+<?php
+if ($do_traceroute) {
+ echo "<font face='terminal' size='2'>\n";
+ echo "<strong>" . gettext("Traceroute output:") . "</strong><br />\n";
+ ob_end_flush();
+ echo "<pre>\n";
+ $useicmp = isset($_REQUEST['useicmp']) ? "-I" : "";
+ $n = isset($resolve) ? "" : "-n";
+
+ $command = "/usr/sbin/traceroute";
+ if ($ipproto == "ipv6") {
+ $command .= "6";
+ $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip);
+ } else {
+ $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip);
+ }
+
+ if ($ifaddr && (is_ipaddr($host) || is_hostname($host)))
+ $srcip = "-s " . escapeshellarg($ifaddr);
+
+ $cmd = "{$command} {$n} {$srcip} -w 2 -m " . escapeshellarg($ttl) . " " . escapeshellarg($host);
+
+ //echo "Traceroute command: {$cmd}\n";
+ system($cmd);
+ echo "</pre>\n";
+} ?>
+ </td>
+</tr>
+</table>
</form>
<?php include("fend.inc"); ?>
OpenPOWER on IntegriCloud