From 3a939e3faf0bb8a173614794c22060b96be3d596 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Sat, 3 Nov 2012 12:50:30 +0100 Subject: [PATCH] Fallback to conntrack-utils if ip_conntrack is not available --- README | 10 ++++++++++ bwmon/proc.py | 11 ++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/README b/README index eaf7154..5ddbf52 100644 --- a/README +++ b/README @@ -18,6 +18,16 @@ * Support for SLA violation notification to external services * Fully documented source code and user manual + -- News -- + + November 2012: + In recent kernels, there's no "ip_conntrack" kernel module. As + a replacement, bwmon now supports the "conntrack" command-line + utility from the "conntrack-utils" package. + + If you get "KeyError: 'bytes'", this is a known problem, see: + http://marc.info/?l=netfilter&m=135194333402321&w=2 + -- More information -- diff --git a/bwmon/proc.py b/bwmon/proc.py index c82cbf1..4f674e3 100644 --- a/bwmon/proc.py +++ b/bwmon/proc.py @@ -147,8 +147,15 @@ def parse_ip_conntrack(): """ connections = {} + if not os.path.exists('/proc/net/ip_conntrack'): + # conntrack-utils (recent kernels, November 2012) + conntrack = os.popen('conntrack -L', 'r') + else: + # Old "ip_conntrack" kernel module (July 2010) + conntrack = open('/proc/net/ip_conntrack', 'r') + # http://www.faqs.org/docs/iptables/theconntrackentries.html - for line in open('/proc/net/ip_conntrack'): + for line in conntrack: parts = line.split() # We only care about TCP and UDP connections @@ -169,6 +176,8 @@ def parse_ip_conntrack(): key = get_key(entry) connections[key] = entry + conntrack.close() + return connections -- 2.11.4.GIT