Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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()