integration_tests.sh automatically validates output from the integration tests; to manually validate a zgrab2 result, you can follow these steps:
- Get zschema (e.g.
git clone https://github.com/zmap/zschema
) - Run the zschema validator:
- Run the zschema module's main function
- Pass it the
validate
command - Give the path to the zgrab2 schema
schemas/__init__.py:zgrab2
- Pass in the zgrab2 JSON file to validate
-
echo 127.0.0.1 | ./cmd/zgrab2/zgrab2 mysql > output.json PYTHONPATH=/path/to/zschema python -m zschema validate schemas/__init__.py:zgrab2 output.json
There are two steps to adding a new zgrab2 module schema:
- Add the module a. Register the response type with the zgrab2 schema
- Register the module in
__init__.py
Create your python file; if your protocol identifier (the default name
in the result table) is my_protocol, name the file my_protocol.py
(this allows a static schema validation from protocol_name
to protocol_schema
;
unfortunately, this means that multiple scans on a single host, or scans
using custom identifiers, will not validate).
Your module should include a SubRecord
that extends from zgrab2.base_scan_response
,
specifically, overridding the result
field. See schemas/mysql.py
for an example.
In schemas/__init__.py
, add an import for your
module (e.g. import my_protocol
). This will ensure that the module code
is executed and that the response type is registered with the zgrab2 module.