nfutil.Discover(s, r) result: {b'\x00!i\x01-\xaf': {'magic': 90, 'id': 1, 'sequence': 27564, 'eth_addr': b'\x00!i\x01-\xaf', 'uptime_days': 37, 'uptime_hrs': 5, 'uptime_min': 19, 'uptime_secs': 5, 'mode': 1, 'alert': 0, 'ip_type': 0, 'ip_addr': b'\xc0\xa8\x00\xe5', 'ip_netmask': b'\xff\xff\xff\x00', 'ip_gw': b'\xc0\xa8\x00\x01', 'app_ver': b'\x01\x06\x06\x00', 'boot_ver': b'\x01\x03\x00\x00', 'hw_ver': b'\x01\x03\x00\x00', 'name': b'600\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}} -- Dict with single item >>> device = d[list(d)[0]] >>> device {'magic': 90, 'id': 1, 'sequence': 27564, 'eth_addr': b'\x00!i\x01-\xaf', 'uptime_days': 37, 'uptime_hrs': 5, 'uptime_min': 19, 'uptime_secs': 5, 'mode': 1, 'alert': 0, 'ip_type': 0, 'ip_addr': b'\xc0\xa8\x00\xe5', 'ip_netmask': b'\xff\xff\xff\x00', 'ip_gw': b'\xc0\xa8\x00\x01', 'app_ver': b'\x01\x06\x06\x00', 'boot_ver': b'\x01\x03\x00\x00', 'hw_ver': b'\x01\x03\x00\x00', 'name': b'600\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'} >>> socket.inet_ntoa(device['hw_ver']) '1.3.0.0' >>> socket.inet_ntoa(device['boot_ver']) '1.3.0.0' >>> socket.inet_ntoa(device['app_ver']) '1.6.6.0' >>> device['uptime_days'] 37 >>> device['uptime_hrs'] 5 >>> device['uptime_min'] 19 >>> device['uptime_secs'] 5 >>> socket.inet_ntoa(device['name']) Traceback (most recent call last): File "", line 1, in OSError: packed IP wrong length for inet_ntoa >>> socket.inet_ntoa(device['ip_addr']) '192.168.0.229' >>> seq 30327 >>> nfutil.MkSetEthernetAddress(seq, device['eth_addr'], b'\xfa\xfa\xfa\xfa\xfa\xfa') b'Z\rvw\x00!i\x01-\xaf\x00\x00\xfa\xfa\xfa\xfa\xfa\xfa\x00\x00' >>> msg = nfutil.MkVerify(seq, device['eth_addr']) >>> msg b'Z\nvw\x00!i\x01-\xaf\x00\x00' >>> msg = nfutil.MkIdentify(seq) >>> msg b'Z\x00vw\xff\xff\xff\xff\xff\xff\x00\x00' >>> nfutil.SendMsg(s, msg) True >>> reply = nfutil.RecvMsg(r) >>> reply b'Z\x01vw\x00!i\x01-\xaf\x00\x00\x00%\x0572\x01\x00\x00\xc0\xa8\x00\xe5\xff\xff\xff\x00\xc0\xa8\x00\x01\x01\x06\x06\x00\x01\x03\x00\x00\x01\x03\x00\x00600\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> nfutil.UnMkIdentifyReply(reply) {'magic': 90, 'id': 1, 'sequence': 30327, 'eth_addr': b'\x00!i\x01-\xaf', 'uptime_days': 37, 'uptime_hrs': 5, 'uptime_min': 55, 'uptime_secs': 50, 'mode': 1, 'alert': 0, 'ip_type': 0, 'ip_addr': b'\xc0\xa8\x00\xe5', 'ip_netmask': b'\xff\xff\xff\x00', 'ip_gw': b'\xc0\xa8\x00\x01', 'app_ver': b'\x01\x06\x06\x00', 'boot_ver': b'\x01\x03\x00\x00', 'hw_ver': b'\x01\x03\x00\x00', 'name': b'600\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'} >>> msg = nfutil.MkTest(seq, device['eth_addr']) >>> msg b'Z\x0fvw\x00!i\x01-\xaf\x00\x00' >>> nfutil.SendMsg(s, b'Z\x0fvw\x00!i\x01-\xaf\x00\x00') True >>> reply = nfutil.RecvMsg(r) >>> reply b'Z\x03vw\x00!i\x01-\xaf\x00\x00\x00\x00\x00\x00' >>> msg = nfutil.MkAssignment(seq, device['eth_addr'], device['ip_type'], '192.168.0.123', '255.255.255.0', '192.168.0.1') Traceback (most recent call last): File "", line 1, in File "/home/wolfpack/Downloads/progpib/vendortools/nfutil.py", line 213, in MkAssignment socket.inet_aton(gateway) struct.error: char format requires a bytes object of length 1 >>> msg = nfutil.MkHeader(nfutil.NF_ASSIGNMENT, seq, device['eth_addr']) >>> msg b'Z\x02vw\x00!i\x01-\xaf\x00\x00' >>> import struct >>> struct.pack(nfutil.ASSIGNMENT_FMT, b'\x00', device['ip_addr'], device['ip_netmask'], device['ip_gw']) b'\x00\x00\x00\x00\xc0\xa8\x00\xe5\xff\xff\xff\x00\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> msg = nfutil.MkHeader(nfutil.NF_ASSIGNMENT, seq, device['eth_addr']) + struct.pack(nfutil.ASSIGNMENT_FMT, b'\x00', device['ip_addr'], device['ip_netmask'], device['ip_gw']) >>> msg b'Z\x02vw\x00!i\x01-\xaf\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\xe5\xff\xff\xff\x00\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) >>> s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) >>> s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) >>> s.bind(('192.168.0.245', 0)) >>> port = s.getsockname()[1] >>> >>> r = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) >>> r.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) >>> >>> r.setblocking(1) >>> r.settimeout(0.100) >>> r.bind(('', port)) >>> >>> msg = nfutil.MkHeader(nfutil.NF_ASSIGNMENT, seq, device['eth_addr']) + struct.pack(nfutil.ASSIGNMENT_FMT, b'\x00', device['ip_addr'], device['ip_netmask'], device['ip_gw']) >>> msg b'Z\x02vw\x00!i\x01-\xaf\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\xe5\xff\xff\xff\x00\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> nfutil.SendMsg(s, msg) True >>> reply = nfutil.RecvMsg(r) >>> reply b'Z\x03vw\x00!i\x01-\xaf\x00\x00\x00\x00\x00\x00'