|
|
@ -0,0 +1,80 @@ |
|
|
|
''' |
|
|
|
This borrows extensivelly from Gnome Network Monitor |
|
|
|
https://gnetworkmonitor.svn.sourceforge.net/svnroot/gnetworkmonitor/trunk/ |
|
|
|
Gnome-network-monitor is free software; you can redistribute it and/or modify |
|
|
|
it under the terms of the GNU General Public License as published by |
|
|
|
the Free Software Foundation, version 2 of the License. |
|
|
|
''' |
|
|
|
import socket |
|
|
|
import fcntl |
|
|
|
SIOCGIFHWADDR = 0x8927 # MAC address |
|
|
|
SIOCGIFADDR = 0x8915 # IPv4 address |
|
|
|
SIOCGIFNETMASK = 0x891B # interface mask |
|
|
|
SIOCGIFBRDADDR = 0x8919 # broadcast address |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#def get_interfaces(): |
|
|
|
#""" |
|
|
|
#Returns a list of all network interfaces present, such as [eth0, eth1, lo] |
|
|
|
#""" |
|
|
|
fl = open('/proc/net/dev','r') |
|
|
|
lines = fl.readlines() |
|
|
|
fl.seek(0) |
|
|
|
print [ l[:l.find(":")].strip() for l in lines if ":" in l ] |
|
|
|
# end def get_interfaces(): |
|
|
|
|
|
|
|
|
|
|
|
#def get_iface_statistics(iface): |
|
|
|
keys_dyn_data = ["bytes_in", "packets_in","errors_in", "bytes_out", "packets_out","errors_out" ] |
|
|
|
a = 'eth0' |
|
|
|
delim = "%s:" % (a) # "eth0:" |
|
|
|
if_numbers = [ t.strip().strip(delim) for t in lines if delim in t ][0] |
|
|
|
iface_data = dict(zip(keys_dyn_data, [ int(if_numbers.split()[index]) for index in (0, 1, 2, 8, 9, 10)])) |
|
|
|
print iface_data |
|
|
|
#end def get_iface_statistics |
|
|
|
|
|
|
|
|
|
|
|
#helper for get_MAC_address |
|
|
|
def strip_hex(n): |
|
|
|
return "%02x" % (ord(n)) |
|
|
|
# end helper for get_MAC_address |
|
|
|
|
|
|
|
#def get_MAC_address(self, iface): |
|
|
|
""" |
|
|
|
Returns the MAC address for an interface or None if the |
|
|
|
interface does not have one. |
|
|
|
""" |
|
|
|
iface = 'eth0' |
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
|
|
iface = iface.strip() |
|
|
|
ifr = iface + '\0'*(32-len(iface)) |
|
|
|
|
|
|
|
try: |
|
|
|
r = fcntl.ioctl(s.fileno(), SIOCGIFADDR, ifr) |
|
|
|
addr = map(strip_hex, r[18:24]) |
|
|
|
ret = (':'.join(map(str, addr))) |
|
|
|
except IOError: |
|
|
|
ret = '' |
|
|
|
print ret |
|
|
|
# end def get_MAC_address(self, iface): |
|
|
|
|
|
|
|
#helper for iface data except MAC |
|
|
|
#def __get_socket_data(self, iface, ioctl_const): |
|
|
|
def get_socket_data(iface, ioctl_const): |
|
|
|
#""" |
|
|
|
#Calls ioctl with a given constant. |
|
|
|
#""" |
|
|
|
sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
|
|
|
ifreq = (iface + '\0'*32)[:32] |
|
|
|
try: |
|
|
|
result = fcntl.ioctl(sockfd.fileno(), ioctl_const, ifreq) |
|
|
|
return socket.inet_ntoa(result[20:24]) |
|
|
|
except IOError: |
|
|
|
return "None" |
|
|
|
# end helper for iface data except MAC |
|
|
|
|
|
|
|
print get_socket_data('eth0', SIOCGIFADDR) |
|
|
|
print get_socket_data('eth0', SIOCGIFNETMASK) |
|
|
|
print get_socket_data('eth0', SIOCGIFBRDADDR) |
|
|
|
|