Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#! /usr/bin/python
## virnetinfo.py utility v.0.1.0
import libvirt
import sys
import os
import libxml2
import pdb
def usage():
print 'Usage: %s list | {addr|brname|fwdmode|fwddev} VIRNET' % sys.argv[0]
def print_xml(ctx, path):
res = ctx.xpathEval(path)
if res is None or len(res) == 0:
value="Unknown"
else:
value = res[0].content
return value
def get_context(name):
try:
nw = conn.networkLookupByName(name)
# Annoyiingly, libvirt prints its own error message here
except libvirt.libvirtError:
print "Network %s does not exist" % name
sys.exit(1)
xmldesc = nw.XMLDesc(0)
doc = libxml2.parseDoc(xmldesc)
ctx = doc.xpathNewContext()
return ctx
def print_ip_address(name):
ctx = get_context(name)
print "%s\t%s" % (print_xml(ctx, "/network/ip/@address"), print_xml(ctx, "/network/ip/@netmask"))
def print_brname(name):
ctx = get_context(name)
print print_xml(ctx, "/network/bridge/@name")
def print_fwdmode(name):
ctx = get_context(name)
print print_xml(ctx, "/network/forward/@mode")
def print_fwddev(name):
ctx = get_context(name)
print print_xml(ctx, "/network/forward/@dev")
def print_active_networks():
try:
networks = conn.listNetworks()
except libvirt.libvirtError:
print "libvirt is not runing"
return 1
for n in networks:
print n
# Main procedure
if len(sys.argv) < 2:
usage()
sys.exit(2)
# Connect to libvirt
conn = libvirt.openReadOnly(None)
if conn == None:
print 'Failed to open connection to the hypervisor'
sys.exit(1)
act = sys.argv[1]
if act == "list":
print_active_networks()
sys.exit(0)
else:
if len(sys.argv) != 3:
usage()
sys.exit(2)
name = sys.argv[2]
if act == "addr":
print_ip_address(name)
sys.exit(0)
elif act == "brname":
print_brname(name)
sys.exit(0)
elif act == "fwdmode":
print_fwdmode(name)
sys.exit(0)
elif act == "fwddev":
print_fwddev(name)
sys.exit(0)
else:
usage()
sys.exit(2)