zgrab2/schemas
2018-03-12 13:36:11 -04:00
..
__init__.py Add redis zgrab2 module (#53) 2018-02-13 13:25:47 -05:00
ftp.py run pycodestyle on schemas/ftp.py 2018-02-12 11:58:33 -05:00
http.py Port http from zgrab (#31) 2018-02-09 13:45:50 -05:00
mssql.py Add MSSQL zgrab2 module (#38) 2018-02-02 14:52:03 -05:00
mysql.py golint and godocs for mysql module (#56) 2018-02-12 10:42:45 -05:00
ntp.py Add NTP zgrab2 module (#39) 2018-02-07 12:25:46 -05:00
postgres.py Implements postgres zgrab2 module (#30) 2018-01-15 14:24:57 -05:00
README.md add ssh integration tests (#26) 2017-12-19 10:09:43 -05:00
redis.py Add redis zgrab2 module (#53) 2018-02-13 13:25:47 -05:00
ssh.py TLS scan prototype + Travis integration (#25) 2017-12-15 09:25:17 -05:00
zcrypto.py Port http from zgrab (#31) 2018-02-09 13:45:50 -05:00
zgrab2.py Scanner modules return the protocol ID, scan returns the protocol in the results. 2018-03-12 13:36:11 -04:00

ZGrab 2.0 schemas for zschema

Validating

integration_tests.sh automatically validates output from the integration tests; to manually validate a zgrab2 result, you can follow these steps:

  1. Get zschema (e.g. git clone https://github.com/zmap/zschema)
  2. 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
    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 for an example.

Register the module

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.