fox111 发表于 2018-8-7 11:40:43

python:查看linux网卡流量

#!/usr/bin/env python  
import time,sys
  
def all_flow(INTERFACE):
  f = open('/proc/net/dev')
  flow_info=f.readlines()
  in_flow=[]
  out_flow=[]
  for eth_dev in flow_info:
  if INTERFACE in eth_dev:
  in_flow.append(int(eth_dev.split(':').split()))
  out_flow.append(int(eth_dev.split(':').split()))
  f.close()
  return in_flow,out_flow
  
def format_flow(flow):
  flow_n = float(flow)
  if flow_n > 1000000:
  return '%.3f MB' % (flow_n/1024/1024)
  else:
  return '%.3f KB' % (flow_n/1024)
  
if __name__=='__main__':
  if len(sys.argv) > 1:
  INTERFACE = sys.argv
  else:
  INTERFACE = 'eth'
  in_flows = {}
  out_flows = {}
  all_flows0 = all_flow(INTERFACE)
  count = 0
  while count < 5:
  time.sleep(1)
  all_flows1=all_flow(INTERFACE)
  for x in range(len(all_flows0)):
  if len(sys.argv) >1:
  curr_eth = INTERFACE
  else:
  curr_eth = 'eth%s' % x
  if len(in_flows) == x:
  in_flows= []
  out_flows=[]
  print curr_eth+" in:"+ format_flow(all_flows1-all_flows0)+"out:"+\
  format_flow(all_flows1-all_flows0)
  in_flows.append(all_flows1-all_flows0)
  out_flows.append(all_flows1-all_flows0)
  all_flows0 = all_flows1
  count=count+1
  for key in in_flows:
  sum_a=0
  in_flow=''
  for i in in_flows:
  sum_a = sum_a+i
  in_flow = in_flow + format_flow(i) + ' '
  #print key + ' flow_in is: %s'% in_flow
  print key +" average of flow_in is: %s" % format_flow(sum_a/count)
  for key in out_flows:
  sum_a=0
  out_flow=''
  for i in out_flows:
  sum_a = sum_a+i
  out_flow = out_flow + format_flow(i) + ' '
  #print key + ' flow_out is: %s'% out_flow
  print key +" average of flow_out is: %s" % format_flow(sum_a/count)
页: [1]
查看完整版本: python:查看linux网卡流量