diff options
Diffstat (limited to 'scripts/vyatta-show-nat.pl')
-rwxr-xr-x | scripts/vyatta-show-nat.pl | 18 |
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; |