def create_packet_ipcp_config(dst, src, sessionid, code, id=0x01, ip=b'\x00\x00\x00\x00'): """ Create IPCP Configuration Request packet :param dst: Destination MAC :param src: Source MAC :param sessionid: PPPoE session id :param code: LCP code :param id: Message id :param ip: 0.0.0.0 ip address :return: packet """ options = [] options.append(PPP_IPCP_Option(type=0x03, data=ip)) packet = Ether(dst=dst, src=src, type=0x8864) / \ PPPoE(version=1, type=1, sessionid=sessionid) / \ PPP(proto=0x8021) / \ PPP_IPCP(code=code, id=id, options=options) return packet
def create_packet_lcp_config(dst, src, sessionid, code, magic, id=0x01, mru=1492): """ Create lcp packet :param dst: Destination MAC :param src: Source MAC :param sessionid: PPPoE session id :param code: LCP code :param id: Message id :param mru: MRU value :param magic: Magic value :return: packet """ options = [] options.append( PPP_LCP_Option(type=0x01, data=mru.to_bytes(2, byteorder='big'))) options.append( PPP_LCP_Option(type=0x05, data=magic.to_bytes(4, byteorder='big'))) packet = Ether(dst=dst, src=src, type=0x8864) / \ PPPoE(version=1, type=1, sessionid=sessionid) / \ PPP(proto=0xc021) / \ PPP_LCP(code=code, id=id, options=options) return packet
def lcp_ack_packet(src, dst, sessionid, id, magic_number): ether = Ether(src=src, dst=dst, type=0x8864) pppoe = PPPoE(sessionid=sessionid) ppp = PPP(proto=LCP) ppp_mru = PPP_LCP_MRU_Option(max_recv_unit=1492) ppp_magic = "\x05\x06" + magic_number ppp_lcp = PPP_LCP(code=2, id=id, data=(Raw(ppp_mru) / ppp_magic)) return ether / pppoe / ppp / ppp_lcp
def lcp_req_packet(src, dst, sessionid, id, magic_number): ether = Ether(src=src, dst=dst, type=0x8864) pppoe = PPPoE(sessionid=sessionid) ppp = PPP(proto=LCP) ppp_mru = PPP_LCP_MRU_Option(max_recv_unit=1492) ppp_auth = PPP_LCP_Auth_Protocol_Option(auth_protocol=PAP) ppp_magic = PPP_LCP_Magic_Number_Option(magic_number=magic_number) ppp_lcp = PPP_LCP(code=1, id=id, data=(Raw(ppp_mru) / Raw(ppp_auth) / Raw(ppp_magic))) return ether / pppoe / ppp / ppp_lcp
def create_stream_pppoe_lcp(self, src_if, dst_if, client_mac, session_id, count=1): packets = [] for i in range(count): # create packet info stored in the test case instance info = self.create_packet_info(src_if, dst_if) # convert the info into packet payload payload = self.info_to_payload(info) # create the packet itself p = (Ether(dst=src_if.local_mac, src=client_mac) / PPPoE(sessionid=session_id) / PPP(proto=0xc021) / Raw(payload)) # store a copy of the packet in the packet info info.data = p.copy() # append the packet to the list packets.append(p) # return the created packet list return packets
def create_packet_lcp_config_pkt(dst, src, sessionid, source, code): """ Take source packet Get last fields Form new packet Then copy last fields :param dst: Destination MAC :param src: Source MAC :param sessionid: PPPoE session id :param source: source packet :param code: LCP code :return: packet """ packet = Ether(dst=dst, src=src, type=0x8864) / \ PPPoE(version=1, type=1, sessionid=sessionid) / \ PPP(proto=0xc021) / \ source[PPP_LCP] packet[PPP_LCP].code = code return packet
def pkt_add_pppoe(pkt, type, code, session_id): return Ether(src=pkt[Ether].src, dst=pkt[Ether].dst) / \ PPPoE(version=1, type=type, code=code, sessionid=session_id) / \ PPP(proto=0x0021) / pkt[Ether].payload