summaryrefslogtreecommitdiff
path: root/scripts/vyatta-show-nat.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/vyatta-show-nat.pl')
-rwxr-xr-xscripts/vyatta-show-nat.pl18
1 files changed, 17 insertions, 1 deletions
diff --git a/scripts/vyatta-show-nat.pl b/scripts/vyatta-show-nat.pl
index 574c995..0ae25af 100755
--- a/scripts/vyatta-show-nat.pl
+++ b/scripts/vyatta-show-nat.pl
@@ -21,6 +21,8 @@ my %stats = (
);
open(STATS, "sudo /sbin/iptables -t nat -L -vn |") or exit 1;
my $skey = "";
+my ($rule_tcp_pkts, $rule_tcp_bytes, $rule_pkts, $rule_bytes);
+my $tcp_done = 0;
while (<STATS>) {
if (m/^Chain PREROUTING/) {
$skey = "destination";
@@ -32,7 +34,21 @@ while (<STATS>) {
if ($skey ne "" && (m/SNAT/ || m/DNAT/ || m/MASQUERADE/ || m/RETURN/ || m/NETMAP/)) {
m/^\s*(\d+[KMG]?)\s+(\d+[KMG]?)\s/;
- push @{$stats{$skey}}, ($1, $2);
+ $rule_pkts = $1;
+ $rule_bytes = $2;
+ if (m/tcp_udp/) { # protocol is tcp_udp, 2 rules in iptables for it
+ if ($tcp_done == 0) {
+ $rule_tcp_pkts = $rule_pkts;
+ $rule_tcp_bytes = $rule_bytes;
+ $tcp_done = 1;
+ next;
+ } else {
+ $rule_pkts += $rule_tcp_pkts;
+ $rule_bytes += $rule_tcp_bytes;
+ $tcp_done = 0;
+ }
+ }
+ push @{$stats{$skey}}, ($rule_pkts, $rule_bytes);
}
}
close STATS;