📟

Ubuntu22でifconfigからTXとRXを取得する

2023/12/31に公開

はじめに

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