2

Wireshark によって作成されたPcapNGファイルがあり、これを使用して解析しようとしていますpython-pcapng

ただし、 から受け取った出力を802.11 データ フレーム形式と調整する方法がわかりませFileScannerん。packet_payload_info802.11 データ フレーム形式

これは私が得る出力です(私のコードは一番下にあります):

magic_number 0xa0d0d0a
SectionHeader(version_major=1, version_minor=0, section_length=-1, options=Options({'shb_userappl': [u'Dumpcap 1.12.4 (v1.12.4-0-gb4861da from master-1.12)'], 'shb_os': [u'Mac OS X 10.10.2, build 14C109 (Darwin 14.1.0)']}))

magic_number 0x1
InterfaceDescription(link_type=127, reserved='\x00\x00', snaplen=262144, options=Options({'if_os': [u'Mac OS X 10.10.2, build 14C109 (Darwin 14.1.0)'], 'if_tsresol': [6], 'if_name': [u'en1']}))

magic_number 0x6
EnhancedPacket(interface_id=0, timestamp_high=332139, timestamp_low=2801116064L, packet_payload_info=(45, 45, '\x00\x00\x19\x00o\x08\x00\x00`I\xb2&\x00\x00\x00\x00\x12\x18q\x16@\x01\xb1\xaa\x00\xb4\x00\x90\x00\xf4\x0f\x1b\xb8sL`\x92\x175\x00\x01\xe3\xcf\x00\x12'), options=Options({}))

packet_payload_info      : (45, 45, '\x00\x00\x19\x00o\x08\x00\x00`I\xb2&\x00\x00\x00\x00\x12\x18q\x16@\x01\xb1\xaa\x00\xb4\x00\x90\x00\xf4\x0f\x1b\xb8sL`\x92\x175\x00\x01\xe3\xcf\x00\x12') 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 60 49 B2 26 00 00 00 00 12 18 71 16 40 01 B1 AA 00 B4 00 90 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 E3 CF 00 12 

packet_payload_data (bin): 00000000 00000000 00011001 00000000 01101111 00001000 00000000 00000000 01100000 01001001 10110010 00100110 00000000 00000000 00000000 00000000 00010010 00011000 01110001 00010110 01000000 00000001 10110001 10101010 00000000 10110100 00000000 10010000 00000000 11110100 00001111 00011011 10111000 01110011 01001100 01100000 10010010 00010111 00110101 00000000 00000001 11100011 11001111 00000000 00010010

packet_payload_data802.11 データ フレームのどこに収まるか教えていただけますか?*

  • つまり、最初のバイトはフレームのどこに収まりますか

Python コード:

#!/usr/bin/env python

from pcapng import FileScanner

def hex_str_to_num(hex_str,out_format='X'):
    if out_format.upper() == 'B':
        return ' '.join(format(ord(x), out_format).zfill(8) for x in hex_str)
    else:
        return ' '.join(format(ord(x), out_format).zfill(2) for x in hex_str)


PCAPNG = "/cygdrive/c/tmp/trace3.pcapng"
MAX = 3
ENHANCEDPACKET_ID = 6

with open(PCAPNG, "r") as pcapng_file:
    scanner = FileScanner(pcapng_file)
    counter = MAX
    for block in scanner:
        print
        print "magic_number",hex(block.magic_number)
        print block

        if block.magic_number == ENHANCEDPACKET_ID:
            print
            payload_data = block.packet_payload_info[2]
            print "packet_payload_info      :",block.packet_payload_info,"\n"
            print "packet_payload_data (hex):",hex_str_to_num(payload_data,"X"),"\n"
            print "packet_payload_data (bin):",hex_str_to_num(payload_data,"b")

        counter -= 1
        if not counter:
            break

編集1:

