2016-07-23 2 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' 

Дело в том, что мне нужны конкретные данные из слоя Ethernet, не захваченной Scapy (например опкод показано в Wireshark на уровне Ethernet)

Wireshark capture of packet at Ethernet layer

ли кто-нибудь знает, как получить доступ к таким полям? (показать их?)

ответ

0

opcode, о котором вы говорите, отсутствует в слое Ethernet, но является специфичным для 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.

Что-то важное здесь заключается в том, что функция haslayer должна использоваться только в том случае, если слой, который вы хотите «искать», не инкапсулирован во все пакеты (например, ARP). Примером этого является:

for packet in allPackets: 
    if packet.haslayer("ARP"): 
     opCode=int(indPacket["ARP"].op) 
Смежные вопросы