zgrab2/zgrab2_schemas/README.md
2018-05-04 11:15:09 -04:00

46 lines
1.8 KiB
Markdown

ZGrab 2.0 schemas for zschema
=============================
## Validating
[integration_tests.sh](../integration_tests.sh) automatically validates
output from the integration tests; to manually validate a zgrab2 result,
you can follow these steps:
0. Get [zschema](https://github.com/zmap/zschema) (e.g. `git clone https://github.com/zmap/zschema`)
1. Run the zschema validator:
1. Run the zschema module's main function
2. Pass it the `validate` command
3. Give the path to the zgrab2 schema [`schemas/__init__.py:zgrab2`](schemas/__init.py__)
4. 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
```
## Adding new module schemas
There are two steps to adding a new zgrab2 module schema:
1. Add the module
a. Register the response type with the zgrab2 schema
2. Register the module in `__init__.py`
### Add the module
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](schemas/mysql.py)
for an example.
### Register the module
In [`schemas/__init__.py`](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.