2

tsharkコマンドの出力を変数に保存したいと思います。

たとえば、私が実行した場合:

tshark -r capture.pcap -qz io,stat,0

私は手に入れます :

Time            |frames|  bytes

00.000-060.000     742     51660

今後の計算のために、フレームの総数をスクリプトの変数に保存したいと考えています。

4

2 に答える 2

1

私のシステムtsharkでは、出力形式が質問で示したものと異なります。解析をより堅牢にするために、コマンドラインを変更しました。

#!/usr/bin/env python
import shlex
from itertools import dropwhile
from subprocess import check_output as qx

# get tshark output
command = "tshark -r capture.pcap -qz 'io,stat,0,COUNT(frame)frame'"
lines = qx(shlex.split(command)).splitlines()

# parse output
lines = dropwhile(lambda line: not line.rstrip().endswith("COUNT"), lines)
next(lines) # skip header
frames_count = int(next(lines).split()[1])
print(frames_count)

tsharkpcapファイルから統計を取得するために呼び出す必要はありません。たとえば、次を使用して、pcapファイルを解析できるPythonライブラリを使用できますscapy

#!/usr/bin/env python
from scapy.all import rdpcap

a = rdpcap('capture.pcap')
frames_count = len(a)
print(frames_count)

tshark -r capture.pcap -qz 'io,stat,0,ip.src==192.168.230.146'を使用してコマンドのカウントを取得するにはscapy

#!/usr/bin/env python
from scapy.all import IP, sniff

a = sniff(offline='capture.pcap',
          lfilter=lambda p: IP in p and p[IP].src == '192.168.230.146')
count = len(a)
print(count)
于 2013-01-22T05:34:36.617 に答える
0

最初に出力をファイルに保存します。

シェルで次のコマンドを実行します。

tshark -r capture.pcap -qz io,stat,0 > abc.txt:

または使用subprocess.Popen()

from subprocess import Popen

with open("abc.txt","w") as f:
    Popen(["tshark" ,"-r","capture.pcap","-qz", "io,stat,0"],stdout=f)

ファイルを開き、フレームの総数を計算します。

with open("abc.txt") as f:
    next(f)  #skip header
    tot_frames=sum(int(line.split()[1]) for line in f if line.strip()) 
    print (tot_frames)         #prints 742
于 2013-01-22T04:38:24.297 に答える