git://git.onelab.eu
/
vsys.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* The main change in version 0.9 is file-descriptor passing support. The way this...
[vsys.git]
/
factory
/
portsummary
diff --git
a/factory/portsummary
b/factory/portsummary
index
7ff7bc2
..
f800632
100755
(executable)
--- a/
factory/portsummary
+++ b/
factory/portsummary
@@
-3,17
+3,22
@@
import os
import sys
import os
import sys
-ns = os.popen("vcontext --xid 1 --migrate -- netstat -apnlut", 'r')
+# NOTE: '--inet' lists only ipv4 addresses.
+ns = os.popen("ncontext --nid 1 --migrate -- vcontext --xid 1 --migrate -- netstat -apnlut --inet", 'r')
port_summary = {}
for line in ns:
try:
ns_fields = line.split()
if ns_fields[0] == "tcp" or ns_fields[0] == "udp":
(src_ip, src_port) = ns_fields[3].split(':')
port_summary = {}
for line in ns:
try:
ns_fields = line.split()
if ns_fields[0] == "tcp" or ns_fields[0] == "udp":
(src_ip, src_port) = ns_fields[3].split(':')
- if src_ip is not "0.0.0.0" and src_port in port_summary:
+ (dst_ip, dst_port) = ns_fields[4].split(':')
+
+ port_key='%s-%s' % (src_port, dst_port)
+
+ if src_ip is not "0.0.0.0" and port_key in port_summary:
# skip INADDR_ANY addresses and ports we've already seen.
continue
# skip INADDR_ANY addresses and ports we've already seen.
continue
- (dst_ip, dst_port) = ns_fields[4].split(':')
+
conn_state = ns_fields[5]
if ns_fields[0] == "tcp":
proc_field = ns_fields[6]
conn_state = ns_fields[5]
if ns_fields[0] == "tcp":
proc_field = ns_fields[6]
@@
-26,10
+31,8
@@
for line in ns:
if proc_field != "-":
(pid,procname)= proc_field.split('/')
else:
if proc_field != "-":
(pid,procname)= proc_field.split('/')
else:
- # TODO: ephemeral sockets in TIME_WAIT
- # TODO: XXX: THIS IS FALSE. Need an actual way of finding the
- # XID associated with a socket in TIME_WAIT
- (pid,procname)= ("1","")
+ # NOTE: without a PID there is no way to associate with an XID
+ continue
if ( ns_fields[0] == "tcp" and src_ip == "0.0.0.0" and conn_state == "LISTEN" ) or \
( ns_fields[0] == "udp" and src_ip == "0.0.0.0" ):
if ( ns_fields[0] == "tcp" and src_ip == "0.0.0.0" and conn_state == "LISTEN" ) or \
( ns_fields[0] == "udp" and src_ip == "0.0.0.0" ):
@@
-44,7
+47,11
@@
for line in ns:
xid_stream = os.popen("vserver-info %s XID" % pid)
xid = xid_stream.read()
xid_stream = os.popen("vserver-info %s XID" % pid)
xid = xid_stream.read()
- port_summary[src_port] = {'prot' : ns_fields[0], 'port' : src_port, 'slice' : xid[:-1], 'type': type}
+ port_summary[port_key] = {'prot' : ns_fields[0],
+ 'src_port' : src_port,
+ 'dst_port' : dst_port,
+ 'slice' : xid[:-1],
+ 'type': type}
except:
import traceback; traceback.print_exc()
print line
except:
import traceback; traceback.print_exc()
print line
@@
-52,5
+59,5
@@
for line in ns:
ports = port_summary.keys()
ports.sort()
for port in ports:
ports = port_summary.keys()
ports.sort()
for port in ports:
- print "%(prot)4s\t%(port)6s\t%(slice)5s\t%(type)s" % port_summary[port]
+ print "%(prot)4s\t%(
src_port)6s\t%(dst_
port)6s\t%(slice)5s\t%(type)s" % port_summary[port]