def buildUdpResponse(req, packet, **kwargs): reqUdp = req.find(name) if reqUdp is None: return None resp = Udp() resp.srcport = reqUdp.dstport resp.dstport = reqUdp.srcport if isinstance(packet, str): resp.len += len(packet) else: resp.len += len(packet.hdr(packet.payload)) resp.set_payload(packet) return resp
def buildRequest(src, dst, payload='', ipId=0): udpPkt = Udp() udpPkt.srcport = src[2] udpPkt.dstport = dst[2] if isinstance(payload, str): udpPkt.len += len(payload) else: udpPkt.len += len(payload.hdr()) udpPkt.set_payload(payload) udpPkt.parsed = True ipPkt = Ipv4() ipPkt.flags = Ipv4.DF_FLAG ipPkt.srcip = src[1] ipPkt.dstip = dst[1] ipPkt.id = ipId ipPkt.protocol = Ipv4.UDP_PROTOCOL ipPkt.set_payload(udpPkt) ipPkt.iplen += udpPkt.len ipPkt.parsed = True udpPkt.csum = checksum(udpPkt) ethPkt = Ethernet() ethPkt.src = src[0] ethPkt.dst = dst[0] ethPkt.type = Ethernet.IP_TYPE ethPkt.set_payload(ipPkt) ethPkt.parsed = True return ethPkt
def checksum(packet): if not isinstance(packet, Udp): packet = extract(packet) if packet is None: return 0 if packet.__dict__.has_key('arr'): return packet.checksum() udpHdr = packet.hdr(packet.payload) if packet.next is None: nextHdr = '' elif isinstance(packet.next, str): nextHdr = packet.next else: nextHdr = packet.next.hdr('') s = '%s%s' % (udpHdr, nextHdr) udpPkt = Udp(raw=s, prev=packet.prev) udpPkt.next = nextHdr return udpPkt.checksum()