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 buildRequest(src=ETHER_ANY, dst=ETHER_ANY, typ=Ethernet.IP_TYPE, payload=''): packet = Ethernet() packet.src = src packet.dst = dst packet.type = typ packet.next = payload # TODO build packet.arr packet.parsed = True return packet
def buildResponse(req, packet, **kwargs): resp = Ethernet() resp.src = req.dst resp.dst = req.src resp.type = req.type resp.set_payload(packet) if len(kwargs) != 0: for key in kwargs.keys(): if key not in resp.__dict__.keys(): continue setattr(resp, key, kwargs[key]) resp.parsed = True return resp
def buildArpRequest(srcMac, srcIp, dstIp): arpPkt = Arp() arpPkt.hwsrc = srcMac arpPkt.hwlen = 6 arpPkt.protolen = 4 arpPkt.opcode = Arp.REQUEST arpPkt.protosrc = srcIp arpPkt.protodst = dstIp arpPkt.parsed = True ethPkt = Ethernet() ethPkt.src = srcMac ethPkt.dst = ETHER_BROADCAST ethPkt.type = Ethernet.ARP_TYPE ethPkt.set_payload(arpPkt) ethPkt.parsed = True return ethPkt