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' 

것은 내가 Scapy에 의해 파악되지 않은 이더넷 층에서 특정 데이터 필요하다 (를 예를 들어 이더넷 계층에서 와이어 샤크에 표시된 오피 코드)

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

opcode가 ARP에 있음을 알게되었습니다.

여기서 중요한 것은 "검색"하려는 계층이 모든 패킷 (예 : ARP)에 캡슐화되지 않은 경우에만 haslayer 기능을 사용해야한다는 것입니다. 예를 들면 다음과 같습니다.

for packet in allPackets: 
    if packet.haslayer("ARP"): 
     opCode=int(indPacket["ARP"].op) 
관련 문제