您好我一直在努力使用Scapy数据结构,我的意思是,数据包的存储方式和访问方式。
因此,不仅仅是使用sintax并依赖于我,我想做一些研究,以便更好地了解并熟悉其背后的内容。
我看过它是一本字典词典,但不是这本词典的字典。
我遇到了我认为它背后的结构,如果我错了,我希望你纠正我,但我认为这是有道理的:对象字典,其中每个对象都是TCP / IP层。
这样一切都有意义(除了我没有以太网中的有效载荷,这将是IP之后的所有IP和有效载荷,这将是TCP之后的所有内容)
无论如何,我认为这将有助于揭示scapy结构, 虽然我知道它不是100%准确:
$('tr').on('mouseenter', function(){
$(this).css({background:'#f00'});
});
$('tr').on('mouseleave', function(){
$(this).css({background:''});
});
有了这个输出:
#Scapy
class Ether:
def __init__(self,dst='ff:ff:ff:ff:ff:ff',src='00:00:00:00:00:00',type=0):
self.dst=dst
self.src=src
self.type=type
class IP:
def __init__(self,version=4,ihl=None,tos=0,leng=None,idd=1
,flags=None,frag=0,ttl=64,proto=06,chksum=None,src='127.0.0.1',dst='127.0.0.1'):
self.version = version
self.ihl = ihl
self.tos = tos
self.leng = leng
self.idd = idd
self.flags = flags
self.frag = frag
self.ttl = ttl
self.proto = proto
self.chksum = chksum
self.src = src
self.dst = dst
class TCP:
def __init__(self,sport=21,dport=80,seq=0,ack=0,dataofs=None,reserved=0
,flags=0,window=8192,chksum=None,urgptr=0,options=0,payload=''):
self.sport=sport;
self.dport=dport;
self.seq=seq
self.ack=ack
self.dataofs=dataofs
self.reserved=reserved
self.flags=flags
self.window=window
self.chksum=chksum
self.urgptr=urgptr
self.options=options
self.payload=payload
pkt1 = {'Ether':Ether(src='ff:aa:bb:aa:dd:aa'),'IP':IP(src='192.168.1.10',dst='192.168.1.1')}
pkt2 = {'IP':IP(dst='8.8.8.8'),'TCP':TCP(dport=80)}
print pkt1['IP'].src
pkts = []
pkts.append(pkt1)
pkts.append(pkt2)
for pkt in pkts:
print pkt['IP'].dst
print pkts[0]['Ether'].src
希望这是有益的,你可以纠正我的错误。
答案 0 :(得分:2)
从this article阅读:
Scapy使用Python字典作为数据包的数据结构。每 packet是嵌套字典的集合,每个层都是一个 上一层的子字典,从最下层构建。 每个字段(例如以太网
dst
值或ICMPtype
值)是 相应图层中的键:值对。这些字段(和嵌套的 层)都是可变的,所以我们可以使用它来重新分配它们 赋值运算符。