Desde un ordenador unix conectado a un servidor ldap
#getent passwd | awk -F: '{ print $1}' | sort -n | uniq -d | xargs getent passwd
PyCenter
Tuesday, 14 May 2013
Friday, 20 January 2012
Clarion sorter with python - dosemu
This is my one of my first i write in python. This program do a sorter for a clarion system, interact with dosemu. Here is the code
sorter_clarion
Download
sorter_clarion
Download
Sunday, 15 January 2012
Saturday, 14 January 2012
ssha hash generator
A typical script, that generate ssha hash.
Thanks to the openldap project
Thanks to the openldap project
#!/usr/bin/env python
import hashlib
import os
from base64 import encodestring as encode
from base64 import decodestring as decode
import getpass
def makeSecret(password):
salt = os.urandom(4)
h = hashlib.sha1(password)
h.update(salt)
return "{SSHA}" + encode(h.digest() + salt)
def checkPassword(challenge_password, password):
challenge_bytes = decode(challenge_password[6:])
digest = challenge_bytes[:20]
salt = challenge_bytes[20:]
hr = hashlib.sha1(password)
hr.update(salt)
return digest == hr.digest()
if __name__ == "__main__":
pass1 = getpass.getpass()
pass2 = getpass.getpass()
if pass1 == pass2:
ver = makeSecret(pass1)
print ver
bol = checkPassword(ver,pass1)
print bol
else:
print "pass are not equals"
Connect to a zk clock
I'm spent a half week try to connect this clock. I use reverse engineering to create a network script that read network packages and do some black magic, but i don't have good result. When i give up, Found this wonderful page that's show me how to dispatch the dll of the clock (The sdk only works in windows, is here). !!!Bingo :) !!Boom goes the dynamite :).
I study the sdk a weekend. Now i'm proud of my code.
This are the methods of the sdk in the code.
Connect_Net(ip, port) # connect to devie
ReadAllUser(machineNumber) #read all user data and put into a buffer
SSR_GetAllUserInfo(machineNumber, EnrrollNumber, Name, Password, Privilege, Enable) #get all the user data from the buffer
ReadGeneralLogData(machineNumber) # read all the attendance data of the clock in put into a buffer
SSR_GetGeneralLogData
EnableDevice(machinenumber, state) # enabled or disabled the clock
For more information read the TFT manual that comes with the sdk
#!/usr/bin/env python
#coding:utf-8
# Author: peter --<pjl@hpc.com.py>
# Purpose: manage the dll of the zk software, thanks to sy, for the prototype code
# Created: 06/12/2011
# Todo
# 2012/01/06
# we add a ldap proxy to diferrent the user company
# -*- coding: utf-8 -*-
from win32com.client import Dispatch
import sys
from datetime import datetime
import sys, logging
import qrclock
from proxy import PrLdap
########################################################################
class ZkDispatch(object):
"""Manage the windows enviroment for the zk connections to the iclock 2000"""
__doc__ = 'Manage the operations on the biometric clock'
__userdata = []
__logdata = []
__clock = ""
__today = datetime.today().strftime('%Y-%m-%d')
__proxyldap = PrLdap.ProxyLdap()
#----------------------------------------------------------------------
def __init__(self):
"""
Instance the database class, and distpatch the windows dll of the zk sdk
"""
self.dbmanag = qrclock.QuerysClock(host="XXX.XXX.XXX.XXX", user="XXX", passwd="XXXX", db="XXXXX")
self.zk = Dispatch("zkemkeeper.ZKEM")
logging.basicConfig(format='%(asctime)s %(message)s',filename="c:\\iclock.log",level=logging.DEBUG)
#----------------------------------------------------------------------
def Connect(self, ip, port, mn):
"""
first connections to the clock, and retrieve the initialize data
Connect_Net(ip, port)
"""
self.__clock = ip
logging.info("conectando al reloj %s" % ip)
#devPort = 4370
#devIPAddr = ’192.168.30.198′
flag = self.zk.Connect_Net(ip,port)
if flag:
logging.info("Conexion exitosa al reloj")
else:
logging.info("Error de conexion, verifique el dispositivo")
if self.zk.ReadAllUserID(mn):
#print self.zk.GetAllUserInfo(mn, 0, "", "", 0, False)
while True:
#s= self.zk.GetAllUserInfo(mn, 0, "", "", 0, False)
s= self.zk.SSR_GetAllUserInfo(mn, 0, "", "", 0, False)
#s= self.zk.GetAllUserID(mn, 0, None, 0, False)
if s[0]:
#print type(s[3])
#print s
self.__userdata.append((s[1], s[2]))
else:
break
#----------------------------------------------------------------------
def QueryAttendanceDb(self, dateb=__today, datee=__today, mn=1):
"""
Read all the log data by the given date, .
we use here the SSR_GetGeneralLogData function of the sdk that use the following parameters
machinenumber, enrollnumber, verifymode, outmode, year, month, day, hour, minute, second
"""
tmpstore = []
if self.zk.ReadGeneralLogData(mn):
while True:
#i don't why, but no matters if you give a specific date, the method get all the records from the beginning
att = self.zk.SSR_GetGeneralLogData(mn, "", 0, 0,2011, 12, 4, 0, 0, 0, 0)
#att = self.zk.SSR_GetGeneralLogData(mn, "", None, None, 2011, 5, 13, None, None, None, None)
if att[0]:
tmpstore.append(att)
#print att
else:
break
for v in tmpstore:
for u in self.__userdata:
if v[1] == u[0]:
dtlog = datetime(v[4], v[5], v[6], v[7], v[8], v[9])
dlog = dtlog.strftime("%Y-%m-%d")
tlog = dtlog.strftime("%H:%M:%S")
ta = self.ChangeAuthType(v[2])
tc = self.ChangeCheckType(v[3])
user = u[1].replace(","," ")
self.__logdata.append((v[1], user, ta, tc, dlog, tlog))
for rl in self.__logdata:
dcheck = (rl[0], rl[4], rl[5], rl[3])
if self.dbmanag.CheckFirstTime(dcheck):
#proxy ldap
r = self.__proxyldap.FormatUserCompany(rl[0])
if r:
empresa = r[0][1]["Empresa"][0]
else:
empresa = "NULL"
try:
dcinser = (rl[0], rl[1].split()[-1].strip(), rl[1].split()[0].strip(), rl[4], rl[5], self.__clock, rl[2], rl[3], empresa)
self.dbmanag.InsertData(dcinser)
except:
logging.info("Error al insertar el dato %s" % rl[0])
#----------------------------------------------------------------------
def ClearLog(self, mn=1):
"""Clear all the log attendance of the lock"""
logging.info("Borrando logs de registros")
self.zk.ClearGLog(mn)
logging.info("Borrando logs de registros Exito")
#----------------------------------------------------------------------
def Enabled(self, mn=1, state=1):
"""Enalbed or disable the device"""
if state == 0:
logging.info("Desactivando dispositivo")
else:
logging.info("Activando dispositivo")
self.zk.EnableDevice(mn, state)
#----------------------------------------------------------------------
def ChangeCheckType(self, ctyp):
"""change the check type for a human data"""
if ctyp == 0:
return "Entrada"
if ctyp == 1:
return "Salida"
if ctyp == 2:
return "Salida Intermedia"
if ctyp == 3:
return "Entrada Intermedia"
if ctyp == 4:
return "Entrada Almuerzo"
if ctyp == 5:
return "Salida Almuerzo"
#----------------------------------------------------------------------
def ChangeAuthType(self, atyp):
"""change the auth type for a human data"""
if atyp == 0:
return "Clave"
if atyp == 1:
return "Huella"
if atyp == 2:
return "Tarjeta"
if atyp == 3:
return "Clave"
if atyp == 4:
return "Clave"
if atyp == 5:
return "Clave"
if atyp == 6:
return "Clave"
#----------------------------------------------------------------------
def CalculeTime(self, times):
"""
calculate how long take the transactions
"""
ini = times[0]
end = times[1]
horai, minutoi, segundoi = ini.split(":")
horai = int(horai)
minutoi = int(minutoi)
segundoi = int(segundoi)
valor0 = (horai*60)+(minutoi*60)+segundoi
horae, minutoe, segundoe = end.split(":")
horae = int(horae)
minutoe = int(minutoe)
segundoe = int(segundoe)
valor1 = (horae*60)+(minutoe*60)+segundoe
dur = valor1 - valor0
logging.info("Duracion de la conexion %s segundos" % str(dur))
if __name__ == '__main__':
clock = ZkDispatch()
ini = datetime.today()
ini = ini.strftime("%H:%M:%S")
clock.Connect('192.168.0.50', 4370, 1)
clock.Enabled(1, 0)
clock.QueryAttendanceDb()
clock.ClearLog(mn=1)
clock.Enabled(1, 1)
end = datetime.today()
end = end.strftime("%H:%M:%S")
clock.CalculeTime((ini, end))
Convert a xls file to a ldif file
I create this script to convert this xls file:
Friday, 13 January 2012
Embed python with rsync
This is a nice way to control the backup in our company. I just Embed python with rsync
This is a basci scheme.
'a' copy to 'b', files in production are copy to 'a' and 'b' copy to 'c'--------------------------
A—-> B —> C
-------------------------
#!/usr/bin/env python #better backup, made in python #Autor: peter pjl@hpc.com.py
from subprocess import call import sys import time import datetime def bkp()
for bkp in [0, 1, 2]:
if bkp == 0:
#B to C
sync("/mnt/company/","192.168.1.16:/mnt/companybckall","company")
sync("/mnt/company1/","192.168.1.16:/mnt/company1bckall","company1")
sync("/mnt/company2/","192.168.1.16:/mnt/company2bckall","company2")
sync("/mnt/company3/","192.168.1.16:/mnt/company3bckall","company3")
elif bkp == 1:
#files in production to A
sync("/media/company/","/mnt/companybckall","company")
sync("192.168.12.2:/media/users/company/","/mnt/companybckall","company1")
sync("192.168.13.2:/media/users/company/","/mnt/companybckall","company2")
sync("192.168.10.8:/media/company/","/mnt/companybckall","company3")
elif bkp == 2:
#A to B
sync("/mnt/comanybckall/","192.168.10.8:/mnt/companybckall","company")
sync("/mnt/company1bckall/","192.168.10.8:/mnt/company1bckall","company1")
sync("/mnt/company2bckall/","192.168.10.8:/mnt/company2bckall","company2")
sync("/mnt/company3bckall/","192.168.10.8:/mnt/company3bckall","company3")
def sync(sources, destins, logs):
fecha = datetime.date.today()
fechastr = fecha.strftime("%Y-%m-%d")
lognom = destins + "/" + fechastr + "-" + logs + ".log"
logerror = destins + "/" + fechastr + "-" + logs + "err" + ".log"
rsync = "rsync"
# the arguments of the ssh must be in this way to work with crontab :)
argum = "-agEvvz --exclude-from=/root/excluir -e \"ssh -i /home/peter/.ssh/id_rsa\""
cmd = "%s %s %s %s" % (rsync, argum, sources, destins)
while True:
ret = call(cmd, shell=True, stdout=open(lognom, "a+"), stderr=open(logerror, "a+"))
if ret != 0:
time.sleep(30)
else:
sys.exit(0)
if __name__ == "__main__":
bkp()
this is just a basic use
Subscribe to:
Comments (Atom)
