📟
Ubuntu22でifconfigからTXとRXを取得する
はじめに
ubuntu22のifconfigで出力されるIFのTXとRXの値を取得します。
対象IFの指定は引数で実施しておきます。
- 複数のIFの表示時は未対応
- IPv4のみ対応
- ifconfigの出力はディストリビューション毎に大きく違うのでubuntu22専用です。
実装内容
go.py
import sys
import re
r1 = re.compile('^inet\s+([\d\.]+)\s+netmask\s+([\d\.]+)\s+broadcast\s+([\d\.]+)', re.MULTILINE|re.DOTALL)
r2 = re.compile('^RX\s+packets\s+(\d+)\s+bytes\s+(\d+)', re.MULTILINE|re.DOTALL)
r3 = re.compile('^TX\s+packets\s+(\d+)\s+bytes\s+(\d+)', re.MULTILINE|re.DOTALL)
output = {"interface":sys.argv[1]}
while True:
line = sys.stdin.readline().strip()
if line=='':
break
result = r1.match(line)
if result != None:
output["inet"] = result.group(1)
output["netmask"] = result.group(2)
result = r2.match(line)
if result != None:
output["TX_packets"] = int(result.group(1))
output["TX_bytes"] = int(result.group(2))
result = r3.match(line)
if result != None:
output["RX_packets"] = int(result.group(1))
output["RX_bytes"] = int(result.group(2))
print(output)
実行方法
ifconfig ens160 | python3 go.py ens160
実行結果
{'interface': 'ens160', 'inet': '192.168.55.183', 'netmask': '255.255.255.0', 'TX_packets': 2410545, 'TX_bytes': 600712614, 'RX_packets': 245612, 'RX_bytes': 22756923}
その他
作成した後でパケット単位であれば、次のコマンドで一括出力可能だということを知りました。
ifconfig -s
ただしバイト単位とパケット単位は違うので、作成したpythonを利用しています。
Discussion