

python3で wiresharkデータ（pcap）のデータ解析、抽出をしたいと考えていて、下記のスクリプトで UDP のsrc,dscやport
をリストアウトできることは確認できたのですが、これに加えて、添付のような（黄色部の）値を取得するにはどのように指定（コード）すれば良いのでしょうか？
※下記スクリプトに拘っていないので、ご助言お待ちしてます  
[![取得したい値](https://i.stack.imgur.com/IqqEQ.png)](https://i.stack.imgur.com/IqqEQ.png)

[code]

    # -*- coding: utf-8 -*-
    
    import dpkt, socket
    import string
    import binascii
    import sys
    
    #メイン関数
    def main(filename):
        pcr = dpkt.pcap.Reader(open(filename,'rb'))
        #パケット数
        packet_count = 0
    
        #パケット処理
        for ts,buf in pcr:
            packet_count += 1
            try:
                eth = dpkt.ethernet.Ethernet(buf)
            except:
                continue
    
            #IPデータの場合
            if type(eth.data) == dpkt.ip.IP:
                ip = eth.data
                ipheader(ip)
                #TCPデータ
                if type(ip.data) == dpkt.tcp.TCP:
                    tcp = ip.data
                    #ペイロードが0以外
                    if len(tcp.data) != 0:
                        thex = binascii.b2a_hex(tcp.data)
                        payload(thex)
                #UDPデータ
                elif type(ip.data) == dpkt.udp.UDP:
                    udp = ip.data
                    #ペイロードが0以外
                    if len(udp.data) != 0:
                        uhex = binascii.b2a_hex(udp.data)
                        payload(uhex)
                #ICMPデータ
                elif type(ip.data) == dpkt.icmp.ICMP:
                    icmp = ip.data
                    #ペイロードが0以外
                    if len(icmp.data) != 0:
                        ihex = binascii.hexlify(str(icmp.data))
                        payload(ihex[8:])
    
        print ("処理終了:", packet_count)
    
    #IPヘッダ処理
    def ipheader(header):
        #ヘッダの処理
        src = socket.inet_ntoa(header.src)
        dst = socket.inet_ntoa(header.dst)
        if type(header.data) == dpkt.udp.UDP:
            print ("UDP %s:%s => %s:%s (len:%s)" % (src, header.data.sport, dst, header.data.dport, len(header.data.data)))
    
    #ペイロード
    def payload(thex):
        #ペイロードの処理
        return
    
[/code]

_/_ / _/_ / _/_ / _/_ / _/_ / _/_ / _/_ / _/_ /_/  
追記  
スマートな手法ではないですが、現状のノウハウをふまえ・・・  
とりあえず 「 wireshark → jsonデータ（保存） → python解析 」 で  
当面の課題としては取り組むこととしました  
BACpypes、tshark ともに、理解深めて、今後の手法にしたいと思います


CC BY-SA 4.0
2018-09-02T06:23:47.967
48020
2018-09-05T00:13:54.350
2018-09-05T00:13:54.350
23890
23890
question
python3 wireshark
wiresharkデータ（pcap）のデータ解析


`dpkt`というライブラリは、BACnetのパケットの解釈ができるのでしょうか。

ライブラリがサポートしていないプロトコルは、ペイロードの中身をプロトコルに従って **自分で** 解釈する必要があります。


CC BY-SA 4.0
2018-09-02T13:35:38.180
48028
2018-09-02T13:35:38.180
5793
48020
answer


wiresharkには、CLI版の`tshark`が同梱されています。  
`-V`オプションをつけると、(wiresharkと同じように)パケットの解析結果が出力が出力されるので、そこから(正規表現等を使って)欲しいフィールド値を抽出する方法もあると思います。

[code]

    [PCAPファイルを読み込んで表示させるコマンド例]
    tshark -r PCAPファイル -V
    
[/code]

いかがでしょうか?


CC BY-SA 4.0
2018-09-03T12:33:24.917
48055
2018-09-03T12:33:24.917
20098
48020
answer