示例#1
0
class Failover:
    gratuitous_arp = True

    # Todo
    arp_spoof_replier = False

    def __init__(self, network_interface, src_ip, target_ip, target_MAC):
        self.monitor = PingLoop(network_interface, src_ip, target_ip)
        self.broadcaster = ArpLoop(network_interface, target_ip, target_ip)
        self.arpResetter = ArpWithMacAddress(network_interface, target_ip,
                                             target_ip, target_MAC)
        self.isSpoofing = False

    '''
		This method is called with every ping reply (or timeout). 
		event currently contains two variables: 
			* up: is the host connected?
			* time: the time taken to reply. if not up, this will be -1
	'''

    def _get_host_status(self, event):
        if not event.up:
            if self.isSpoofing:
                print "Host is still down."
                return

            self.isSpoofing = True
            print "# Host just went down. Starting spoof!"
            if self.gratuitous_arp:
                self.t = threading.Thread(target=self.broadcaster.start)
                self.t.deamon = True
                self.t.start()

            if self.arp_spoof_replier:
                pass  #Todo
        else:
            if (self.isSpoofing):
                # Todo: broadcast for original host with original hw?
                print "# Host is back up!"
                self.stopSpoofing()

    def start(self):
        try:
            self.monitor.subscribe(self._get_host_status)
            self.monitor.run()
        except KeyboardInterrupt:
            print "\nLoop interuppted by user."
            self.stopSpoofing()

    def stopSpoofing(self):
        if self.isSpoofing:
            print "# Stopping spoof"
            self.broadcaster.stop()
            self.arpResetter.execute()
            self.t.join()
            self.isSpoofing = False
示例#2
0
class Failover:
	gratuitous_arp = True
	
	# Todo
	arp_spoof_replier = False
	
	def __init__(self, network_interface, src_ip, target_ip, target_MAC):
		self.monitor = PingLoop(network_interface, src_ip, target_ip)
		self.broadcaster = ArpLoop(network_interface, target_ip, target_ip)	
		self.arpResetter = ArpWithMacAddress(network_interface, target_ip, target_ip, target_MAC)	
		self.isSpoofing = False
	
	'''
		This method is called with every ping reply (or timeout). 
		event currently contains two variables: 
			* up: is the host connected?
			* time: the time taken to reply. if not up, this will be -1
	'''
	def _get_host_status(self, event):
		if not event.up:
			if self.isSpoofing:
				print "Host is still down."
				return
			
			self.isSpoofing = True
			print "# Host just went down. Starting spoof!"
			if self.gratuitous_arp:
				self.t = threading.Thread(target=self.broadcaster.start)
				self.t.deamon = True
				self.t.start()
				
			if self.arp_spoof_replier:
				pass #Todo
		else:		
			if(self.isSpoofing):
				# Todo: broadcast for original host with original hw?
				print "# Host is back up!"
				self.stopSpoofing()
		
	
	def start(self):
		try:
			self.monitor.subscribe(self._get_host_status)
			self.monitor.run()
		except KeyboardInterrupt:
			print "\nLoop interuppted by user."
			self.stopSpoofing()
			
	def stopSpoofing(self):
		if self.isSpoofing:
			print "# Stopping spoof"
			self.broadcaster.stop()
			self.arpResetter.execute()
			self.t.join()
			self.isSpoofing = False