Пример #1
0
    def __on_discover(self, mpkt):
        values = self.get_values(mpkt)

        spoof = MetaPacket.new_from_layer(mpkt, 'bootp')
        spoof.set_field('bootp.op', BOOTP_REPLY)

        try:
            client_ip = self.pool_iter.next()
        except StopIteration:
            log.debug('No available IP address')
            return

        spoof.set_field('bootp.yiaddr', client_ip)
        spoof.set_field('bootp.siaddr', self.session.context.get_ip1())

        options = self.setup_options(values).items()
        options.append(('message-type', 'offer'))
        options.append('end')

        spoof.set_field('dhcp.options', options)

        self.send_dhcp(
            self.session.context.get_ip1(),
            mpkt.l3_src != '0.0.0.0' and mpkt.l3_src or '255.255.255.255',
            mpkt.l2_src, spoof)
Пример #2
0
    def __on_request(self, mpkt):
        values = self.get_values(mpkt)

        spoof = MetaPacket.new_from_layer(mpkt, 'bootp')
        spoof.set_field('bootp.op', BOOTP_REPLY)

        if 'requested_addr' in values:
            client_ip = values.pop('requested_addr')
        else:
            client_ip = mpkt.get_field('bootp.ciaddr')

            if client_ip == '0.0.0.0':
                log.debug('Client ip is 0.0.0.0 Exit!')
                return

        spoof.set_field('bootp.yiaddr', client_ip)

        if 'server_id' in values:
            server_ip = values.pop('server_id')
        else:
            server_ip = self.session.context.get_ip1()

        spoof.set_field('bootp.siaddr', server_ip)

        options = self.setup_options(values)
        options['server_id'] = server_ip

        options = options.items()
        options.append(('message-type', 'ack'))
        options.append('end')

        spoof.set_field('dhcp.options', options)

        self.send_dhcp(
            self.session.context.get_ip1(),
            mpkt.l3_src != '0.0.0.0' and mpkt.l3_src or '255.255.255.255',
            mpkt.l2_src, spoof)