python-kasa/devtools
Steven B. 5918e4daa7
Some checks are pending
CI / Perform linting checks (3.13) (push) Waiting to run
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.13) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.13) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.13) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.13) (push) Blocked by required conditions
CodeQL checks / Analyze (python) (push) Waiting to run
Enable saving of fixture files without git clone (#1375)
Allows `dump_devinfo` to be run without fixture subfolders present from cloned repository
2024-12-16 13:42:42 +00:00
..
bench Remove support for python <3.11 (#1273) 2024-11-18 18:46:36 +00:00
helpers Add new methods to dump_devinfo (#1373) 2024-12-16 13:06:26 +00:00
__init__.py Add known smart requests to dump_devinfo (#597) 2024-01-02 18:20:53 +01:00
create_module_fixtures.py Create common interfaces for remaining device types (#895) 2024-05-10 19:29:28 +01:00
dump_devinfo.py Enable saving of fixture files without git clone (#1375) 2024-12-16 13:42:42 +00:00
generate_supported.py Update dump_devinfo for raw discovery json and common redactors (#1358) 2024-12-11 14:18:44 +01:00
parse_pcap_klap.py Move protocol modules into protocols package (#1254) 2024-11-13 17:50:21 +00:00
parse_pcap.py Remove support for python <3.11 (#1273) 2024-11-18 18:46:36 +00:00
perftest.py Update poetry locks and pre-commit hooks (#837) 2024-04-16 20:21:20 +02:00
README.md Decrypt KLAP data from PCAP files (#1041) 2024-07-15 13:18:43 +01:00
update_fixtures.py Update dump_devinfo for raw discovery json and common redactors (#1358) 2024-12-11 14:18:44 +01:00

Tools for developers

This directory contains some simple scripts that can be useful for developers.

dump_devinfo

  • Queries the device (if --host is given) or discover devices and creates fixture files that can be added to the test suite.
Usage: python -m devtools.dump_devinfo [OPTIONS]

  Generate devinfo files for devices.

  Use --host (for a single device) or --target (for a complete network).

Options:
  --host TEXT      Target host.
  --target TEXT    Target network for discovery.
  --username TEXT  Username/email address to authenticate to device.
  --password TEXT  Password to use to authenticate to device.
  --basedir TEXT   Base directory for the git repository
  --autosave       Save without prompting
  -d, --debug
  --help           Show this message and exit.

create_module_fixtures

  • Queries the device for all supported modules and outputs module-based fixture files for each device.
  • This could be used to create fixture files for module-specific tests, but it might also be useful for other use-cases.
Usage: create_module_fixtures.py [OPTIONS] OUTPUTDIR

  Create module fixtures for given host/network.

Arguments:
  OUTPUTDIR  [required]

Options:
  --host TEXT
  --network TEXT
  --install-completion  Install completion for the current shell.
  --show-completion     Show completion for the current shell, to copy it or
                        customize the installation.
  --help                Show this message and exit.

parse_pcap

  • Requires dpkt (pip install dpkt)
  • Reads a pcap file and prints out the device communications
Usage: parse_pcap.py [OPTIONS] FILE

  Parse pcap file and pretty print the communications and some statistics.

Options:
  --help  Show this message and exit.

perftest

  • Runs several rounds of update cycles for the given list of addresses, and prints out statistics about the performance
Usage: perf_test.py [OPTIONS] [ADDRS]...

Options:
  --rounds INTEGER
  --help            Show this message and exit.
$ python perf_test.py 192.168.xx.x 192.168.xx.y 192.168.xx.z 192.168.xx.f
Running 5 rounds on ('192.168.xx.x', '192.168.xx.y', '192.168.xx.z', '192.168.xx.f')
=== Testing using gather on all devices ===
              took
             count      mean       std      min       25%       50%       75%       max
type
concurrently   5.0  0.097161  0.045544  0.05260  0.055332  0.088811  0.143082  0.145981
sequential     5.0  0.150506  0.005798  0.14162  0.149065  0.150499  0.155579  0.155768
=== Testing per-device performance ===
                           took
                          count      mean       std       min       25%       50%       75%       max
id
<id>-HS110(EU)   5.0  0.044917  0.014984  0.035836  0.037728  0.037950  0.041610  0.071458
<id>-KL130(EU)   5.0  0.067626  0.032027  0.046451  0.046797  0.048406  0.076136  0.120342
<id>-HS110(EU)   5.0  0.055700  0.016174  0.042086  0.045578  0.048905  0.059869  0.082064
<id>-KP303(UK)   5.0  0.010298  0.003765  0.007773  0.007968  0.008546  0.010439  0.016763

benchmark

  • Benchmark the protocol
% python3 devtools/bench/benchmark.py
New parser, parsing 100000 messages took 0.6339647499989951 seconds
Old parser, parsing 100000 messages took 9.473990250000497 seconds

parse_pcap_klap

  • A tool to allow KLAP data to be exported, in JSON, from a PCAP file of encrypted requests.

  • NOTE: must install pyshark (pip install pyshark).

  • pyshark requires Wireshark or tshark to be installed on windows and tshark to be installed on linux (apt get tshark)

Usage: parse_pcap_klap.py [OPTIONS]

  Export KLAP data in JSON format from a PCAP file.

Options:
  --host TEXT            the IP of the smart device as it appears in the pcap
                         file.  [required]
  --username TEXT        Username/email address to authenticate to device.
                         [required]
  --password TEXT        Password to use to authenticate to device.
                         [required]
  --pcap-file-path TEXT  The path to the pcap file to parse.  [required]
  -o, --output TEXT      The name of the output file, relative to the current
                         directory.
  --help                 Show this message and exit.