我是ZKteco设备的新手!我使用的是Zkteco设备。我有一个Zkteco设备,我已经下载了一个独立的SDK,但这个SDK不会触发事件(例如OnVerify或OnAttTransaction)。所以,我读了一些文章,我需要使用Push SDk,但我找不到它。
h5qlskok1#
我花了一个月的时间才发现,对于PUSH SDK和ADMS,显然ZKTeco不愿意分享。所以我不得不另辟蹊径这是我已经实现的解决方案,它工作正常。
Push SDK只是ZKTeco设备向Bioserver发出的HTTP请求。您可以使用像Wireshark这样的工具来扫描您的设备发出的HTTP请求,并在您自己的服务器上实现相同的请求/响应。对于重复,ZKTeco设备型号MB 560-VL发送如下请求
GET http://[SERVER-IP:PORT]/iclock/getrequest?SN=XXXXXXXXXX
如果像BioTime软件一样,你的服务器只需发送
OK
作为 text/plain 中的响应,您的设备将把您的服务器视为“BioTime”
当用户在设备上注册时,设备发送此请求
POST /iclock/cdata?SN=XXXXXXXXXX&table=OPERLOG&Stamp=9999
HTTP缓冲区中的用户信息。就像这个
PIN=2\tName=Johny Deep\tPri=0\tPasswd=\tCard=\tGrp=1\tTZ=0000000100000000\tVerify=0\tViceCard=\tStartDatetime=0\tEndDatetime=0\n
您的服务器应该解析此数据并响应此请求
用户日志(clock_in / clock_out)设备请求
POST /iclock/cdata?SN=XXXXXXXXXX&table=ATTLOG&Stamp=9999
设备在HTTP数据缓冲区中发送的数据如下所示:
2\t2022-07-12 16:00:20\t1\t15\t\t0\t0\t\t\t43\n
正如你所看到的,你解析这个字符串时用“\t '*”作为信息的分隔符
下面是用Python实现的一个例子
@http.route('/iclock/getrequest', type='http', auth="public", csrf=False) def zk_bio_device_ping(request): print("----------DEVICE PING-----------") print(request.GET) return HttpResponse("OK", content_type='text/plain') @http.route('/iclock/getrequest', type='http', auth="public", csrf=False) def zk_bio_device_push(request): print("----------DEVICE SEND DATA----------") print(request.GET) print(request.body.decode('utf-8')) return HttpResponse("OK", content_type='text/plain')
**设备不使用任何身份验证与服务器通信!我敢肯定这是一个很大的安全问题。
1条答案
按热度按时间h5qlskok1#
我花了一个月的时间才发现,对于PUSH SDK和ADMS,显然ZKTeco不愿意分享。所以我不得不另辟蹊径这是我已经实现的解决方案,它工作正常。
Push SDK只是ZKTeco设备向Bioserver发出的HTTP请求。您可以使用像Wireshark这样的工具来扫描您的设备发出的HTTP请求,并在您自己的服务器上实现相同的请求/响应。
对于重复,ZKTeco设备型号MB 560-VL发送如下请求
如果像BioTime软件一样,你的服务器只需发送
作为 text/plain 中的响应,您的设备将把您的服务器视为“BioTime”
用户注册
当用户在设备上注册时,设备发送此请求
HTTP缓冲区中的用户信息。就像这个
您的服务器应该解析此数据并响应此请求
用户日志(clock_in / clock_out)设备请求
设备在HTTP数据缓冲区中发送的数据如下所示:
正如你所看到的,你解析这个字符串时用“\t '*”作为信息的分隔符
下面是用Python实现的一个例子
**设备不使用任何身份验证与服务器通信!我敢肯定这是一个很大的安全问题。