예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
    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
예제 #6
0
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
예제 #7
0
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