2016-07-23 9 views
1

私はパケットの特定のレイヤーから特定のフィールドを選択する必要があるpythonスクリプトを書いています。 packet.show()は生成します。Scapyがパケットのすべてのフィールドを表示していない

###[ Padding ]### 
load  = '\x00\x00\x00\x00\x00\x00' 
None 
###[ Ethernet ]### 
    dst  = 00:0e:8c:f5:12:af 
    src  = 28:63:36:4b:c1:f0 
    type  = 0x800 
###[ IP ]### 
    version = 4L 
    ihl  = 5L 
    tos  = 0x0 
    len  = 167 
    id  = 52667 
    flags  = 
    frag  = 0L 
    ttl  = 30 
    proto  = tcp 
    chksum = 0x487c 
    src  = 192.168.2.100 
    dst  = 192.168.2.101 
    \options \ 
###[ TCP ]### 
     sport  = 49898 
     dport  = iso_tsap 
     seq  = 4514968 
     ack  = 11714804 
     dataofs = 5L 
     reserved = 0L 
     flags  = PA 
     window = 8192 
     chksum = 0x8bdf 
     urgptr = 0 
     options = [] 
###[ TPKT ]### 
      vrsn  = 3 
      reserved = 0 
      length = 127 
###[ ISO8073 Data ]### 
       li  = 2 
       code  = 0xfL 
       roa  = 0x0L 
       tpdu_no = 128 
###[ S7CommPacketRequest ]### 
       unknown = 0x32 
       type  = 1 
       reserved = 0 
       seq_no = 401 
       param_length= 110 
       data_length= 0 
       \param  \ 
        |###[ Raw ]### 
        | load  = '\x04\t\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00\x02\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00Q\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00P\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00S\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00U\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00R\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00T\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00\x01\x12\n\x10\x08\x00\x01\x00\x01\x84\x00\x00\x10' 

事は、私がScapyによって(例えば、イーサネットレイヤでのWiresharkに示すオペコード)を把握していないイーサネットレイヤから特定のデータを必要とするということである

Wireshark capture of packet at Ethernet layer

ん誰もそのようなフィールドにアクセスする方法を知っていますか? (表示させるには)

答えて

0

あなたが参照しているopcodeは、イーサネットレイヤーにはありませんが、ARP固有のオプションです。例えば

、scapyはエンコードして、彼らが受けているときにARPパケットをデコードすることができます:エーテル層を上記の

send(Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client), 
    inter=RandNum(10,40), loop=1) 

ことに注意しているARP層のサイトを、あなたが

探している opオプションがあります
0

オペコードがARPにあることに気付きました。

ここで重要なことは、検索するレイヤーがすべてのパケット(ARPなど)にカプセル化されていない場合にのみhaslayer機能を使用する必要があることです。その例は次のとおりです。

for packet in allPackets: 
    if packet.haslayer("ARP"): 
     opCode=int(indPacket["ARP"].op) 
関連する問題