我正在编写一个python脚本,我需要从某些数据包层中选择特定字段。 packet.show()
生成:
###[ 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 :(得分: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
选项
答案 1 :(得分:0)
我意识到操作码是在ARP中。
这里重要的一点是,只有当您要“搜索”的图层未封装在所有数据包(例如ARP)中时,才应使用haslayer函数。一个例子是:
for packet in allPackets:
if packet.haslayer("ARP"):
opCode=int(indPacket["ARP"].op)