def do(local_address, evt): while not self.__event.isSet(): devices = [] try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.settimeout(self.__interval) sock.bind((local_address, 0)) sock.sendto(_discover.DISCOVERY_QUERY[4:], (_discover.QUERY_TARGET, 9999)) except socket.error: continue else: try: while True: data, addr = sock.recvfrom(4096) ip, p = addr info = json.loads(protocol.decrypt(data)) for key in ('schedule', 'count_down', 'anti_theft'): try: err = ( info[key]['get_rules']['err_code']) if err == -11: class Device(object): @staticmethod def query(**kwargs): return protocol.query( ip, **kwargs) from dtime import DTime time_setter = DTime(Device) time_setter.set() break except KeyError: pass else: sys_info = info['system']['get_sysinfo'] info['ip'] = ip info['id'] = sys_info['deviceId'] devices.append(info) except socket.error: if devices: self._update(devices) for new_device in devices: for old_device in self: if old_device.id == new_device['id']: old_device.polling_data = ( new_device) evt.set()
def do(local_address, prt, evt): dvcs = [] global restart _LOGGER.debug( "Sending discovery to 255.255.255.255:%s on local address %s", prt, local_address) try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.settimeout(timeout) sock.bind((local_address, 1025)) sock.sendto(DISCOVERY_QUERY[4:], (QUERY_TARGET, prt)) except socket.error: raise TPLinkException.SocketError('Discover Socket Error:') else: try: while True: data, addr = sock.recvfrom(4096) ip, p = addr info = json.loads(protocol.decrypt(data)) for key in ('schedule', 'count_down', 'anti_theft'): if ('err_code' in info[key]['get_rules'] and info[key]['get_rules']['err_code'] == -11): class Device(object): @staticmethod def query(**kwargs): import protocol return protocol.query(ip, **kwargs) from dtime import DTime time_setter = DTime(Device) time_setter.set() restart = True break info['ip'] = ip info['port'] = port dvcs.append(info) except socket.timeout: if not restart: _LOGGER.debug("Found %d devices on local address %s", len(dvcs), local_address) devices.extend(dvcs) except socket.error: _LOGGER.error("Got exception %s") finally: evt.set()
def clientFunc(target, message): try: print("Message sent to {}:{}.".format(*target)) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect(target) sock.send(message) sock.shutdown(socket.SHUT_RDWR) except KeyboardInterrupt: print("Killed.") except: print("TauNet node {}:{}".format(*target) + " is offline.") print("Saving Message in Log...") logMessage.append(protocol.decrypt(message,str.encode('password'))) logTarget.append(target) finally: sock.close()
def send(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def close_socket(): try: sock.shutdown(socket.SHUT_RDWR) sock.close() except socket.error: pass try: sock.connect((self._ip, 9999)) except socket.error: close_socket() raise TPLinkException.SocketError("Socket Connection Error:") sock.send(protocol.encrypt(data)) buf = bytes() length = -1 while True: chunk = sock.recv(4096) if not chunk: break if length == -1: length = struct.unpack(">I", chunk[0:4])[0] buf += chunk if length > 0 and len(buf) >= length + 4: break close_socket() if not len(buf): raise TPLinkException.CorruptedDataError('No Data Received') return protocol.decrypt(buf[4:])