我想发送大小为8字节的分段数据包和一个随机的起始偏移量。还希望省去最后一个碎片包。
到目前为止,除了片段
之外,我什么都拥有from scapy.all import *
from random import randint
dip="MY.IP.ADD.RESS"
payload="A"*250+"B"*500
packet=IP(dst=dip,id=12345,off=123)/UDP(sport=1500,dport=1501)/payload
frags=fragment(packet,fragsize=8)
print(packet.show())
for f in frags:
send(f)
以上代码有什么作用? 它将8字节大小的IP片段数据包发送到目标IP地址。
我想发送随机Frag偏移量的IP片段数据包。
我找不到关于fragment()
的任何信息,唯一可以编辑的字段是IP数据包,而不是每个零碎的IP数据包。
有人有完成此想法的想法吗?
信息:Python2.7,最新版本的scapy(pip)
答案 0 :(得分:0)
如果要生成“破碎的”片段偏移量字段,则必须自己执行。 scapyfragment()函数非常简单:
def fragment(pkt, fragsize=1480):
"""Fragment a big IP datagram"""
fragsize = (fragsize + 7) // 8 * 8
lst = []
for p in pkt:
s = raw(p[IP].payload)
nb = (len(s) + fragsize - 1) // fragsize
for i in range(nb):
q = p.copy()
del(q[IP].payload)
del(q[IP].chksum)
del(q[IP].len)
if i != nb - 1:
q[IP].flags |= 1
q[IP].frag += i * fragsize // 8 # <---- CHANGE THIS
r = conf.raw_layer(load=s[i * fragsize:(i + 1) * fragsize])
r.overload_fields = p[IP].payload.overload_fields.copy()
q.add_payload(r)
lst.append(q)
return lst
如果更改上面标记的代码行,则可以将片段偏移设置为所需的任何值。