Skip to main content

Python Network device checker using Pytest and IP Fabric.

Project description

PyNetCheck

Python Network Checker

This project provides examples to extend the IP Fabric platform with custom device testing.

Requesting New CVEs

To request a new CVE to be added to the checker please open an issue on GitLab or send an email to contact-project+ip-fabric-integrations-pynetcheck-cve@incoming.gitlab.com.

Please include the CVE ID or link to documentation.

Requirements

  • Configuration saved task must be enabled in IP Fabric Discovery Settings for running against most vendors.
    • This was previously disabled in older versions however it was determined there is no known impact to the network or devices after enabling it.
    • Enabling this will allow you to see Management > Saved Config Consistency table which will report devices that are supported if their running configs have been saved.
  • Environment variables or command line arguments with IP Fabric URL and credentials.

IP Fabric Arguments

Currently implemented arguments:

  • --ipf-url https://demo.ipfabric.io
  • --ipf-token 7bb0e03827d32f3dfb4d5995824f2e01 - Token to use for authentication.
  • --insecure - Disable SSL verification, use flag if using a self-signed certificate.
  • --snapshot 33162920-8928-437d-9e4c-b125321f5686 - Defaults to $last.

These will take precedence over any environment variables or .env file settings.

Environment Variables

These can be set in the environment or in a file named .env in the directory you are running. Environment variables take precedence over .env variables.

IPF_URL=https://demo.ipfabric.io

# Use IPF_TOKEN OR (IPF_USERNAME AND IPF_PASSWORD):
IPF_TOKEN=TOKEN
# IPF_USERNAME=user
# IPF_PASSWORD='p@ssw0rd'

# OPTIONAL:

# IPF_SNAPSHOT defaults to $last
IPF_SNAPSHOT=$last
# IPF_SNAPSHOT=7e2d4bef-3f90-4c9c-851d-fc2f0990db35

# IPF_VERIFY defaults to True and can also be set to a path
IPF_VERIFY=true
# IPF_VERIFY="path/to/client.pem"

# IPF_TIMEOUT defaults to HTTPX default of 5.0 see https://www.python-httpx.org/advanced/#timeout-configuration
# IPF_TIMEOUT only accepts int/float arguments
IPF_TIMEOUT=5

Installation

The project is available on PyPi and can be installed via pip:

pip install pynetcheck

Running

Running Against IP Fabric

To run tests with builtin cases, use the following command:

(venv) >pynetcheck --tb=line                         
========================================================================================== test session starts ==========================================================================================
platform win32 -- Python 3.9.9, pytest-7.4.2, pluggy-1.3.0
rootdir: C:\Code\_EXAMPLES\config_vulnerability\pynetcheck
configfile: pytest.ini
plugins: anyio-4.0.0, depends-1.0.1, html-reporter-0.2.9
collected 13 items                                                                                                                                                                                       

pynetcheck\tests\cve_2023_20198\ios_xe_test.py ..sFFFF.s.s.s                                                                                                                                       [100%]

=============================================================================================== FAILURES ================================================================================================ 
C:\Code\_EXAMPLES\pynetcheck\tests\cve_2023_20198\ios_xe_test.py:34: AssertionError: Startup - HTTP secure-server Enabled
C:\Code\_EXAMPLES\pynetcheck\tests\cve_2023_20198\ios_xe_test.py:52: AssertionError: Startup - HTTP secure-server Vulnerable
C:\Code\_EXAMPLES\pynetcheck\tests\cve_2023_20198\ios_xe_test.py:30: AssertionError: Running - HTTP server Enabled
C:\Code\_EXAMPLES\pynetcheck\tests\cve_2023_20198\ios_xe_test.py:50: AssertionError: Running - HTTP server Vulnerable
======================================================================================== short test summary info ========================================================================================
FAILED pynetcheck\tests\cve_2023_20198\ios_xe_test.py::TestHTTPServerIPF::test_https_server_disabled[L77R11-LEAF5] - AssertionError: Startup - HTTP secure-server Enabled
FAILED pynetcheck\tests\cve_2023_20198\ios_xe_test.py::TestHTTPServerIPF::test_https_server_vulnerable[L77R11-LEAF5] - AssertionError: Startup - HTTP secure-server Vulnerable
FAILED pynetcheck\tests\cve_2023_20198\ios_xe_test.py::TestHTTPServerIPF::test_http_server_disabled[L67CSR16] - AssertionError: Running - HTTP server Enabled
FAILED pynetcheck\tests\cve_2023_20198\ios_xe_test.py::TestHTTPServerIPF::test_http_server_vulnerable[L67CSR16] - AssertionError: Running - HTTP server Vulnerable
================================================================================ 4 failed, 5 passed, 4 skipped in 1.94s ================================================================================= 

