ipmg 3.2.0__tar.gz → 4.0.0b1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ipmg-3.2.0/src/ipmg.egg-info → ipmg-4.0.0b1}/PKG-INFO +14 -7
- {ipmg-3.2.0 → ipmg-4.0.0b1}/README.md +11 -3
- {ipmg-3.2.0 → ipmg-4.0.0b1}/pyproject.toml +20 -12
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/__init__.py +1 -1
- {ipmg-3.2.0 → ipmg-4.0.0b1/src/ipmg.egg-info}/PKG-INFO +14 -7
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/requires.txt +0 -2
- {ipmg-3.2.0 → ipmg-4.0.0b1}/LICENSE +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/setup.cfg +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/__main__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/commands.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/completion.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/config.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/parser.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/cron.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/diff.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/discovery.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/engine.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/health.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/httpcheck.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/neighbours.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/ping.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/portscan.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/security.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/wake.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/data/oui.tsv.gz +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/exceptions.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/database.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/file_io.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/incremental.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/notify.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/retention.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/diff_report.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/frames.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/live.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/machine.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/metrics.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/summary.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/ui.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/services/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/services/history_service.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/services/scan_service.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/utils/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/utils/helpers.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/__init__.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/app.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/db.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/manager.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/scheduler.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/schemas.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/server.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/css/app.css +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/index.html +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/api.js +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/app.js +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/charts.js +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/demo.js +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/views.js +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/SOURCES.txt +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/dependency_links.txt +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/entry_points.txt +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/top_level.txt +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_api_contract.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_commands.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_completion.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_config.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_contrib.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_database_history.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_diff.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_diff_report.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_discover.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_engine.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_file_io.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_health.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_history_service.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_httpcheck.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_incremental.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ipv6.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_live.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_machine_output.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_metrics.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_neighbours.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_notify.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_parser.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ping.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ping_command.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_portscan.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_retention.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_scan_service.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_schedules.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_tcp_probe.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ui.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_utils.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_wake.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_api.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_db.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_manager.py +0 -0
- {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_server.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipmg
|
|
3
|
-
Version:
|
|
3
|
+
Version: 4.0.0b1
|
|
4
4
|
Summary: Network discovery and change detection: ping sweeps, scan history, and reports for what changed on your network
|
|
5
5
|
Author: Sameer Alam
|
|
6
6
|
Maintainer-email: Sameer Alam <sameeralam3127@gmail.com>
|
|
@@ -13,7 +13,6 @@ Project-URL: Changelog, https://github.com/sameeralam3127/ipmg/releases
|
|
|
13
13
|
Keywords: ip,network,ping,monitoring,cli,port-scan,network-scanner,ping-sweep,subnet-scanner,homelab,sysadmin
|
|
14
14
|
Classifier: Programming Language :: Python :: 3
|
|
15
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -26,7 +25,7 @@ Classifier: Intended Audience :: System Administrators
|
|
|
26
25
|
Classifier: Intended Audience :: Information Technology
|
|
27
26
|
Classifier: Operating System :: OS Independent
|
|
28
27
|
Classifier: Environment :: Console
|
|
29
|
-
Requires-Python: >=3.
|
|
28
|
+
Requires-Python: >=3.10
|
|
30
29
|
Description-Content-Type: text/markdown
|
|
31
30
|
License-File: LICENSE
|
|
32
31
|
Requires-Dist: openpyxl>=3.1
|
|
@@ -48,16 +47,24 @@ Requires-Dist: ruff>=0.4; extra == "dev"
|
|
|
48
47
|
Requires-Dist: pre-commit>=3.5.0; extra == "dev"
|
|
49
48
|
Requires-Dist: python-semantic-release>=10.5.3; extra == "dev"
|
|
50
49
|
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
51
|
-
Requires-Dist: httpx2>=2.0;
|
|
50
|
+
Requires-Dist: httpx2>=2.0; extra == "dev"
|
|
52
51
|
Dynamic: license-file
|
|
53
52
|
|
|
54
53
|
# IPMG — IP Management & Ping Monitoring Tool
|
|
55
54
|
|
|
56
55
|
[](https://pypi.org/project/ipmg/)
|
|
57
|
-

|
|
58
57
|

|
|
59
58
|
[](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml)
|
|
60
59
|
|
|
60
|
+
> [!WARNING]
|
|
61
|
+
> **This is the `v4` branch. IPMG v4 is in beta.** Try it with
|
|
62
|
+
> `pip install --pre ipmg` and report what breaks; keep production systems on
|
|
63
|
+
> the stable 3.x release (`pip install ipmg`) until v4.0.0 is published. v4 is
|
|
64
|
+
> an architectural release: a SOLID, plugin-based core, a streaming scan
|
|
65
|
+
> pipeline, strong typing, and contract tests, with 3.x workflows kept
|
|
66
|
+
> compatible. See the [v4 development plan](docs/v4/PLAN.md).
|
|
67
|
+
|
|
61
68
|
**Know what changed on your network since the last scan.**
|
|
62
69
|
|
|
63
70
|
IPMG keeps a history of every scan and tells you what moved between two of
|
|
@@ -145,7 +152,7 @@ IPMG does not craft packets. It runs your operating system's `ping` command
|
|
|
145
152
|
once per host, as a direct process call with no shell, and reads its output.
|
|
146
153
|
That means:
|
|
147
154
|
|
|
148
|
-
- **Python 3.
|
|
155
|
+
- **Python 3.10 or newer**, unless you use the one-line installers, which
|
|
149
156
|
bring their own.
|
|
150
157
|
- **The system `ping` command.** macOS and Windows include it; minimal Linux
|
|
151
158
|
and container images may not ([how to install it](#the-one-thing-ipmg-needs-from-your-system)).
|
|
@@ -355,7 +362,7 @@ Windows is not in that list because it cannot be tested in a container: it is
|
|
|
355
362
|
covered instead by the CI matrix, which runs the full test suite and a live
|
|
356
363
|
scan on `windows-latest` for every change.
|
|
357
364
|
|
|
358
|
-
Python 3.
|
|
365
|
+
Python 3.10 through 3.14 are supported, and CI runs the test suite against every
|
|
359
366
|
one of them.
|
|
360
367
|
|
|
361
368
|
<details>
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
# IPMG — IP Management & Ping Monitoring Tool
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/ipmg/)
|
|
4
|
-

|
|
5
5
|

|
|
6
6
|
[](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml)
|
|
7
7
|
|
|
8
|
+
> [!WARNING]
|
|
9
|
+
> **This is the `v4` branch. IPMG v4 is in beta.** Try it with
|
|
10
|
+
> `pip install --pre ipmg` and report what breaks; keep production systems on
|
|
11
|
+
> the stable 3.x release (`pip install ipmg`) until v4.0.0 is published. v4 is
|
|
12
|
+
> an architectural release: a SOLID, plugin-based core, a streaming scan
|
|
13
|
+
> pipeline, strong typing, and contract tests, with 3.x workflows kept
|
|
14
|
+
> compatible. See the [v4 development plan](docs/v4/PLAN.md).
|
|
15
|
+
|
|
8
16
|
**Know what changed on your network since the last scan.**
|
|
9
17
|
|
|
10
18
|
IPMG keeps a history of every scan and tells you what moved between two of
|
|
@@ -92,7 +100,7 @@ IPMG does not craft packets. It runs your operating system's `ping` command
|
|
|
92
100
|
once per host, as a direct process call with no shell, and reads its output.
|
|
93
101
|
That means:
|
|
94
102
|
|
|
95
|
-
- **Python 3.
|
|
103
|
+
- **Python 3.10 or newer**, unless you use the one-line installers, which
|
|
96
104
|
bring their own.
|
|
97
105
|
- **The system `ping` command.** macOS and Windows include it; minimal Linux
|
|
98
106
|
and container images may not ([how to install it](#the-one-thing-ipmg-needs-from-your-system)).
|
|
@@ -302,7 +310,7 @@ Windows is not in that list because it cannot be tested in a container: it is
|
|
|
302
310
|
covered instead by the CI matrix, which runs the full test suite and a live
|
|
303
311
|
scan on `windows-latest` for every change.
|
|
304
312
|
|
|
305
|
-
Python 3.
|
|
313
|
+
Python 3.10 through 3.14 are supported, and CI runs the test suite against every
|
|
306
314
|
one of them.
|
|
307
315
|
|
|
308
316
|
<details>
|
|
@@ -13,10 +13,10 @@ build-backend = "setuptools.build_meta"
|
|
|
13
13
|
|
|
14
14
|
[project]
|
|
15
15
|
name = "ipmg"
|
|
16
|
-
version = "
|
|
16
|
+
version = "4.0.0-beta.1" # Managed automatically by semantic-release
|
|
17
17
|
description = "Network discovery and change detection: ping sweeps, scan history, and reports for what changed on your network"
|
|
18
18
|
readme = "README.md"
|
|
19
|
-
requires-python = ">=3.
|
|
19
|
+
requires-python = ">=3.10"
|
|
20
20
|
license = "MIT"
|
|
21
21
|
license-files = ["LICENSE"]
|
|
22
22
|
|
|
@@ -33,7 +33,6 @@ keywords = ["ip", "network", "ping", "monitoring", "cli", "port-scan", "network-
|
|
|
33
33
|
classifiers = [
|
|
34
34
|
"Programming Language :: Python :: 3",
|
|
35
35
|
"Programming Language :: Python :: 3 :: Only",
|
|
36
|
-
"Programming Language :: Python :: 3.9",
|
|
37
36
|
"Programming Language :: Python :: 3.10",
|
|
38
37
|
"Programming Language :: Python :: 3.11",
|
|
39
38
|
"Programming Language :: Python :: 3.12",
|
|
@@ -84,10 +83,10 @@ dev = [
|
|
|
84
83
|
"pre-commit>=3.5.0",
|
|
85
84
|
"python-semantic-release>=10.5.3",
|
|
86
85
|
# The TestClient's HTTP client. Starlette 1.x wants httpx2 and warns
|
|
87
|
-
# about httpx; the Starlette
|
|
88
|
-
#
|
|
86
|
+
# about httpx; the older Starlette the lowest-deps job resolves to
|
|
87
|
+
# predates httpx2 and needs httpx.
|
|
89
88
|
"httpx>=0.27",
|
|
90
|
-
"httpx2>=2.0
|
|
89
|
+
"httpx2>=2.0",
|
|
91
90
|
]
|
|
92
91
|
|
|
93
92
|
[project.scripts]
|
|
@@ -107,10 +106,10 @@ dev = [
|
|
|
107
106
|
"pre-commit>=3.5.0",
|
|
108
107
|
"python-semantic-release>=10.5.3",
|
|
109
108
|
# The TestClient's HTTP client. Starlette 1.x wants httpx2 and warns
|
|
110
|
-
# about httpx; the Starlette
|
|
111
|
-
#
|
|
109
|
+
# about httpx; the older Starlette the lowest-deps job resolves to
|
|
110
|
+
# predates httpx2 and needs httpx.
|
|
112
111
|
"httpx>=0.27",
|
|
113
|
-
"httpx2>=2.0
|
|
112
|
+
"httpx2>=2.0",
|
|
114
113
|
]
|
|
115
114
|
|
|
116
115
|
|
|
@@ -121,7 +120,6 @@ dev = [
|
|
|
121
120
|
# Publishing is done by the workflow (pypa/gh-action-pypi-publish), not by
|
|
122
121
|
# semantic-release itself.
|
|
123
122
|
[tool.semantic_release]
|
|
124
|
-
branch = "main"
|
|
125
123
|
version_toml = ["pyproject.toml:project.version"]
|
|
126
124
|
version_variables = ["src/ipmg/__init__.py:__version__"]
|
|
127
125
|
tag_format = "v{version}"
|
|
@@ -129,6 +127,16 @@ commit_message = "chore(release): {version}"
|
|
|
129
127
|
build_command = "python -m build"
|
|
130
128
|
major_on_zero = false
|
|
131
129
|
|
|
130
|
+
# main releases; v4 releases betas (4.0.0-beta.N) until it merges into main.
|
|
131
|
+
[tool.semantic_release.branches.main]
|
|
132
|
+
match = "^main$"
|
|
133
|
+
prerelease = false
|
|
134
|
+
|
|
135
|
+
[tool.semantic_release.branches.v4]
|
|
136
|
+
match = "^v4$"
|
|
137
|
+
prerelease = true
|
|
138
|
+
prerelease_token = "beta"
|
|
139
|
+
|
|
132
140
|
[tool.semantic_release.changelog.default_templates]
|
|
133
141
|
changelog_file = ".github/CHANGELOG.md"
|
|
134
142
|
|
|
@@ -178,7 +186,7 @@ fail_under = 90
|
|
|
178
186
|
|
|
179
187
|
[tool.ruff]
|
|
180
188
|
line-length = 100
|
|
181
|
-
target-version = "
|
|
189
|
+
target-version = "py310"
|
|
182
190
|
|
|
183
191
|
[tool.ruff.lint]
|
|
184
192
|
select = ["E", "F", "W", "I", "C90"]
|
|
@@ -195,4 +203,4 @@ known-first-party = ["ipmg"]
|
|
|
195
203
|
|
|
196
204
|
[tool.black]
|
|
197
205
|
line-length = 100
|
|
198
|
-
target-version = ["
|
|
206
|
+
target-version = ["py310"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipmg
|
|
3
|
-
Version:
|
|
3
|
+
Version: 4.0.0b1
|
|
4
4
|
Summary: Network discovery and change detection: ping sweeps, scan history, and reports for what changed on your network
|
|
5
5
|
Author: Sameer Alam
|
|
6
6
|
Maintainer-email: Sameer Alam <sameeralam3127@gmail.com>
|
|
@@ -13,7 +13,6 @@ Project-URL: Changelog, https://github.com/sameeralam3127/ipmg/releases
|
|
|
13
13
|
Keywords: ip,network,ping,monitoring,cli,port-scan,network-scanner,ping-sweep,subnet-scanner,homelab,sysadmin
|
|
14
14
|
Classifier: Programming Language :: Python :: 3
|
|
15
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -26,7 +25,7 @@ Classifier: Intended Audience :: System Administrators
|
|
|
26
25
|
Classifier: Intended Audience :: Information Technology
|
|
27
26
|
Classifier: Operating System :: OS Independent
|
|
28
27
|
Classifier: Environment :: Console
|
|
29
|
-
Requires-Python: >=3.
|
|
28
|
+
Requires-Python: >=3.10
|
|
30
29
|
Description-Content-Type: text/markdown
|
|
31
30
|
License-File: LICENSE
|
|
32
31
|
Requires-Dist: openpyxl>=3.1
|
|
@@ -48,16 +47,24 @@ Requires-Dist: ruff>=0.4; extra == "dev"
|
|
|
48
47
|
Requires-Dist: pre-commit>=3.5.0; extra == "dev"
|
|
49
48
|
Requires-Dist: python-semantic-release>=10.5.3; extra == "dev"
|
|
50
49
|
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
51
|
-
Requires-Dist: httpx2>=2.0;
|
|
50
|
+
Requires-Dist: httpx2>=2.0; extra == "dev"
|
|
52
51
|
Dynamic: license-file
|
|
53
52
|
|
|
54
53
|
# IPMG — IP Management & Ping Monitoring Tool
|
|
55
54
|
|
|
56
55
|
[](https://pypi.org/project/ipmg/)
|
|
57
|
-

|
|
58
57
|

|
|
59
58
|
[](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml)
|
|
60
59
|
|
|
60
|
+
> [!WARNING]
|
|
61
|
+
> **This is the `v4` branch. IPMG v4 is in beta.** Try it with
|
|
62
|
+
> `pip install --pre ipmg` and report what breaks; keep production systems on
|
|
63
|
+
> the stable 3.x release (`pip install ipmg`) until v4.0.0 is published. v4 is
|
|
64
|
+
> an architectural release: a SOLID, plugin-based core, a streaming scan
|
|
65
|
+
> pipeline, strong typing, and contract tests, with 3.x workflows kept
|
|
66
|
+
> compatible. See the [v4 development plan](docs/v4/PLAN.md).
|
|
67
|
+
|
|
61
68
|
**Know what changed on your network since the last scan.**
|
|
62
69
|
|
|
63
70
|
IPMG keeps a history of every scan and tells you what moved between two of
|
|
@@ -145,7 +152,7 @@ IPMG does not craft packets. It runs your operating system's `ping` command
|
|
|
145
152
|
once per host, as a direct process call with no shell, and reads its output.
|
|
146
153
|
That means:
|
|
147
154
|
|
|
148
|
-
- **Python 3.
|
|
155
|
+
- **Python 3.10 or newer**, unless you use the one-line installers, which
|
|
149
156
|
bring their own.
|
|
150
157
|
- **The system `ping` command.** macOS and Windows include it; minimal Linux
|
|
151
158
|
and container images may not ([how to install it](#the-one-thing-ipmg-needs-from-your-system)).
|
|
@@ -355,7 +362,7 @@ Windows is not in that list because it cannot be tested in a container: it is
|
|
|
355
362
|
covered instead by the CI matrix, which runs the full test suite and a live
|
|
356
363
|
scan on `windows-latest` for every change.
|
|
357
364
|
|
|
358
|
-
Python 3.
|
|
365
|
+
Python 3.10 through 3.14 are supported, and CI runs the test suite against every
|
|
359
366
|
one of them.
|
|
360
367
|
|
|
361
368
|
<details>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|