|
@@ -0,0 +1,477 @@
|
|
|
+
|
|
|
+import socket
|
|
|
+import sys
|
|
|
+import struct
|
|
|
+import time
|
|
|
+
|
|
|
+sys.stdout.write("\x1b]2;Nodescan\x07")
|
|
|
+
|
|
|
+print(socket.AF_INET)
|
|
|
+
|
|
|
+try:
|
|
|
+ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
|
+ sock.bind(('', 6454))
|
|
|
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
|
+except socket.error as e:
|
|
|
+ print("Socket 6454 ", "ERR: {0} ".format(e.args))
|
|
|
+ sys.exit()
|
|
|
+
|
|
|
+
|
|
|
+def ArtNet_poll(ip,port=6454):
|
|
|
+ print("POLL",[ip,port],end="")
|
|
|
+ sock.sendto(b'Art-Net\x00\x00 \x00\x0e\x06\x00',(ip,port)) # ArtPol / ping
|
|
|
+ print(" OK ;",end="")
|
|
|
+ print()
|
|
|
+
|
|
|
+
|
|
|
+def ArtNet_decode_pollreplay(data):
|
|
|
+ debug = 1
|
|
|
+ node = {}
|
|
|
+ if len(data) >= 10: #min opcode
|
|
|
+
|
|
|
+ opcode = data[8:9+1]
|
|
|
+ #print([opcode])
|
|
|
+ #if opcode != struct.pack("<H",0x5000): #OpPollReplay
|
|
|
+ if opcode == struct.pack("<H",0x2100): #OpPollReplay
|
|
|
+ if len(data) >= 207: #Mal
|
|
|
+ print("decode",data[:13])
|
|
|
+ if debug:print("-----------------------------------------")
|
|
|
+ if debug:print([opcode] ,"OpPollReplay")
|
|
|
+ _ip = []
|
|
|
+ print(data[10])
|
|
|
+ _ip.append( data[10] )
|
|
|
+ _ip.append( data[11] )
|
|
|
+ _ip.append( data[12] )
|
|
|
+ _ip.append( data[13] )
|
|
|
+ node["IP"] = str(_ip)
|
|
|
+
|
|
|
+ if debug:print([_ip])
|
|
|
+ _port = struct.unpack("<H",data[14:15+1] )
|
|
|
+ #Versinfo = struct.unpack("<H",data[16:17+1] )
|
|
|
+ Versinfo = data[16:17+1]
|
|
|
+ node["port"] = _port
|
|
|
+ if debug:print("_port :", [_port ])
|
|
|
+
|
|
|
+ node["version"] = Versinfo
|
|
|
+ if debug:print("Version:",[Versinfo])
|
|
|
+
|
|
|
+ NetSwitch = data[18]
|
|
|
+ node["NetSwitch"] = NetSwitch
|
|
|
+ if debug:print("NetSwitch:",[NetSwitch])
|
|
|
+ SubSwitch = data[19]
|
|
|
+ node["SubSwitch"] = SubSwitch
|
|
|
+ if debug:print("SubSwitch:",[SubSwitch])
|
|
|
+
|
|
|
+ #oem = struct.unpack("<H",data[19:20+1] )
|
|
|
+ oem = data[20:21+1]
|
|
|
+ node["oem"] = oem
|
|
|
+ if debug:print("oem",[oem])
|
|
|
+
|
|
|
+ ubea = data[22]
|
|
|
+ node["ubea"] = ubea
|
|
|
+ if debug:print("ubea ver.",[ubea])
|
|
|
+ stat = data[23]
|
|
|
+ node["status"] = stat
|
|
|
+ if debug:print("Status1 ",[stat])
|
|
|
+ esta = data[24:25+1]
|
|
|
+ node["esta"] = esta
|
|
|
+ if debug:print("esta Manuf",[esta])
|
|
|
+
|
|
|
+
|
|
|
+ sname = data[26:26+17]
|
|
|
+ #if debug:print(len(sname) #17+1)
|
|
|
+ sname = sname.strip(b"\x00")
|
|
|
+ node["sname"] = sname
|
|
|
+
|
|
|
+ lname = data[44:44+43]
|
|
|
+ #if debug:print(len(lname) #43+1)
|
|
|
+ lname = lname.strip(b"\x00")
|
|
|
+ node["lname"] = lname
|
|
|
+
|
|
|
+ NodeReport = data[108:108+20]
|
|
|
+ NodeReport = NodeReport.strip(b"\x00")
|
|
|
+ #if debug:print("Node",node_nr,addr)
|
|
|
+ if debug:print([sname,lname,NodeReport])
|
|
|
+
|
|
|
+ NumPort = data[173]
|
|
|
+ node["NumPort"] = NumPort
|
|
|
+ if debug:print("NumPort",[NumPort])
|
|
|
+
|
|
|
+ PortTypes = data[174:174+4]
|
|
|
+ node["PortTypes"] = PortTypes
|
|
|
+ if debug:print("PortTypes",[PortTypes])
|
|
|
+
|
|
|
+ GoodInput = data[178:178+4]
|
|
|
+ node["GoodInput"] = GoodInput
|
|
|
+ if debug:print("GoodInput",[GoodInput])
|
|
|
+ GoodOutput = data[182:182+4]
|
|
|
+ node["GoodOutput"] = GoodOutput
|
|
|
+ if debug:print("GoodOutput",[GoodOutput])
|
|
|
+
|
|
|
+ SwIn = data[186:186+4]
|
|
|
+ node["SwIn"] = SwIn
|
|
|
+ if debug:print("SwIn",[SwIn])
|
|
|
+
|
|
|
+ SwOut = data[190:190+4]
|
|
|
+ node["SwOut"] = SwOut
|
|
|
+ if debug:print("SwOut",[SwOut])
|
|
|
+
|
|
|
+ msg = data[108:108+40]
|
|
|
+ node["MSG"] = msg.replace(b"\x00",b"")
|
|
|
+ if debug:print("MSG",[msg])
|
|
|
+
|
|
|
+
|
|
|
+ MAC = data[201:201+6]
|
|
|
+ _MAC = []
|
|
|
+ for x in MAC:
|
|
|
+ #x = hex(ord(x))[2:]
|
|
|
+ x = hex(x)#[2:]
|
|
|
+ x = x.rjust(2,"0")
|
|
|
+ _MAC.append(x)
|
|
|
+ #hex(ord("\xf9"))[2:]
|
|
|
+ if debug:print("MAC",[":".join(_MAC)])
|
|
|
+ node["MAC"] = ":".join(_MAC)
|
|
|
+
|
|
|
+ #node_nr += 1
|
|
|
+ #if debug:print([addr,data])
|
|
|
+ #print()
|
|
|
+ else:
|
|
|
+ print(opcode, len(data))
|
|
|
+ return node
|
|
|
+
|
|
|
+
|
|
|
+def loop():
|
|
|
+ print("-- NODE SCAN START ---")
|
|
|
+ print()
|
|
|
+ while 1:
|
|
|
+ data, addr = sock.recvfrom(500)
|
|
|
+ new_node = ArtNet_decode_pollreplay( data )
|
|
|
+ print("rvc loop",addr)
|
|
|
+ if new_node:
|
|
|
+ print("rcv",new_node)
|
|
|
+ #self.add(new_node)
|
|
|
+ time.sleep(0.001)
|
|
|
+ print("-- NODE SCAN STOP ---")
|
|
|
+ print()
|
|
|
+
|
|
|
+
|
|
|
+#loop()
|
|
|
+import _thread as thread
|
|
|
+thread.start_new_thread(loop, () )
|
|
|
+
|
|
|
+time.sleep(2)
|
|
|
+
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+print()
|
|
|
+print()
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|
|
|
+ArtNet_poll("10.0.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("2.255.255.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.2.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.1.255")
|
|
|
+time.sleep(0.5)
|
|
|
+ArtNet_poll("192.168.0.255")
|
|
|
+time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+while 1:
|
|
|
+ time.sleep(1)
|