Running Against Configuration Files Directory

To run using a directory that stores a list of configuration files:

pynetcheck --config-dir /path/to/dir

This will attempt to run tests on all configs in the directory, please ensure the correct vendor and families are sorted in separate directories and use pytest marks to filter the tests.

Filtering

Pytest Marks have been added to allow for filtering of tests. Please see the Working with custom markers for more information.

  • -m cve - Filter only CVE tests
  • -m cisco - Filter only Cisco tests
  • -m paloalto - Filter only Palo Alto tests

-m can be used with not to exclude tests or a combination of marks, example: -m "not cve" or -m "cisco and not cve".

You can also use the -k option to filter tests by name.

Environment Variables

The following environment variables can be used to override how tests fail or pass:

Type Vendor Variable Accepted Values Default Description
Vendor Cisco CISCO_HTTP_SERVER DISABLED* ENABLED Will fail if HTTP server is enabled.
Vendor Cisco CISCO_HTTPS_SERVER DISABLED* ENABLED Will fail if HTTPS server is enabled.
Vendor Cisco CISCO_SCP_SERVER DISABLED* ENABLED Will fail if SCP server is enabled.

*Only valid variable value, no other value will be accepted.

Results

HTML

Results are stored in the pytest_html_report.html which can be viewed in any browser.

img.png

Exporting

The pytest-html-reporter also provides the ability to export via CSV or Excel formats, example: pytest.csv.

Table modified to show only the relevant information:

Suite Test Case Status Time (s) Error Message
tests/cve_2023_20198/ios_xe_test.py test_saved_config_consistency PASS 0.21
tests/cve_2023_20198/ios_xe_test.py test_https_server_vulnerable[L77R12-LEAF6] SKIP 0
tests/cve_2023_20198/ios_xe_test.py test_https_server_vulnerable[L77R11-LEAF5] FAIL 0 E AssertionError: Startup - HTTP secure-server Vulnerable
tests/cve_2023_20198/ios_xe_test.py test_https_server_vulnerable[L67CSR16] SKIP 0
tests/cve_2023_20198/ios_xe_test.py test_https_server_disabled[L77R12-LEAF6] PASS 0
tests/cve_2023_20198/ios_xe_test.py test_https_server_disabled[L77R11-LEAF5] FAIL 0 E AssertionError: Startup - HTTP secure-server Enabled
tests/cve_2023_20198/ios_xe_test.py test_https_server_disabled[L67CSR16] PASS 0
tests/cve_2023_20198/ios_xe_test.py test_http_server_vulnerable[L77R12-LEAF6] SKIP 0
tests/cve_2023_20198/ios_xe_test.py test_http_server_vulnerable[L77R11-LEAF5] SKIP 0
tests/cve_2023_20198/ios_xe_test.py test_http_server_vulnerable[L67CSR16] FAIL 0 E AssertionError: Running - HTTP server Vulnerable
tests/cve_2023_20198/ios_xe_test.py test_http_server_disabled[L77R12-LEAF6] PASS 0.13
tests/cve_2023_20198/ios_xe_test.py test_http_server_disabled[L77R11-LEAF5] PASS 0.15
tests/cve_2023_20198/ios_xe_test.py test_http_server_disabled[L67CSR16] FAIL 0.15 E AssertionError: Running - HTTP server Enabled

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynetcheck-1.0.2.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

pynetcheck-1.0.2-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file pynetcheck-1.0.2.tar.gz.

File metadata

  • Download URL: pynetcheck-1.0.2.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.9.9 Windows/10

File hashes

Hashes for pynetcheck-1.0.2.tar.gz
Algorithm Hash digest
SHA256 7f178c9ef5272fcb4638585d0ea549999b6d5b6d01df4add72d8d210bbe8d061
MD5 3707a37424a99edf4786b4e2dc0b9d38
BLAKE2b-256 af48a531bd68fb73e823880329741c164d8bd60c8b1bb9e18949908785e1b813

See more details on using hashes here.

File details

Details for the file pynetcheck-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: pynetcheck-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 19.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.9.9 Windows/10

File hashes

Hashes for pynetcheck-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cb509b816da11824f77d931af24f914271ec1faea2560668f907dc88d517ebb5
MD5 68ff265f7503a64473aff9c67f470fa5
BLAKE2b-256 4ab12d07c1d442e1a5ac4e3c2914b9298e13bfaff3f94d30ebe2fe1f03f4502e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page