I am facing issue with ZKTeco Biometrics machine port forwarding.
We did everything to make it work behind out firewall Fortinet 100E.
We make virtual IP : External 0.0.0.0 to internal : 192.168.131.36 TCP /UDP : 8080
we tested with nat enabled and disabled both not working.
rules properly configured. what can be the reason?
I configured a new VIP object to forward port 8080 to my internal server but this did not work.
When i run some test i saw that the server itself is resetting the connection when the SYN came in.
i also tried to enable the Source NAT on the incoming policy in case the Server itself has some ACL not allowing traffic from external addresses but saw the same behavior.
If you are seeing the server rst logs in the Forward logs, means the server is sending the reset packet for the client trying to set up the connection.Kindly check on the server whether the packets receives on the server side and what the response it is replying back.
The Fortinet Security Fabric brings together the concepts of convergence and consolidation to provide comprehensive cybersecurity protection for all users, devices, and applications and across all network edges.
This package can communicate with ZK time and attendance devices.
It can send SOAP requests to a given time and attendance device to perform several types of operations like getting and setting the time, getting the attendance logs, getting information about users, creating or updating users, uploading or deleting user fingerprints, deleting users or their passwords, get statistics from the device, clearing data from the device, disabling, enabling, restarting or shutting down a device.
The package can also communicate with the device using UDP connections to execute other operations not supported by the SOAP API.
There are some SOAP functions supported by ZK devices that it's suppossed, according to the official docs (which incidentally it's very limited and so poor!!!) must show an expected behaviour, but when they are invoked don't work like is expected, so they become useless (e.g. Restart SOAP call). For these situations, TAD class implement them by Providers\TADZKLib class ([PHP_ZKLib] - _zklib/). This class takes a different approach to "talk to the device": it uses UDP protocol at device standard port 4370.
For practical purposes, you don't have to be worried about when to use TAD class or PHP_ZKLib class because you only have to get a TAD instance (as shown below) and call any of its methods available. The class decides about when runs the method invoked using TAD class or PHP_ZKLib class.
Composer is the PHP's package manager and is the recommended way to get packages for your projects. It's also able to build automatically *autoloaders* if you wrote down your code using PSR-0 and/or PSR-4 standards, avoiding you headaches about everything related to loading classes.
TADPHP is built follows PSR-4 standard and comes with a specific file named composer.json that allows Composer to generate a file named autoload.php (beside others files of course). This files generated is the only one you need to include in your project to get all classes required by TADPHP loaded in memory:
All TAD-PHP classes are under the namespace named TADPHP. So, to use any class you need to use the Fully qualified class name. For example, to get a new instance of TADFactory class you need to use:
SOAP API is implemented by TADSoap class. All methods that use UDP Protocol are implemented by PHP_ZKLib class. Even though you have 2 classes, you do not have to be worried about which method is been calling using SOAP api or through PHP_ZKLib. You've got a single interface.
Some methods need that you set up some parameters prior you can call them. TAD class uses associative arrays as way to pass params to the methods. Using associative arrays is a "more verbose way" that helps you to remember which params you have to pass.
TAD class allows you to register new users in the device or even you can update (change) information about an user already registered. However to achieve this, TAD class needs to delete the user (of course this applies when you are updating user's information) and then creates the user. Maybe this is not the best way to do that, but if TAD just calls the method to create a user, it will be created as many times as you call it.
If you look into PHP_ZKLib code, you'll see a method to create / update users. However, when you call that method, it generates a PIN code (not PIN2 code) in a way that if that code already exists in the device, it refuses to create the user. This is a method that should be modified to make it working properly but the way how PIN code is created is unknown.
The device uses an algorithm to encode fingerprints called "BioBridge" and it has 2 flavors: VX 9.0 and the new one VX 10.0. According the documentation, VX 10.0 generates shorter encoded fingerprints and it's faster when the device has to make searchings for a fingerprint match process. However, TAD class exposes a method to upload fingerprints but it works only when device is configured to use the old BioBridge VX 9.0 algorithm. When device uses VX 10.0 algorithm, the machine freezes!!!. When asked to ZK Software forum, the answer got was: "It has to work with any biobridge version. Check your code!". Any help about this, would be appreciated.
* Space available for templates. * Space available for attendance logs. * Total storage capacity for attendance logs. * Total storage capacity for user templates. * Total users stored * Total user passwords stored. * Total attendance logs stored. * Total templates stored.
Every command executed via TAD class will return an object that is an instance of TADResponse class. This object contains all information about the device's response received. This way you can get full flexibility to manipulate the responses that you got from the device: you can transform it in XML, JSON or even you can get an array. Also you can set some criterias to make a filtering process on the response.
Sometimes some queries to the device returns an empty answer. Because the original response from the device is in XML format, to know if you got any relevant data, you should have to parse the responses. That's not very handy:
As you saw above, all device's responses are handled by TADResponse class. You get the raw XML but you always get the whole set. What if you you'd like to do some kind of processing on reponses? Now, you can process the whole XML response by applying filters. This way, you can get just XML responses that really needs.
TADPHP is not perfect!!!. As mentioned at the beggining, it's been developed after hours, and hours, and hours of googling and it's been tested using just Fingertec Q2i Time & attendance device (that it's I have in my work), so it's possible that you can find errors when you use it with others devices or even you can find better ways to do the things. For that reason, there are some things to do:
Permission is hereby granted, free of charge, to any person obtaininga copy of this software and associated documentation files (the"Software"), to deal in the Software without restriction, includingwithout limitation the rights to use, copy, modify, merge, publish,distribute, sublicense, and/or sell copies of the Software, and topermit persons to whom the Software is furnished to do so, subject tothe following conditions:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE ANDNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BELIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTIONOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTIONWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
b37509886e