使用-h獲取幫助
在Python2.7版本以上執行
腳本獲?。? https://github.com/raysuen/AdapterMonitor
內容:
#!/usr/bin/env python
# _*_coding:utf-8_*_
# Auth by raysuen
import sys,time
import re
AdapterInfoDict={
"InterFace":"all",
"Interval":1,
"NumberOfDis":None,
"Action":"all",
"ShowSize":"b"
}
def GetAdapterInfo():
faces=[]
# f=open(r"C:\Users\Administrator\Downloads\dev","rb")
f = open(r"/proc/net/dev", "rb")
for line in f: #循環獲取文件信息
if line.decode(encoding="utf8").find(":") != -1: #判斷是否為網卡列
if AdapterInfoDict["InterFace"] == "all": #判斷獲取網卡的名稱,all為全部網卡
if AdapterInfoDict["ShowSize"] == "b": #判斷顯示的大小,默認為bytes
#生成一維數組記錄,網卡信息:網卡名稱,進流量,出流量
face=[line.decode(encoding="utf8").split(":")[0].strip(),int(line.decode(encoding="utf8").split()[1]),int(line.decode(encoding="utf8").split()[9])]
elif AdapterInfoDict["ShowSize"] == "k":
face=[line.decode(encoding="utf8").split(":")[0].strip(),round(int(line.decode(encoding="utf8").split()[1])/1024),round(int(line.decode(encoding="utf8").split()[9])/1024)]
elif AdapterInfoDict["ShowSize"] == "m":
face=[line.decode(encoding="utf8").split(":")[0].strip(),round(int(line.decode(encoding="utf8").split()[1])/1024/1024),round(int(line.decode(encoding="utf8").split()[9])/1024/1024)]
else:
print("The value of -s is invalid,you can use -h to get help.")
exit(69)
faces.append(face) #把每個網卡信息的一維數組存入二維數組
else:
for facename in AdapterInfoDict["InterFace"].split(","): #判斷網卡名稱,可以為多個網卡,多個網卡用逗號分隔
if line.decode(encoding="utf8").split(":")[0].strip() == facename:
if AdapterInfoDict["ShowSize"] == "b":
face = [line.decode(encoding="utf8").split(":")[0].strip(),
int(line.decode(encoding="utf8").split()[1]),
int(line.decode(encoding="utf8").split()[9])]
elif AdapterInfoDict["ShowSize"] == "k":
face = [line.decode(encoding="utf8").split(":")[0].strip(),
round(int(line.decode(encoding="utf8").split()[1]) / 1024),
round(int(line.decode(encoding="utf8").split()[9]) / 1024)]
elif AdapterInfoDict["ShowSize"] == "m":
face = [line.decode(encoding="utf8").split(":")[0].strip(),
round(int(line.decode(encoding="utf8").split()[1]) / 1024 / 1024),
round(int(line.decode(encoding="utf8").split()[9]) / 1024 / 1024)]
else:
print("The value of -s is invalid,you can use -h to get help.")
exit(69)
faces.append(face)
return faces
def help_func():
print("""
NAME:
AdapterMonitor --Display net interface netflow
SYNOPSIS:
AdapterMoniter [-f] [interface names] [-i] [interval time] [-n] [display number] [-a] [action] [-s] [show size]
DESCRIPTION:
-f specify interface names.values is interface names or all,default all.
You can specify a name,also some names.
If the names is more one,you can use comma as separator.
Example:
AdapterMoniter.py -f eth0
AdapterMoniter.py -f eth0,eth2
-i specify a interval time to display,defaul 1 second.
Unit: second
-n to display how many times you want.Default: None,means unlimited number.
Example:
AdapterMoniter.py -n 2
-a to display what action you want,IN/OUT/ALL.Defaul: all.
Example:
AdapterMoniter.py -a in
-s to display the netflow size.Default: b(bytes)
values: b(bytes)/k(KB)/m(MB)
Example:
AdapterMoniter.py -s k
EXAMPLE:
AdapterMoniter.py -f eth0 -i 2 -n 10 -a in -s k
""")
if __name__ == "__main__":
num=1 #計數器,記錄當前參數下標
exitnum=0 #退出時的退出數
#獲取參數
if len(sys.argv) > 1: #判斷是否有參數輸入
while num < len(sys.argv):
if sys.argv[num] == "-h":
help_func() #執行幫助函數
exitnum = 0
exit(exitnum)
elif sys.argv[num] == "-f":
num += 1 #下標向右移動一位
if num >= len(sys.argv): #判斷是否存在當前下標的參數
exitnum = 99
print("The parameter must be specified a value,-f.")
exit(exitnum)
elif re.match("^-",sys.argv[num]) == None: #判斷當前參數是否為-開頭,None為非-開頭
AdapterInfoDict["InterFace"]=sys.argv[num]
num += 1
else:
print("Please specify a valid value for -f.")
exitnum = 98
exit(exitnum)
elif sys.argv[num] == "-i":
num += 1
if num >= len(sys.argv):
exitnum = 97
print("The parameter must be specified a value,-i.")
exit(exitnum)
elif re.match("^-",sys.argv[num]) == None:
if sys.argv[num].isdigit() == True: #判斷是否為正整數
AdapterInfoDict["Interval"]=sys.argv[num]
num += 1
else:
print("The value of -i must be digit.")
exitnum = 96
exit(exitnum)
else:
print("Please specify a valid value for -i.")
exitnum = 95
exit(exitnum)
elif sys.argv[num] == "-n":
num += 1
if num >= len(sys.argv):
exitnum = 94
print("The parameter must be specified a value,-n.")
exit(exitnum)
elif re.match("^-",sys.argv[num]) == None:
if sys.argv[num].isdigit() == True:
AdapterInfoDict["NumberOfDis"]=sys.argv[num]
num += 1
else:
print("The value of -n must be digit.")
exitnum = 93
exit(exitnum)
else:
print("Please specify a valid value for -n.")
exitnum = 92
exit(exitnum)
elif sys.argv[num] == "-a":
num += 1
if num >= len(sys.argv):
exitnum = 91
print("The parameter must be specified a value,-a.")
exit(exitnum)
elif re.match("^-",sys.argv[num]) == None:
AdapterInfoDict["Action"]=sys.argv[num]
num += 1
else:
print("Please specify a valid value for -a.")
exitnum = 90
exit(exitnum)
elif sys.argv[num] == "-s":
num += 1
if num >= len(sys.argv):
exitnum = 89
print("The parameter must be specified a value,-s.")
exit(exitnum)
elif re.match("^-",sys.argv[num]) == None:
AdapterInfoDict["ShowSize"]=sys.argv[num]
num += 1
else:
print("Please specify a valid value for -s.")
exitnum = 90
exit(exitnum)
#獲取開始的網卡信息
facesPre = GetAdapterInfo()
if AdapterInfoDict["NumberOfDis"] == None: #判斷顯示次數,None為無限次
t = 0 #計數器,沒10次打印一下行頭
while True:
time.sleep(int(AdapterInfoDict["Interval"])) #睡眠,根據時間間隔
facesSuf = GetAdapterInfo() #獲取比對的結束網卡信息
if AdapterInfoDict["Action"] == "all": #判斷動作,是顯示進,出或是全部的流量
if t % 10 == 0:
print("%s:%s%s" % ("FaceName".rjust(10), "In".rjust(30), "Out".rjust(30)))
print("%s"%"-".center(70,"-"))
elif AdapterInfoDict["Action"] == "in":
if t % 10 == 0:
print("%s:%s" % ("FaceName".rjust(10), "In".rjust(30)))
print("%s" % "-".center(40,"-"))
elif AdapterInfoDict["Action"] == "out":
if t % 10 == 0:
print("%s:%s" % ("FaceName".rjust(10), "Out".rjust(30)))
print("%s" % "-".center(40,"-"))
t += 1
for i in range(len(facesPre)):
if AdapterInfoDict["Action"] == "all":
print("%s:%s%s"%(facesPre[i][0].rjust(10),str(facesSuf[i][1]-facesPre[i][1]).rjust(30),str(facesSuf[i][2]-facesPre[i][2]).rjust(30)))
elif AdapterInfoDict["Action"] == "in":
print("%s:%s" % (facesPre[i][0].rjust(10), str(facesSuf[i][1] - facesPre[i][1]).rjust(30)))
elif AdapterInfoDict["Action"] == "out":
print("%s:%s" % (facesPre[i][0].rjust(10), str(facesSuf[i][2] - facesPre[i][2]).rjust(30)))
else:
print("The value of -a is a invalid action which you entered.")
print("You can use -h to get help.")
exitnum=89
exit(exitnum)
facesPre=facesSuf
# time.sleep(int(AdapterInfoDict["Interval"]))
else:
for t in range(int(AdapterInfoDict["NumberOfDis"])): #安裝顯示次數循環
time.sleep(int(AdapterInfoDict["Interval"]))
facesSuf = GetAdapterInfo()
#輸出打印行頭
if AdapterInfoDict["Action"] == "all":
if t % 10 == 0:
print("%s:%s%s" % ("FaceName".rjust(10), "In".rjust(30), "Out".rjust(30)))
print("%s" % "-".center(70,"-"))
elif AdapterInfoDict["Action"] == "in":
if t % 10 == 0:
print("%s:%s" % ("FaceName".rjust(10), "In".rjust(30)))
print("%s" % "-".center(40,"-"))
elif AdapterInfoDict["Action"] == "out":
if t % 10 == 0:
print("%s:%s" % ("FaceName".rjust(10), "Out".rjust(30)))
print("%s" % "-".center(40,"-"))
for i in range(len(facesPre)):
if AdapterInfoDict["Action"] == "all":
print("%s:%s%s" % (facesPre[i][0].rjust(10), str(facesSuf[i][1] - facesPre[i][1]).rjust(30),
str(facesSuf[i][2] - facesPre[i][2]).rjust(30)))
elif AdapterInfoDict["Action"] == "in":
print("%s:%s" % (facesPre[i][0].rjust(10), str(facesSuf[i][1] - facesPre[i][1]).rjust(30)))
elif AdapterInfoDict["Action"] == "out":
print("%s:%s" % (facesPre[i][0].rjust(10), str(facesSuf[i][2] - facesPre[i][2]).rjust(30)))
else:
print("The value of -a is a invalid action which you entered.")
print("You can use -h to get help.")
exitnum = 88
exit(exitnum)
facesPre = facesSuf
# time.sleep(int(AdapterInfoDict["Interval"]))
exit(exitnum)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。