Her*_*eng 12
我花了一个月的时间才发现,对于那个PUSH SDK和ADMS,显然中控智慧并没有公开分享。所以我不得不尝试以其他方式进行。这是我实施的解决方案,它工作正常。
推送SDK只是中控智慧设备向Bioserver发出的HTTP请求。您可以使用Wireshark等工具扫描您的设备发出的 HTTP 请求,并在您自己的服务器上实现相同的请求/响应。
例如,ZKTeco 设备型号 MB560-VL 发送这样的请求
GET http://[SERVER-IP:PORT]/iclock/getrequest?SN=XXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
如果像 BioTime 软件一样,您的服务器只需发送
OK
Run Code Online (Sandbox Code Playgroud)
作为text/plain的响应,您的设备会将您的服务器视为“BioTime”
请注意,您的中控科技设备应具有 ADMS 支持,以便您首先在设备上配置 SERVER-IP 和 PORT(请参阅中控科技网站上的官方设备文档)
用户注册
当用户在设备上注册时,设备会发送此请求
POST /iclock/cdata?SN=XXXXXXXXXX&table=OPERLOG&Stamp=9999
Run Code Online (Sandbox Code Playgroud)
HTTP 缓冲区上的用户信息。像这样的东西
PIN=2\tName=Johny Deep\tPri=0\tPasswd=\tCard=\tGrp=1\tTZ=0000000100000000\tVerify=0\tViceCard=\tStartDatetime=0\tEndDatetime=0\n
Run Code Online (Sandbox Code Playgroud)
您的服务器应该只解析此数据并响应此请求
用户日志(clock_in/clock_out) 设备请求
POST /iclock/cdata?SN=XXXXXXXXXX&table=ATTLOG&Stamp=9999
Run Code Online (Sandbox Code Playgroud)
设备在 HTTP 数据缓冲区上发送的数据如下所示
2\t2022-07-12 16:00:20\t1\t15\t\t0\t0\t\t\t43\n
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您使用'\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')
Run Code Online (Sandbox Code Playgroud)
设备不使用任何身份验证与服务器通信!我很确定这是一个很大的安全问题。