2021-04-14 02:33:01 -05:00
|
|
|
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
|
2021-04-14 18:16:57 -05:00
|
|
|
|
2021-04-14 02:33:01 -05:00
|
|
|
>>> 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 "<stdin>", line 1, in <module>
|
|
|
|
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 "<stdin>", line 1, in <module>
|
|
|
|
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'
|
|
|
|
|
|
|
|
|