def generate_packet(src, data):
min_size = ethhdr.min_size + ip4hdr.min_size + udphdr.min_size
packet = bytearray(len(data) + min_size)
eth = ethhdr({'src': src,
'dst': pnet.HWAddress(u'ff:ff:ff:ff:ff:ff'),
'type': pnet.ETH_P_IP},
buf=packet)
ip4 = ip4hdr({'dst': ipaddress.IPv4Address(u'255.255.255.255'),
'proto': socket.IPPROTO_UDP,
'len': len(data) + ip4hdr.min_size + udphdr.min_size},
buf=eth.payload)
udp = udphdr({'sport': 68,
'dport': 67,
'len': len(data) + udphdr.min_size},
buf=ip4.payload)
ip4['csum'] = pnet.checksum(ip4.tobytes())
udp['csum'] = pnet.ipv4_checksum(ip4, udp, data)
udp.payload = data
return packet
评论列表
文章目录