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)
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)