Hi all,
This is my first post. Usually I can search out answers to my problems but today I'm having a bit of difficulty finding what I'm doing wrong populating a list of MAC addresses from a callback function, all enclosed within a class. The list is always empty on the very last line where I print it out. If I print the contents of the list from within the callback function each time it is raised, it looks correct. I'm having a feeling it has to do with scope or might need a lambda function but I'm foggy on some aspects there. I apologize for my numerous un-pythonic statements. I'm totally self taught and come from using mainly Visual Basic so I can be a bit of a sloppy coder at times. Here's my code: NOTE: This is normally executed on a Raspberry Pi.
import nmap, sys, socket, subprocess
class IP_Roam():
def __init__(self, root_ip="", display_on=False):
self.mac_list = []
self.display_on = display_on
self.router_ip = root_ip
self.end_ip = ""
def callback_result(self, host, scan_result):
if self.display_on:
sys.stdout.write('\rScanning ' + str(host).ljust(15, ' '))
sys.stdout.flush()
for ip in scan_result['scan']:
try:
mac = scan_result['scan'][u'' + str(ip)]['addresses'][u'mac']
if mac:
myscan.mac_list.append(mac)
#ipv4 = scan_result['scan'][u'' + str(ip)]['addresses'][u'ipv4']
except:
# This happens when it finds itself
pass