def create_packet_padr(dst, src, accookie, acname, service): """ Create PADR packet :param dst: Destination MAC :param src: Source MAC :param accookie: AC-Cookie tag :param acname: AC-Name tag :param service: Service-Name tag :return: packet """ tags = [] tags.append( PPPoE_Tag(type='Host-Uniq', data=b'\x08\xf4\x18\x35\x80\xff\xff\xff')) if accookie != None: tags.append(PPPoE_Tag(type='AC-Cookie', data=accookie)) if acname != None: tags.append(PPPoE_Tag(type='AC-Name', data=acname)) if service != None: tags.append(PPPoE_Tag(type='Service-Name', data=service)) packet = Ether(dst=dst, src=src, type=0x8863) / \ PPPoED(version=1, type=1, code=0x19, sessionid=0x0000, tags=tags) return packet
def runTest(self): # FIXME: using a dummy payload will generate malformed PPP packets, # instead we should use appropriate PPP protocol values and PPPoED # payload (tags) # https://www.cloudshark.org/captures/f79aea31ad53 pkts = { "PADO": Ether(src=SWITCH_MAC, dst=HOST1_MAC) / \ PPPoED(version=1, type=1, code=PPPOED_CODE_PADO) / \ "dummy pppoed payload", "PADS": Ether(src=SWITCH_MAC, dst=HOST1_MAC) / \ PPPoED(version=1, type=1, code=PPPOED_CODE_PADS) / \ "dummy pppoed payload" } print "" for pkt_type, pkt in pkts.items(): print "Testing %s packet..." % pkt_type self.doRunTest(pkt)
def runTest(self): # FIXME: using a dummy payload will generate malformed PPP packets, # instead we should use appropriate PPP protocol values and PPPoED # payload (tags) # https://www.cloudshark.org/captures/f79aea31ad53 pkts = { "PADI": Ether(src=HOST1_MAC, dst=BROADCAST_MAC) / \ PPPoED(version=1, type=1, code=PPPOED_CODE_PADI) / \ "dummy pppoed payload", "PADR": Ether(src=HOST1_MAC, dst=SWITCH_MAC) / \ PPPoED(version=1, type=1, code=PPPOED_CODE_PADR) / \ "dummy pppoed payload", } print "" for line_mapped in [True, False]: for pkt_type, pkt in pkts.items(): print "Testing %s packet, line_mapped=%s..." \ % (pkt_type, line_mapped) self.doRunTest(pkt, line_mapped)
def create_packet_padi(service): """ Create PADI packet :param service: Service-Name tag :return: packet """ tags = [] tags.append( PPPoE_Tag(type='Host-Uniq', data=b'\x08\xf4\x18\x35\x80\xff\xff\xff')) if service != None: tags.append(PPPoE_Tag(type='Service-Name', data=service)) packet = Ether(dst="ff:ff:ff:ff:ff:ff", src="32:ef:21:95:12:0a", type=0x8863) / \ PPPoED(version=1, type=1, code=0x09, sessionid=0x0000, tags=tags) return packet
def create_packet_padi(service, number_ses): """ Create PADI packet :param service: Service-Name tag :return: packet """ tags = [] tags.append(PPPoE_Tag(type='Host-Uniq', data=random_hU())) if service != None: tags.append(PPPoE_Tag(type='Service-Name', data=service)) packet = Ether(dst="ff:ff:ff:ff:ff:ff", src=get_next_mac(number_ses), type=0x8863) / \ PPPoED(version=1, type=1, code=0x09, sessionid=0x0000, tags=tags) return packet
def create_stream_pppoe_discovery(self, src_if, dst_if, client_mac, 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) / PPPoED(sessionid=0) / 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