Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我在ZKDB.db里插入了信息,但是还是没有记录 #2

Open
keivenliao opened this issue Feb 18, 2019 · 7 comments
Open

我在ZKDB.db里插入了信息,但是还是没有记录 #2

keivenliao opened this issue Feb 18, 2019 · 7 comments

Comments

@keivenliao
Copy link

keivenliao commented Feb 18, 2019

我在ZKDB.db里插入了考勤信息,但是人事那边是没有记录的,你有遇到这样的情况吗?

tim 20190218170316

tim 20190218170103

@ror-ian
Copy link

ror-ian commented Mar 29, 2019

人力没有记录是因为修改方法不对。你一定是将ZKDB.db下载编辑后再上传了,这样是无效的。因为考勤机内和数据库关联的进程没有结束,上传覆盖原文件后数据库文件的inode会变,对于程序来讲,找不到inode等于数据库被删除了,所有新的考勤数据都放在了程序缓存中,并且读不到数据库中修改后的数据内容。

“Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。”

所以,解决方案是在telnet现场用sqlite3_mips直接修改ZKDB.db,这时候inode不变,程序缓存和数据库内容永远是同步的。

有必要多说一点的是:
自上传覆盖ZKDB.db后,考勤信息就只能全部放在程序缓存中了,如果考勤机重启了,缓存中的新考勤数据将全部丢失,务必留意。最好等月初人力考勤后自己将考勤机重启下(reboot命令),以免后患。最安全的办法是你先用考勤软件连接4370端口,将缓存中的数据下载下来,然后重启考勤机,检查数据完整性,将丢失的数据添加回去。

@keivenliao
Copy link
Author

人力没有记录是因为修改方法不对。你一定是将ZKDB.db下载编辑后再上传了,这样是无效的。因为考勤机内和数据库关联的进程没有结束,上传覆盖原文件后数据库文件的inode会变,对于程序来讲,找不到inode等于数据库被删除了,所有新的考勤数据都放在了程序缓存中,并且读不到数据库中修改后的数据内容。

“Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。”

所以,解决方案是在telnet现场用sqlite3_mips直接修改ZKDB.db,这时候inode不变,程序缓存和数据库内容永远是同步的。

有必要多说一点的是:
自上传覆盖ZKDB.db后,考勤信息就只能全部放在程序缓存中了,如果考勤机重启了,缓存中的新考勤数据将全部丢失,务必留意。最好等月初人力考勤后自己将考勤机重启下(reboot命令),以免后患。最安全的办法是你先用考勤软件连接4370端口,将缓存中的数据下载下来,然后重启考勤机,检查数据完整性,将丢失的数据添加回去。

抱歉,是我没有表达清楚,是ZKDB.DB里有记录了,但是公司的考勤系统里没有记录,我是直接telnet 上去执行的sqlite3_mips添加的记录,同时,我发现不仅在ATT_LOG中有记录,在MESSAGE_QUEUE这个表里也有,后来我两个表都手动添加了记录,但是在考勤系统中,还是没有记录,
我初步怀疑是不是指纹打卡的时候硬件触发了某种上报机制。

@ror-ian
Copy link

ror-ian commented Mar 29, 2019

我明白你的意思了,并且你的怀疑是正确的。人力如果一直将考勤软件保持运行状态,并设置了轮询时间,物理打卡时会自动上报到软件中,而数据库的直接编辑并不会上报。如果人力月初点击“从设备下载记录数据”,那么数据库中的信息是会更新到考勤软件中的,但如果人力完全依赖设备上报,就比较麻烦了

-------补充-------
可以自己安装一个软件,尝试抓包并分析,模拟上报过程,但细节我没有研究过。

@keivenliao
Copy link
Author

我明白你的意思了,并且你的怀疑是正确的。人力如果一直将考勤软件保持运行状态,并设置了轮询时间,物理打卡时会自动上报到软件中,而数据库的直接编辑并不会上报。如果人力月初点击“从设备下载记录数据”,那么数据库中的信息是会更新到考勤软件中的,但如果人力完全依赖设备上报,就比较麻烦了

-------补充-------
可以自己安装一个软件,尝试抓包并分析,模拟上报过程,但细节我没有研究过。

是的,后来我确实想尝试用tcpdump 抓包来试试,但是考勤机的环境实在是太简陋,也没有多余的时间去折腾了。

@linsir
Copy link
Owner

linsir commented Mar 30, 2019

我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。

@keivenliao
Copy link
Author

我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。

这个也是我觉得奇怪的地方,原理上不应该是实时的,但是数据在人力哪里就是没有,或者是他们的服务器上做了什么特别的设置,对这种方式上报的数据不予接受?我扫过服务器,无奈水平有限,进不去。
另外,在设备上是没有开放80端口的,也就是没有启用web,看起来都是集中管理的。我没有修改配置文件启用web,不想改动配置,避免给公司查到了,就不好了。

@liangl2000
Copy link

我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。

这个也是我觉得奇怪的地方,原理上不应该是实时的,但是数据在人力哪里就是没有,或者是他们的服务器上做了什么特别的设置,对这种方式上报的数据不予接受?我扫过服务器,无奈水平有限,进不去。
另外,在设备上是没有开放80端口的,也就是没有启用web,看起来都是集中管理的。我没有修改配置文件启用web,不想改动配置,避免给公司查到了,就不好了。

我这边也是...修改了并没有任何反应

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants