メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

pcapReader

プロトコル パケットの PCAP ファイル リーダー

R2021b 以降

    説明

    pcapReader オブジェクトは、特定の条件に基づき、イーサネットおよび拡張共通公衆無線インターフェイス (eCPRI) のプロトコル パケットを読み取って復号化します。カスタムのプロトコル復号化器を追加することもできます。

    作成

    説明

    pcap = pcapReader(filename) は、入力 PCAP ファイルからプロトコル パケットを読み取る PCAP ファイル リーダー オブジェクトを作成します。

    pcap = pcapReader(filename,OutputTimestampFormat='seconds') は、OutputTimestampFormat プロパティを seconds に設定します。

    入力引数

    すべて展開する

    拡張子を含む PCAP ファイルの名前。文字ベクトルまたは string スカラーとして指定します。

    例: "ethernetSamplePackets.pcap"

    データ型: char | string

    プロパティ

    すべて展開する

    パケット タイムスタンプの出力形式。'microseconds''seconds'、または 'datetime' として指定します。この値は、復号化されたプロトコル パケットのタイムスタンプを指定します。

    データ型: char | string

    この プロパティ は読み取り専用です。

    PCAP ファイル形式のメジャー バージョン。非負のスカラーとして返されます。

    データ型: double

    この プロパティ は読み取り専用です。

    PCAP ファイル形式のマイナー バージョン。非負のスカラーとして返されます。

    データ型: double

    この プロパティ は読み取り専用です。

    PCAP ファイルに含まれるパケットの最大長。非負のスカラーとして返されます。

    データ型: double

    この プロパティ は読み取り専用です。

    PCAP グローバル ヘッダーのリンク タイプ。非負のスカラーとして返されます。このプロパティの詳細については、「Tcpdump/Libpcap Public Repository」[1]を参照してください。

    データ型: double

    この プロパティ は読み取り専用です。

    PCAP ファイル リーダー オブジェクトによって与えらえれたリンク タイプ名。文字ベクトルとして返されます。

    データ型: char

    この プロパティ は読み取り専用です。

    PCAP ファイルに含まれるパケット タイムスタンプの分解能がナノ秒かどうかを示すフラグ。1 (true) または 0 (false) として返されます。

    データ型: logical

    オブジェクト関数

    すべて展開する

    addLinkTypeDecoderAdd custom link layer protocol decoder to PCAP file reader
    addUpperLayerDecoderAdd custom upper-layer protocol decoder to PCAP file reader
    readRead next protocol packet from PCAP file
    readAllRead all protocol packets from current position to end of PCAP file
    resetReset position of PCAP file reader to first protocol packet of PCAP file

    すべて折りたたむ

    PCAP ファイルの名前を指定し、PCAP ファイル リーダー オブジェクトを作成します。

    pcapReaderObj = pcapReader('ethernetSamplePackets.pcap');

    PCAP ファイルに含まれるすべてのパケットを MATLAB® ワークスペースに読み取ります。

    decodedPackets = readAll(pcapReaderObj);

    現在のワークスペースから pcapReaderObj 変数をクリアします。

    clear pcapReaderObj

    PCAP ファイルの名前およびパケット タイムスタンプの出力形式を指定し、PCAP ファイル リーダー オブジェクトを作成します。

    pcapReaderObj = pcapReader('ethernetSamplePackets.pcap', ...
        OutputTimestampFormat='datetime');

    イーサネット ソース アドレスとイーサネット タイプのフィルターを作成します。

    filterString = ['eth.SourceAddress == 44FB5A9710AC && ' ...
        'eth.Type == 2048'];

    指定したフィルター条件に一致するイーサネット パケットをストリーミング モードで MATLAB ワークスペースに読み取ります。

    for packetCount = 1:3
        ethPacket = read(pcapReaderObj,filterString)
    end
    ethPacket = struct with fields:
                 SNo: 1
           Timestamp: 08-Feb-2021 03:27:18.043900
            LinkType: 1
            Protocol: 'eth'
        PacketLength: 171
              Packet: [1×1 struct]
            RawBytes: [1×0 double]
        TimestampSec: 1.6128e+09
    
    
    ethPacket = struct with fields:
                 SNo: 4
           Timestamp: 08-Feb-2021 03:27:19.098190
            LinkType: 1
            Protocol: 'eth'
        PacketLength: 120
              Packet: [1×1 struct]
            RawBytes: [1×0 double]
        TimestampSec: 1.6128e+09
    
    
    ethPacket = struct with fields:
                 SNo: 5
           Timestamp: 08-Feb-2021 03:27:20.145857
            LinkType: 1
            Protocol: 'eth'
        PacketLength: 171
              Packet: [1×1 struct]
            RawBytes: [1×0 double]
        TimestampSec: 1.6128e+09
    
    

    現在のワークスペースから pcapReaderObj 変数をクリアします。

    clear pcapReaderObj

    PCAP ファイルの名前を指定し、PCAP ファイル リーダー オブジェクトを作成します。

    pcapReaderObj = pcapReader('ethernetSamplePackets.pcap');

    eCPRI メッセージ タイプを指定し、eCPRI パケットのフィルターを作成します。

    filterString = ['ecpri.MessageType == IQData || ecpri.MessageType == BitSequence ' ...
        '|| ecpri.MessageType == RemoteReset'];

    指定したフィルター条件に一致する eCPRI パケットを MATLAB ワークスペースに読み取ります。

    ecpriFilteredFirstPacket = read(pcapReaderObj,filterString)
    ecpriFilteredFirstPacket = struct with fields:
                 SNo: 21
           Timestamp: 1.6128e+15
            LinkType: 1
            Protocol: 'eth'
        PacketLength: 64
              Packet: [1×1 struct]
            RawBytes: [1×0 double]
    
    
    ecpriFilteredSecondPacket = read(pcapReaderObj,filterString)
    ecpriFilteredSecondPacket = struct with fields:
                 SNo: 22
           Timestamp: 1.6128e+15
            LinkType: 1
            Protocol: 'eth'
        PacketLength: 64
              Packet: [1×1 struct]
            RawBytes: [1×0 double]
    
    
    ecpriFilteredRemainingPackets = readAll(pcapReaderObj,filterString)
    ecpriFilteredRemainingPackets=1×5 struct array with fields:
        SNo
        Timestamp
        LinkType
        Protocol
        PacketLength
        Packet
        RawBytes
    
    

    PCAP ファイル リーダーの位置を PCAP ファイルの最初のパケットにリセットします。

    reset(pcapReaderObj);

    メッセージ タイプを同相直交 (IQ) データとして指定し、同じ PCAP ファイルに対して新しいフィルターを作成します。

    filterString = 'ecpri.MessageType == IQData';

    指定したフィルター条件に一致する eCPRI パケットを MATLAB ワークスペースに読み取ります。

    ecpriFilteredPackets = readAll(pcapReaderObj,filterString)
    ecpriFilteredPackets = struct with fields:
                 SNo: 21
           Timestamp: 1.6128e+15
            LinkType: 1
            Protocol: 'eth'
        PacketLength: 64
              Packet: [1×1 struct]
            RawBytes: [1×0 double]
    
    

    現在のワークスペースから pcapReaderObj 変数をクリアします。

    clear pcapReaderObj

    アルゴリズム

    pcapReader オブジェクトは、次の図に示すように、以下の操作を実行します。

    1. PCAP ファイルからパケットを読み取る。

    2. リンク レイヤー復号化器のリストから復号化器を選択し、パケットのリンク レイヤー ヘッダーを復号化する。

    3. 次の上位レイヤー プロトコルのパケットを含むペイロードに進む。

    4. 上位レイヤー復号化器のリストから復号化器を選択し、パケットのヘッダーを復号化する。

    5. パケット全体のすべてのヘッダーを復号化するか、適切な上位レイヤー復号化器が見つからなくなるまで、後続のレイヤーの復号化器の選択と使用を続ける。

    pcapReader オブジェクトは、PCAP ファイル内のすべてのパケットに対してこれらの 5 つの手順を繰り返します。

    参照

    [1] Group, The Tcpdump. “Tcpdump/Libpcap Public Repository.” Accessed May 20, 2020. https://www.tcpdump.org.

    [2] “Development/LibpcapFileFormat - The Wireshark Wiki.” Accessed May 20, 2020. https://www.wireshark.org.

    [3] “Common Public Radio Interface: eCPRI Interface Specification V1.2 ” Accessed June 22, 2021.

    バージョン履歴

    R2021b で導入

    参考

    オブジェクト