本文整理汇总了Python中Scanner.scan方法的典型用法代码示例。如果您正苦于以下问题:Python Scanner.scan方法的具体用法?Python Scanner.scan怎么用?Python Scanner.scan使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Scanner
的用法示例。
在下文中一共展示了Scanner.scan方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: monitors
# 需要导入模块: import Scanner [as 别名]
# 或者: from Scanner import scan [as 别名]
class SlaveDaemon:
"""
Main slave class
It does communication between different monitors (KNX, EnOcean... in C) and the masters (servers)
"""
def __init__(self, log_flag):
self.logger = Logger(log_flag, LOG_FILE);
self.logger.info('Started Domoleaf Slave daemon');
print('######## SLAVE DAEMON #######')
self.connected_masters = {};
self.connected_knx = [];
self.connected_enocean = [];
self.connected_cron = [];
self.clients = [];
self._scanner = Scanner();
self._hostlist = [];
myhostname = socket.gethostname().upper()
if SLAVE_NAME_PREFIX in myhostname:
self._scanner.scan();
self._hostlist = self._scanner._HostList;
else:
self._hostlist.append(Host('', '127.0.0.1', myhostname));
self._parser = DaemonConfigParser(SLAVE_CONF_FILE);
self.encrypt_keys = {};
self.knx_sock = None;
self.master_sock = None;
self.enocean_sock = None;
self.cron_sock = None;
self.private_aes = self._parser.getValueFromSection('personnal_key', 'aes');
self.wifi_init(self._parser.getValueFromSection('wifi', 'ssid'), self._parser.getValueFromSection('wifi', 'password'), self._parser.getValueFromSection('wifi', 'encryption'), self._parser.getValueFromSection('wifi', 'mode'), 0);
self.connect_port = self._parser.getValueFromSection(SLAVE_CONF_CONNECT_SECTION, SLAVE_CONF_CONNECT_PORT_ENTRY);
self.functions = {
KNX_READ_REQUEST : self.knx_read_request,
KNX_WRITE_SHORT : self.knx_write_short,
KNX_WRITE_LONG : self.knx_write_long,
KNX_WRITE_TEMP : self.knx_write_temp,
CHECK_SLAVE : self.check_slave,
MONITOR_IP : self.monitor_ip,
DATA_UPDATE : self.update,
SEND_TECH : self.send_tech,
SEND_ALIVE : self.send_alive,
SEND_INTERFACES : self.send_interfaces,
SHUTDOWN_D3 : self.shutdown_d3,
REBOOT_D3 : self.reboot_d3,
WIFI_UPDATE : self.wifi_update
};
def update(self, json_obj, connection):
p = call(['dpkg', '--configure', '-a'])
call(['apt-get', 'update']);
call(['DEBIAN_FRONTEND=noninteractive', 'apt-get', 'install', 'domoslave', '-y']);
version = os.popen("dpkg-query -W -f='${Version}\n' domoslave").read().split('\n')[0];
json_str = '{"packet_type": "update_finished", "aes_pass": "' + self.private_aes + '", "new_version": ' + version + '}';
encrypt_IV = AESManager.get_IV();
spaces = 16 - len(json_str) % 16;
json_str = json_str + (spaces * ' ');
encode_obj = AES.new(self.private_aes, AES.MODE_CBC, encrypt_IV);
data = encode_obj.encrypt(json_str);
# faut ouvrir une nouvelle socket pour envoyer la nouvelle version
# connection.send(bytes(encrypt_IV, 'utf-8') + data);
def run(self):
"""
Initialization of the sockets for listenning incomming connections.
Calls the loop function.
"""
self.run = True;
self.knx_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.master_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.enocean_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.cron_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.knx_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1);
self.master_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1);
self.enocean_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1);
self.cron_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1);
port = self._parser.getValueFromSection(SLAVE_CONF_KNX_SECTION, SLAVE_CONF_KNX_PORT_ENTRY);
if not port:
sys.exit(2);
port_master = self._parser.getValueFromSection(SLAVE_CONF_LISTEN_SECTION, SLAVE_CONF_LISTEN_PORT_ENTRY);
if not port_master:
sys.exit(2);
port_enocean = self._parser.getValueFromSection(SLAVE_CONF_ENOCEAN_SECTION, SLAVE_CONF_ENOCEAN_PORT_ENTRY);
if not port_enocean:
sys.exit(2);
port_cron = self._parser.getValueFromSection(SLAVE_CONF_CRON_SECTION, SLAVE_CONF_CRON_PORT_ENTRY);
if not port_cron:
sys.exit(2);
self.knx_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.master_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.enocean_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.cron_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.knx_sock.bind(('', int(port)));
self.master_sock.bind(('', int(port_master)));
self.enocean_sock.bind(('', int(port_enocean)));
self.cron_sock.bind(('127.0.0.1', int(port_cron)));
self.knx_sock.listen(MAX_KNX);
self.master_sock.listen(MAX_MASTERS);
self.enocean_sock.listen(MAX_ENOCEAN);
self.cron_sock.listen(MAX_CRON);
self.send_monitor_ip()
#.........这里部分代码省略.........
示例2: monitors
# 需要导入模块: import Scanner [as 别名]
# 或者: from Scanner import scan [as 别名]
class SlaveDaemon:
"""
Main slave class
It does communication between different monitors (KNX, EnOcean... in C) and the masters (servers)
"""
def __init__(self, log_flag):
self.logger = Logger(log_flag, LOG_FILE);
self.logger.info('Started Greenleaf Slave daemon');
print('######## SLAVE DAEMON #######')
self.connected_masters = {};
self.connected_knx = [];
self.connected_enocean = [];
self.clients = [];
self._scanner = Scanner(HOST_CONF_FILE);
self._scanner.scan(False);
self._hostlist = self._scanner._HostList;
self._parser = DaemonConfigParser(SLAVE_CONF_FILE);
self.encrypt_keys = {};
self.knx_sock = None;
self.master_sock = None;
self.enocean_sock = None;
self.private_aes = hashlib.md5(self._parser.getValueFromSection('personnal_key', 'aes').encode()).hexdigest();
self.functions = {
KNX_READ_REQUEST : self.knx_read_request,
KNX_WRITE_SHORT : self.knx_write_short,
KNX_WRITE_LONG : self.knx_write_long,
KNX_WRITE_TEMP : self.knx_write_temp,
CHECK_SLAVE : self.check_slave,
MONITOR_IP : self.monitor_ip,
DATA_UPDATE : self.update
};
def update(self, json_obj, connection):
call(['apt-get', 'update']);
call(['apt-get', 'install', 'glslave', '-y']);
version_file = open('/etc/greenleaf/.glslave.version', 'r');
if not version_file:
self.logger.error('/etc/greenleaf/.glslave.version: no such file or directory');
print('/etc/greenleaf/.glslave.version: no such file or directory');
return;
version = version_file.read();
if '\n' in version:
version = version.split('\n')[0];
json_str = '{"packet_type": "update_finished", "aes_pass": "' + self.private_aes + '", "new_version": ' + version + '}'
encrypt_IV = AESManager.get_IV();
json_str = json_str + (' ' * (320 - len(json_str)))
encode_obj = AES.new(self.private_aes, AES.MODE_CBC, encrypt_IV);
data = encode_obj.encrypt(json_str);
# faut ouvrir une nouvelle socket pour envoyer la nouvelle version
# connection.send(bytes(encrypt_IV, 'utf-8') + data);
def run(self):
"""
Initialization of the sockets for listenning incomming connections.
Calls the loop function.
"""
self.run = True;
self.knx_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.master_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.enocean_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
port = self._parser.getValueFromSection(SLAVE_CONF_KNX_SECTION, SLAVE_CONF_KNX_PORT_ENTRY);
if not port:
sys.exit(2);
port_master = self._parser.getValueFromSection(SLAVE_CONF_LISTEN_SECTION, SLAVE_CONF_LISTEN_PORT_ENTRY);
if not port_master:
sys.exit(2);
port_enocean = self._parser.getValueFromSection(SLAVE_CONF_ENOCEAN_SECTION, SLAVE_CONF_ENOCEAN_PORT_ENTRY);
if not port_enocean:
sys.exit(2);
self.knx_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.master_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.enocean_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.knx_sock.bind(('', int(port)));
self.master_sock.bind(('', int(port_master)));
self.enocean_sock.bind(('', int(port_enocean)));
self.knx_sock.listen(MAX_KNX);
self.master_sock.listen(MAX_MASTERS);
self.enocean_sock.listen(MAX_ENOCEAN);
self.loop();
def accept_knx(self):
"""
Get available sockets for reading on the KNX socket.
"""
rlist, wlist, elist = select.select([self.knx_sock], [], [], SELECT_TIMEOUT);
for connection in rlist:
new_knx, addr = connection.accept();
self.connected_knx.append(new_knx);
self.receive_from_knx(self.connected_knx);
def accept_masters(self):
"""
Get available sockets for reading on the master socket.
"""
rlist, wlist, elist = select.select([self.master_sock], [], [], SELECT_TIMEOUT);
masters_socks = [];
for item in rlist:
new_conn, addr = item.accept();
masters_socks.append(new_conn);
self.receive_from_masters(masters_socks);
#.........这里部分代码省略.........
示例3: __init__
# 需要导入模块: import Scanner [as 别名]
# 或者: from Scanner import scan [as 别名]
class MasterDaemon:
"""
Main class of the master daemon
It provides communication between master and slave boxes and a part of the database management
"""
def __init__(self, log_flag):
self.logger = Logger(log_flag, LOG_FILE);
self.logger.info('Started Greenleaf Master Daemon');
self.d3config = {};
self.aes_slave_keys = {};
self.aes_master_key = None;
self.connected_clients = {};
self.sql = MasterSql();
self._parser = DaemonConfigParser(MASTER_CONF_FILE);
self.get_aes_slave_keys();
self.reload_camera(None, None);
self.scanner = Scanner(HOSTS_CONF);
self.scanner.scan(False);
self.hostlist = self.scanner._HostList;
self.sql.insert_hostlist_in_db(self.scanner._HostList);
self.knx_manager = KNXManager(self.aes_slave_keys);
self.reload_d3config(None, None);
self.protocol_function = {
PROTOCOL_KNX : KNXManager.protocol_knx,
PROTOCOL_ENOCEAN : self.protocol_enocean,
PROTOCOL_IP : self.protocol_ip
};
self.upnp_function = {
UPNP_PLAY : self.upnp_set_play,
UPNP_PAUSE : self.upnp_set_pause,
UPNP_NEXT : self.upnp_set_next,
UPNP_PREVIOUS : self.upnp_set_prev,
UPNP_STOP : self.upnp_set_stop,
UPNP_VOLUME_UP : self.upnp_set_volume_up,
UPNP_VOLUME_DOWN : self.upnp_set_volume_down,
UPNP_SET_VOLUME : self.upnp_set_volume
};
self.enocean_function = {};
self.data_function = {
DATA_MONITOR_KNX : self.monitor_knx,
DATA_MONITOR_IP : self.monitor_ip,
DATA_MONITOR_ENOCEAN : self.monitor_enocean,
DATA_MONITOR_BLUETOOTH : self.monitor_bluetooth,
DATA_KNX_READ : self.knx_read,
DATA_KNX_WRITE_S : self.knx_write_short,
DATA_KNX_WRITE_L : self.knx_write_long,
DATA_SEND_TO_DEVICE : self.send_to_device,
DATA_CRON_UPNP : self.cron_upnp,
DATA_SEND_MAIL : self.send_mail,
DATA_CHECK_SLAVE : self.check_slave,
DATA_RELOAD_CAMERA : self.reload_camera,
DATA_RELOAD_D3CONFIG : self.reload_d3config,
DATA_BACKUP_DB_CREATE_LOCAL : self.backup_db_create_local,
DATA_BACKUP_DB_REMOVE_LOCAL : self.backup_db_remove_local,
DATA_BACKUP_DB_LIST_LOCAL : self.backup_db_list_local,
DATA_BACKUP_DB_RESTORE_LOCAL : self.backup_db_restore_local,
DATA_UPDATE : self.update
};
def get_aes_slave_keys(self):
"""
Get the secretkeys of each slave daemon stored in database
"""
query = "SELECT serial, secretkey FROM daemon";
res = self.sql.mysql_handler_personnal_query(query);
self_hostname = socket.gethostname();
for r in res:
if SLAVE_NAME_PREFIX in r[0] or 'MD3' in r[0]:
self.aes_slave_keys[r[0]] = r[1];
elif self_hostname == r[0]:
self.aes_slave_keys[r[0]] = r[1];
self.aes_master_key = r[1];
print(self.aes_slave_keys)
def stop(self):
"""
Stops the daemon and closes sockets
"""
flag = False;
while not flag:
flag = True;
for client in self.connected_clients.values():
flag = False;
client.close();
break;
self.slave_connection.close();
sys.exit(0);
def run(self):
"""
Initialization of the connections and accepting incomming communications
"""
self.slave_connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.cmd_connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.slave_connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
self.cmd_connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
s_port = self._parser.getValueFromSection(MASTER_CONF_LISTEN_SECTION, MASTER_CONF_LISTEN_PORT_SLAVE_ENTRY);
c_port = self._parser.getValueFromSection(MASTER_CONF_LISTEN_SECTION, MASTER_CONF_LISTEN_PORT_CMD_ENTRY);
if not s_port:
frameinfo = getframeinfo(currentframe());
#.........这里部分代码省略.........
示例4: __init__
# 需要导入模块: import Scanner [as 别名]
# 或者: from Scanner import scan [as 别名]
class SlaveDaemon:
## The constructor
#
# @param log_flag The flag saying whether the logs should be printing or not
def __init__(self, log_flag):
## Logger object for formatting and printing logs
self.logger = Logger(log_flag, LOG_FILE)
self.logger.info("Started Domoleaf Slave daemon")
## Array of master daemon on local network
self.connected_masters = {}
## Array of monitor KNX on local network
self.connected_knx = []
## Array of monitor EnOcean on local network
self.connected_enocean = []
## Array of cron running on the system
self.connected_cron = []
self._scanner = Scanner(log_flag)
self._hostlist = []
myhostname = socket.gethostname().upper()
if SLAVE_NAME_PREFIX in myhostname:
self._scanner.scan()
self._hostlist = self._scanner._HostList
else:
self._hostlist.append(Host("", "127.0.0.1", myhostname))
self._parser = DaemonConfigParser(SLAVE_CONF_FILE)
## Keys for encrypting communications
self.encrypt_keys = {}
## Main socket for communication with KNX daemon
self.knx_sock = None
## Main socket for communication with master daemon
self.master_sock = None
## Main socket for communication with enocean daemon
self.enocean_sock = None
## Main socket for communication with cron
self.cron_sock = None
## Private AES key got from configuration file
self.private_aes = self._parser.getValueFromSection("personnal_key", "aes")
self.wifi_init(
self._parser.getValueFromSection("wifi", "ssid"),
self._parser.getValueFromSection("wifi", "password"),
self._parser.getValueFromSection("wifi", "encryption"),
self._parser.getValueFromSection("wifi", "mode"),
0,
)
## Port on which connect got from configuration file
self.connect_port = self._parser.getValueFromSection(SLAVE_CONF_CONNECT_SECTION, SLAVE_CONF_CONNECT_PORT_ENTRY)
## Callback array indexed on packet type
self.functions = {
KNX_READ_REQUEST: self.knx_read_request,
KNX_WRITE_SHORT: self.knx_write_short,
KNX_WRITE_LONG: self.knx_write_long,
KNX_WRITE_TEMP: self.knx_write_temp,
CHECK_SLAVE: self.check_slave,
MONITOR_IP: self.monitor_ip,
DATA_UPDATE: self.update,
SEND_TECH: self.send_tech,
SEND_ALIVE: self.send_alive,
SEND_INTERFACES: self.send_interfaces,
SHUTDOWN_D3: self.shutdown_d3,
REBOOT_D3: self.reboot_d3,
WIFI_UPDATE: self.wifi_update,
}
## Updates the base system of the slave daemon.
#
# @param json_obj Not used here.
# @param connection Not used here.
# @return None
def update(self, json_obj, connection):
p = call(["dpkg", "--configure", "-a"])
call(["apt-get", "update"])
call(["DEBIAN_FRONTEND=noninteractive", "apt-get", "install", "domoslave", "-y"])
version = os.popen("dpkg-query -W -f='${Version}\n' domoslave").read().split("\n")[0]
json_str = (
'{"packet_type": "update_finished", "aes_pass": "' + self.private_aes + '", "new_version": ' + version + "}"
)
encrypt_IV = AESManager.get_IV()
spaces = 16 - len(json_str) % 16
json_str = json_str + (spaces * " ")
encode_obj = AES.new(self.private_aes, AES.MODE_CBC, encrypt_IV)
data = encode_obj.encrypt(json_str)
# faut ouvrir une nouvelle socket pour envoyer la nouvelle version
# connection.send(bytes(encrypt_IV, 'utf-8') + data);
## Initializes the sockets for listenning incomming connections.
#
# @return None
def run(self):
## Run flag at True for running, at False to stop the main loop
self.run = True
self.knx_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.master_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.enocean_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.cron_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.knx_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.master_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.enocean_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.cron_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
port = self._parser.getValueFromSection(SLAVE_CONF_KNX_SECTION, SLAVE_CONF_KNX_PORT_ENTRY)
#.........这里部分代码省略.........