いくつかを印刷すると、すべてEnhancedPacketpacket_payload_dataで始まることに気付き00 00 19 00 6F 08 00 00ます。さて、はデータ フレーム マーカーです。これは、ペイロード データだけでなく、フレーム制御ビットも含まれて08いるのではないかと疑っています。packet_payload_data

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 60 49 B2 26 00 00 00 00 12 18 71 16 40 01 B1 AA 00 B4 00 90 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 E3 CF 00 12 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 92 49 B2 26 00 00 00 00 12 18 71 16 40 01 CD AA 00 C4 00 60 00 60 92 17 35 00 01 F7 65 6E 79 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 09 4A B2 26 00 00 00 00 12 18 71 16 40 01 CA AA 00 94 00 00 00 60 92 17 35 00 01 F4 0F 1B B8 73 4C 04 00 C0 23 FF FF FF FF FF FF FF FF 58 D0 59 5C 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 5F 51 B2 26 00 00 00 00 52 6C 71 16 40 01 B2 AA 00 B4 00 1C 1B F4 0F 1B B8 73 4C 60 92 17 35 00 01 33 20 02 04 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 86 51 B2 26 00 00 00 00 12 6C 71 16 40 01 CA AA 00 C4 00 4C 00 60 92 17 35 00 01 EE 12 B7 D7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 EE 53 B2 26 00 00 00 00 12 6C 71 16 40 01 B1 AA 00 B4 00 74 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 33 20 02 04 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 15 54 B2 26 00 00 00 00 12 6C 71 16 40 01 CB AA 00 C4 00 4C 00 60 92 17 35 00 01 EE 12 B7 D7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 98 56 B2 26 00 00 00 00 52 6C 71 16 40 01 B2 AA 00 AB 00 74 00 F4 0F 1B B8 73 3C E4 44 DF 67 09 14 3A 0A 24 04 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 C0 56 B2 26 00 00 00 00 12 6C 71 16 40 01 CB AA 00 C4 00 4C 00 60 92 17 35 00 01 EE 12 B7 D7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 E8 58 B2 26 00 00 00 00 12 18 71 16 40 01 B1 AA 00 B4 00 90 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 E3 CF 00 12 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 1B 59 B2 26 00 00 00 00 12 18 71 16 40 01 CD AA 00 C4 00 60 00 60 92 17 35 00 01 F7 65 6E 79 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 92 59 B2 26 00 00 00 00 12 18 71 16 40 01 CA AA 00 94 00 00 00 60 92 17 35 00 01 F4 0F 1B B8 73 4C 04 00 D0 23 FF FF FF FF FF FF FF FF B0 51 F7 7B 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 A0 69 B2 26 00 00 00 00 12 6C 71 16 40 01 C6 AA 00 B4 00 C0 00 50 2E 5C DA 81 9D F4 0F 1B B8 73 4C B4 E2 C5 B7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 17 6A B2 26 00 00 00 00 12 6C 71 16 40 01 C5 AA 00 B4 00 C0 00 50 2E 5C DA 81 9D F4 0F 1B B8 73 4C B4 E2 C5 B7 
4

1 に答える 1

1

まず、802.11 インターフェイスでキャプチャしたからといって、フレーム データが 802.11 ヘッダーで始まるとは限りません。たとえば、「ラジオ メタデータ」ヘッダーで始まり、その後に 802.11 ヘッダーが続きます。

pcap-ng ファイルを読み取るすべてのプログラムは、次のことを行う必要があります。

  • すべてのインターフェース記述ブロックを読み取り、少なくとも、その IDB の序数 (後でインターフェース ID として使用されます) とインターフェースの LinkType 値を覚えておいてください。
  • パケット ブロックを処理するとき、指定されたインターフェイス ID を持つインターフェイスの LinkType 値を検索し、それを使用して生のパケット データを解釈します。

LinkType 値の公式リストは、値が何であるか、およびパケット データがその値に対してどのように解釈されるべきかを示します。パケット データがどのように見えるかを想定することは決してありません。常に LinkType 値を確認してください。

(これは pcap ファイルにも当てはまります。常にファイルのリンク層ヘッダー タイプを確認してください。)

ここで、バージョン値が 0、パッド バイトが 0、リトル エンディアンの長さが 25 バイトで、最初のプレゼンス ビット ワードが 0x0000086F である、ラジオタップ ヘッダー00 00 19 00 6F 08 00 00始まりである可能性があることに注意してください。その存在ビット ワードは、存在するフィールドがTSFT (8 バイト)、フラグ(1 バイト)、レート(1 バイト)、チャネル(4 バイト)、アンテナ信号(1 バイト)、アンテナ ノイズ( 1 バイト) であることを示します。バイト)、およびアンテナ(1 バイト)。バージョン、パッド バイト、長さ、およびプレゼンス ビット ワードは 8 バイトで、合計 8+8+1+1+4+1+1+1 = 25 バイトです。

したがって、802.11 ヘッダーを見ているとは絶対に思いません。LinkType を確認する必要があります。127 (LINKTYPE_IEEE802_11_RADIOTAP) の場合、パケットは radiotap ヘッダーで始まり、その後に 802.11 ヘッダーが続きます。105 (LINKTYPE_IEEE802_11) の場合、802.11 ヘッダーで始まります。

802.11 ヘッダーは、ラジオタップ (またはその他の無線メタデータ) ヘッダーに続くか、未加工のパケット データの先頭にあるかに関係なく、未加工の 802.11 ヘッダーであるため、フレーム制御フィールドで始まり、その後に持続時間などが続きます。

于 2015-03-30T19:15:59.600 に答える