client: add -D to discover KMS server #51

This commit is contained in:
edgd1er 2022-04-14 01:30:34 +02:00
parent a43f16ab94
commit 805c234e33
No known key found for this signature in database
GPG key ID: F7B8E0D6C867CCAE

View file

@ -13,7 +13,13 @@ import logging
import os import os
import threading import threading
import pykms_RpcBind, pykms_RpcRequest import dns.message
import dns.rdataclass
import dns.rdatatype
import dns.query
import dns.resolver
import pykms_RpcBind, pykms_RpcRequest
from pykms_Filetimes import dt_to_filetime from pykms_Filetimes import dt_to_filetime
from pykms_Dcerpc import MSRPCHeader, MSRPCBindNak, MSRPCRequestHeader, MSRPCRespHeader from pykms_Dcerpc import MSRPCHeader, MSRPCBindNak, MSRPCRequestHeader, MSRPCRespHeader
from pykms_Base import kmsBase, UUID from pykms_Base import kmsBase, UUID
@ -72,6 +78,7 @@ Type \"STDOUT\" to view log info on stdout. Type \"FILESTDOUT\" to combine previ
Use \"STDOUTOFF\" to disable stdout messages. Use \"FILEOFF\" if you not want to create logfile.', Use \"STDOUTOFF\" to disable stdout messages. Use \"FILEOFF\" if you not want to create logfile.',
'def' : os.path.join('.', 'pykms_logclient.log'), 'des' : "logfile"}, 'def' : os.path.join('.', 'pykms_logclient.log'), 'des' : "logfile"},
'lsize' : {'help' : 'Use this flag to set a maximum size (in MB) to the output log file. Deactivated by default.', 'def' : 0, 'des': "logsize"}, 'lsize' : {'help' : 'Use this flag to set a maximum size (in MB) to the output log file. Deactivated by default.', 'def' : 0, 'des': "logsize"},
'discovery' : {'help': 'ask the client to perform a _vlmcs._tcp.domain.tld DNS request to set KMS server.', 'def': None , 'des': 'discovery' },
} }
def client_options(): def client_options():
@ -99,6 +106,8 @@ def client_options():
default = clt_options['lfile']['def'], help = clt_options['lfile']['help'], type = str) default = clt_options['lfile']['def'], help = clt_options['lfile']['help'], type = str)
client_parser.add_argument("-S", "--logsize", dest = clt_options['lsize']['des'], action = "store", client_parser.add_argument("-S", "--logsize", dest = clt_options['lsize']['des'], action = "store",
default = clt_options['lsize']['def'], help = clt_options['lsize']['help'], type = float) default = clt_options['lsize']['def'], help = clt_options['lsize']['help'], type = float)
client_parser.add_argument("-D", "--discovery", dest = clt_options['discovery']['des'], action = "store",
default = clt_options['discovery']['def'], help = clt_options['discovery']['help'], type = str)
client_parser.add_argument("-h", "--help", action = "help", help = "show this help message and exit") client_parser.add_argument("-h", "--help", action = "help", help = "show this help message and exit")
@ -186,6 +195,15 @@ def client_update():
raise RuntimeError(f'Client failed to find machine configuration in kms database - make sure it contains an entry for "{clt_config["mode"]}"') raise RuntimeError(f'Client failed to find machine configuration in kms database - make sure it contains an entry for "{clt_config["mode"]}"')
def client_connect(): def client_connect():
if clt_config['discovery'] is not None:
loggerclt.info(f'Using Domain: {clt_config["discovery"]}')
r = dns.resolver.query('_vlmcs._tcp.' + clt_config['discovery'], dns.rdatatype.SRV)
for a in r:
loggerclt.debug(f'answer KMS server: {a.target} , port: {a.port}')
clt_config['ip'] = socket.gethostbyname(r[0].target.to_text())
clt_config['port'] = r[0].port
loggerclt.info("Connecting to %s on port %d" % (clt_config['ip'], clt_config['port'])) loggerclt.info("Connecting to %s on port %d" % (clt_config['ip'], clt_config['port']))
try: try:
clt_sock = socket.create_connection((clt_config['ip'], clt_config['port']), timeout = clt_config['timeoutidle']) clt_sock = socket.create_connection((clt_config['ip'], clt_config['port']), timeout = clt_config['timeoutidle'])