summaryrefslogtreecommitdiffstats
path: root/src/usr/local/www/bandwidth_by_ip.php
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2015-08-26 15:12:02 -0300
committerRenato Botelho <renato@netgate.com>2015-08-26 15:12:02 -0300
commit03b19a93f4d8d870507ee96121cee4acd748dd2a (patch)
tree71a34e9e7e73d13de21cb4ad831799fb10c30df4 /src/usr/local/www/bandwidth_by_ip.php
parent7f410a121522c5d0e2660256ae50c1fde1df3645 (diff)
parent30ce58ac1ea27b758d5112cb5a3b190c9760f010 (diff)
downloadpfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.zip
pfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.tar.gz
Merge branch 'master' into bootstrap
Diffstat (limited to 'src/usr/local/www/bandwidth_by_ip.php')
-rwxr-xr-xsrc/usr/local/www/bandwidth_by_ip.php152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/usr/local/www/bandwidth_by_ip.php b/src/usr/local/www/bandwidth_by_ip.php
new file mode 100755
index 0000000..9f8cc6c
--- /dev/null
+++ b/src/usr/local/www/bandwidth_by_ip.php
@@ -0,0 +1,152 @@
+<?php
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ *
+ */
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/bin/rate
+ pfSense_MODULE: trafficgraph
+*/
+
+require_once('guiconfig.inc');
+require_once('interfaces.inc');
+require_once('pfsense-utils.inc');
+require_once('util.inc');
+
+$listedIPs = "";
+
+//get interface IP and break up into an array
+$interface = $_GET['if'];
+$real_interface = get_real_interface($interface);
+if (!does_interface_exist($real_interface)) {
+ echo gettext("Wrong Interface");
+ return;
+}
+
+$intip = find_interface_ip($real_interface);
+//get interface subnet
+$netmask = find_interface_subnet($real_interface);
+$intsubnet = gen_subnet($intip, $netmask) . "/$netmask";
+
+// see if they want local, remote or all IPs returned
+$filter = $_GET['filter'];
+
+if ($filter == "") {
+ $filter = "local";
+}
+
+if ($filter == "local") {
+ $ratesubnet = "-c " . $intsubnet;
+} else {
+ // Tell the rate utility to consider the whole internet (0.0.0.0/0)
+ // and to consider local "l" traffic - i.e. traffic within the whole internet
+ // then we can filter the resulting output as we wish below.
+ $ratesubnet = "-lc 0.0.0.0/0";
+}
+
+//get the sort method
+$sort = $_GET['sort'];
+if ($sort == "out") {
+ $sort_method = "-T";
+} else {
+ $sort_method = "-R";
+}
+
+// get the desired format for displaying the host name or IP
+$hostipformat = $_GET['hostipformat'];
+$iplookup = array();
+// If hostname, description or FQDN is requested then load the locally-known IP address - host/description mappings into an array keyed by IP address.
+if ($hostipformat != "") {
+ if (is_array($config['dhcpd'])) {
+ // Build an array of static-mapped DHCP entries keyed by IP address.
+ foreach ($config['dhcpd'] as $ifdata) {
+ if (is_array($ifdata['staticmap'])) {
+ foreach ($ifdata['staticmap'] as $hostent) {
+ if (($hostent['ipaddr'] != "") && ($hostent['hostname'] != "")) {
+ if ($hostipformat == "descr" && $hostent['descr'] != "") {
+ $iplookup[$hostent['ipaddr']] = $hostent['descr'];
+ } else {
+ $iplookup[$hostent['ipaddr']] = $hostent['hostname'];
+ if ($hostipformat == "fqdn") {
+ $iplookup[$hostent['ipaddr']] .= "." . $config['system']['domain'];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // Add any DNS host override data keyed by IP address.
+ foreach (array('dnsmasq', 'unbound') as $dns_type) {
+ if (isset($config[$dns_type]['enable'])) {
+ if (is_array($config[$dns_type]['hosts'])) {
+ foreach ($config[$dns_type]['hosts'] as $hostent) {
+ if (($hostent['ip'] != "") && ($hostent['host'] != "")) {
+ if ($hostipformat == "descr" && $hostent['descr'] != "") {
+ $iplookup[$hostent['ip']] = $hostent['descr'];
+ } else {
+ $iplookup[$hostent['ip']] = $hostent['host'];
+ if ($hostipformat == "fqdn") {
+ $iplookup[$hostent['ip']] .= "." . $hostent['domain'];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+$_grb = exec("/usr/local/bin/rate -i {$real_interface} -nlq 1 -Aba 20 {$sort_method} {$ratesubnet} | tr \"|\" \" \" | awk '{ printf \"%s:%s:%s:%s:%s\\n\", $1, $2, $4, $6, $8 }'", $listedIPs);
+
+$someinfo = false;
+for ($x=2; $x<12; $x++) {
+
+ $bandwidthinfo = $listedIPs[$x];
+
+ // echo $bandwidthinfo;
+ $emptyinfocounter = 1;
+ if ($bandwidthinfo != "") {
+ $infoarray = explode (":", $bandwidthinfo);
+ if (($filter == "all") ||
+ (($filter == "local") && (ip_in_subnet($infoarray[0], $intsubnet))) ||
+ (($filter == "remote") && (!ip_in_subnet($infoarray[0], $intsubnet)))) {
+ if ($hostipformat == "") {
+ // pass back just the raw IP address
+ $addrdata = $infoarray[0];
+ } else {
+ // $hostipformat is one of "hostname", "descr" or "fqdn" - we want a text representation if we can get it.
+ if ($iplookup[$infoarray[0]] != "") {
+ // We have a local entry, so use it.
+ $addrdata = $iplookup[$infoarray[0]];
+ } else {
+ // Try to reverse lookup the IP address.
+ $addrdata = gethostbyaddr($infoarray[0]);
+ if ($addrdata != $infoarray[0]) {
+ // Reverse lookup returned something other than the IP address (FQDN, we hope!)
+ if ($hostipformat != "fqdn") {
+ // The user does not want the whole FQDN, so only pass back the first part of the name.
+ $name_array = explode(".", $addrdata);
+ $addrdata = $name_array[0];
+ }
+ }
+ }
+ }
+ //print host information;
+ echo $addrdata . ";" . $infoarray[1] . ";" . $infoarray[2] . "|";
+
+ //mark that we collected information
+ $someinfo = true;
+ }
+ }
+}
+unset($bandwidthinfo, $_grb);
+unset($listedIPs);
+
+//no bandwidth usage found
+if ($someinfo == false)
+ echo gettext("no info");
+
+?> \ No newline at end of file
OpenPOWER on IntegriCloud