Zum Inhalt springen
ELV TimeMaster - Linux PC-Terminal

ELV TimeMaster - Linux PC-Terminal

Beispielausgabe


# ./elv_timemaster_terminal.py --action time --pin XXXX

2014-07-12 17:45:58.837688 [TIME] Mustermann, Max 10 20:00 78:33

# ./elv_timemaster_terminal.py --action start --pin XXXX

2014-07-12 17:46:02.930095 [START] Mustermann, Max 10

# ./elv_timemaster_terminal.py --action end --pin XXXX

2014-07-12 17:46:06.698165 [END] Mustermann, Max 10

Quelltext

elv_timemaster_terminal.py
#!/usr/bin/python3

import sys
import socket
from hashlib import md5
from argparse import ArgumentParser
from datetime import datetime

def send_request(SERVER, PORT, REQUEST, ACTION):
  """send data to timemaster server"""
  S = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  S.connect((SERVER, PORT))
  S.send(bytes.fromhex(REQUEST))
  DATA = S.recv(1024)
  S.close()

  # convert binary to hex and strip first 20 hex chars (binary trash)
  OUTPUT = DATA.hex()
  OUTPUT = OUTPUT[20:]

  # convert back to string and print
  print(str(datetime.now()) + ' [' + ACTION + '] ' + bytes.fromhex(OUTPUT).decode())

def main():
  ARGS_USAGE = "%(prog)s --action <time|start|end> --pin <PIN> [--server <server>]"
  ARGS_VERSION = "ELV TimeMaster Client by Marcel Jaepel 2014-07-12"
  ARGS_PARSER = ArgumentParser(usage=ARGS_USAGE)
  ARGS_PARSER.add_argument("--version", action="version", version=ARGS_VERSION)

  ARGS_PARSER.add_argument("--action", action="store", dest="ACTION", choices=['time', 'start', 'end'], required=True, help="(required) TimeMaster Action")
  ARGS_PARSER.add_argument("--pin", action="store", dest="PIN", required=True, help="(required) PIN of employee")
  ARGS_PARSER.add_argument("--clientip", action="store", dest="CLIENT_IP", default="127.0.0.1", help="(optional) TimeMaster Client IP (Default: 127.0.0.1)")
  ARGS_PARSER.add_argument("--server", action="store", dest="SERVER", default="timemaster.domain.tld", help="(optional) TimeMaster Server (Default: timemaster.domain.tld)")

  ARGS = ARGS_PARSER.parse_args()

  PORT = 50505
  PIN = md5(ARGS.PIN.encode()).hexdigest()

  if ARGS.ACTION == 'time':
    REQUEST = PIN + '0e' + ARGS.CLIENT_IP.encode().hex() + 'f5e0010000000500000000d8fb1801'
    send_request(ARGS.SERVER, PORT, REQUEST, 'TIME')
  elif ARGS.ACTION == 'start':
    REQUEST = PIN + '0e' + ARGS.CLIENT_IP.encode().hex() + '000000000000020000000000000000'
    send_request(ARGS.SERVER, PORT, REQUEST, 'START')
  elif ARGS.ACTION == 'end':
    REQUEST = PIN + '0e' + ARGS.CLIENT_IP.encode().hex() + '9a4400b0f5e0030000000000000000'
    send_request(ARGS.SERVER, PORT, REQUEST, 'END')
  else:
    print('No action specified!')

if __name__ == '__main__':
  main()
Zuletzt aktualisiert am