sondare 1.0.1__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.
Files changed (45) hide show
  1. sondare-1.0.1/LICENSE +21 -0
  2. sondare-1.0.1/PKG-INFO +206 -0
  3. sondare-1.0.1/README.md +172 -0
  4. sondare-1.0.1/pyproject.toml +53 -0
  5. sondare-1.0.1/setup.cfg +4 -0
  6. sondare-1.0.1/sondare/__init__.py +10 -0
  7. sondare-1.0.1/sondare/__main__.py +3 -0
  8. sondare-1.0.1/sondare/main.py +312 -0
  9. sondare-1.0.1/sondare/models.py +21 -0
  10. sondare-1.0.1/sondare/monitors/__init__.py +0 -0
  11. sondare-1.0.1/sondare/monitors/arp_watcher.py +65 -0
  12. sondare-1.0.1/sondare/monitors/hosts_watcher.py +133 -0
  13. sondare-1.0.1/sondare/monitors/port_watcher.py +122 -0
  14. sondare-1.0.1/sondare/monitors/traffic_sniffer.py +98 -0
  15. sondare-1.0.1/sondare/py.typed +0 -0
  16. sondare-1.0.1/sondare/services/__init__.py +9 -0
  17. sondare-1.0.1/sondare/services/arp.py +31 -0
  18. sondare-1.0.1/sondare/services/fingerprint.py +109 -0
  19. sondare-1.0.1/sondare/services/graph.py +279 -0
  20. sondare-1.0.1/sondare/services/icmp.py +76 -0
  21. sondare-1.0.1/sondare/services/tcp.py +90 -0
  22. sondare-1.0.1/sondare/services/udp.py +93 -0
  23. sondare-1.0.1/sondare/utils/__init__.py +5 -0
  24. sondare-1.0.1/sondare/utils/adaptive.py +106 -0
  25. sondare-1.0.1/sondare/utils/system_utils.py +57 -0
  26. sondare-1.0.1/sondare.egg-info/PKG-INFO +206 -0
  27. sondare-1.0.1/sondare.egg-info/SOURCES.txt +43 -0
  28. sondare-1.0.1/sondare.egg-info/dependency_links.txt +1 -0
  29. sondare-1.0.1/sondare.egg-info/entry_points.txt +2 -0
  30. sondare-1.0.1/sondare.egg-info/requires.txt +7 -0
  31. sondare-1.0.1/sondare.egg-info/top_level.txt +1 -0
  32. sondare-1.0.1/tests/test_adaptive.py +130 -0
  33. sondare-1.0.1/tests/test_arp.py +60 -0
  34. sondare-1.0.1/tests/test_arp_watcher.py +81 -0
  35. sondare-1.0.1/tests/test_fingerprint.py +135 -0
  36. sondare-1.0.1/tests/test_graph.py +188 -0
  37. sondare-1.0.1/tests/test_icmp.py +55 -0
  38. sondare-1.0.1/tests/test_main_output.py +146 -0
  39. sondare-1.0.1/tests/test_parse_target.py +55 -0
  40. sondare-1.0.1/tests/test_port_watcher.py +191 -0
  41. sondare-1.0.1/tests/test_system_utils.py +108 -0
  42. sondare-1.0.1/tests/test_tcp.py +97 -0
  43. sondare-1.0.1/tests/test_traffic_sniffer.py +198 -0
  44. sondare-1.0.1/tests/test_udp.py +112 -0
  45. sondare-1.0.1/tests/test_updown_monitor.py +203 -0
sondare-1.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Ivan Shurygin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
sondare-1.0.1/PKG-INFO ADDED
@@ -0,0 +1,206 @@
1
+ Metadata-Version: 2.4
2
+ Name: sondare
3
+ Version: 1.0.1
4
+ Summary: Probe and monitor local network hosts — ARP, ICMP, TCP, UDP, OS fingerprinting, and network graph.
5
+ Author-email: Ivan Shurygin <shurygin1vs@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/w1ldy0uth/sondare
8
+ Keywords: network,scanner,arp,tcp,udp,icmp,fingerprinting,monitoring,scapy,cli
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: System Administrators
12
+ Classifier: Intended Audience :: Information Technology
13
+ Classifier: Operating System :: POSIX :: Linux
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: System :: Networking
22
+ Classifier: Topic :: System :: Networking :: Monitoring
23
+ Classifier: Topic :: Security
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: scapy>=2.4.5
28
+ Requires-Dist: psutil>=5.9.5
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=8.0; extra == "dev"
31
+ Requires-Dist: build>=1.0; extra == "dev"
32
+ Requires-Dist: twine>=5.0; extra == "dev"
33
+ Dynamic: license-file
34
+
35
+ # sondare
36
+
37
+ > *From italian: <u>sonda</u> di <u>re</u>te - network probe*
38
+
39
+ ## About
40
+
41
+ **sondare** is a Python CLI tool for auditing local networks, built on top of [Scapy](https://scapy.net/). It provides scanning and fingerprinting methods, each running with multithreaded packet dispatch for speed.
42
+
43
+ - **ARP** — discovers all active hosts on the local subnet (cannot be blocked by firewalls)
44
+ - **ICMP** — pings all hosts to check reachability
45
+ - **TCP** — performs a SYN scan on a target host to find open ports
46
+ - **UDP** — probes UDP ports; reports open (got a UDP reply) or open|filtered (no response) ports
47
+ - **OS fingerprinting** — guesses the OS of a host by analysing TTL and TCP window size in a SYN-ACK response
48
+
49
+ ## Requirements
50
+
51
+ - Python 3.10+
52
+ - Root / administrator privileges (required for raw packet access)
53
+ - npcap (Windows only)
54
+
55
+ ## Setup
56
+
57
+ ### Linux & macOS
58
+
59
+ ```bash
60
+ ./init.sh
61
+ source sondare_venv/bin/activate
62
+ ```
63
+
64
+ ### Windows
65
+
66
+ ```bat
67
+ init.bat
68
+ call sondare_venv\Scripts\activate
69
+ ```
70
+
71
+ `init.sh` / `init.bat` creates a virtual environment and runs `pip install -e .`, which installs all dependencies and registers the `sondare` command.
72
+
73
+ ## Usage
74
+
75
+ ```bash
76
+ sudo sondare <command> [options]
77
+ ```
78
+
79
+ ### Commands
80
+
81
+ | Command | Description |
82
+ | --------- | ------------- |
83
+ | `arp` | ARP scan of the local subnet |
84
+ | `ping` | ICMP scan of the local subnet |
85
+ | `tcp` | TCP SYN port scan of a target host |
86
+ | `udp` | UDP port scan of a target host |
87
+ | `os` | OS fingerprint of a target host |
88
+ | `monitor arp` | Watch for ARP traffic; report new hosts and MAC changes |
89
+ | `monitor hosts` | Live host reachability table with auto-discovery |
90
+ | `monitor ports` | Periodically SYN-scan a target and report port state changes |
91
+ | `monitor traffic` | Live packet capture with per-packet protocol breakdown |
92
+ | `graph` | Generate an interactive HTML network graph of the local subnet |
93
+
94
+ ### Examples
95
+
96
+ ```bash
97
+ # Discover all hosts via ARP
98
+ sudo sondare arp
99
+
100
+ # Discover live hosts via ICMP with 10s timeout
101
+ sudo sondare ping -t 10
102
+
103
+ # Scan ports 1–1024 on a target
104
+ sudo sondare tcp --target 192.168.1.1:1-1024
105
+
106
+ # Scan a single port
107
+ sudo sondare tcp --target 192.168.1.1:80
108
+
109
+ # UDP scan of common ports
110
+ sudo sondare udp --target 192.168.1.1:1-1024
111
+
112
+ # Fingerprint a host OS (auto-probes common ports)
113
+ sudo sondare os --target 192.168.1.1
114
+
115
+ # Fingerprint using a known-open port
116
+ sudo sondare os --target 192.168.1.1 --port 80
117
+
118
+ # Watch for new hosts and ARP spoofing attempts
119
+ sudo sondare monitor arp
120
+
121
+ # Monitor all hosts on the subnet (auto-discovers new/departed hosts)
122
+ sudo sondare monitor hosts
123
+
124
+ # Monitor specific hosts every 10s
125
+ sudo sondare monitor hosts --hosts 192.168.1.1 192.168.1.50 -i 10
126
+
127
+ # Watch for port state changes on a target
128
+ sudo sondare monitor ports --target 192.168.1.1:1-1024
129
+
130
+ # Live packet capture (all traffic)
131
+ sudo sondare monitor traffic
132
+
133
+ # Live capture filtered to DNS
134
+ sudo sondare monitor traffic --filter "udp port 53"
135
+
136
+ # Generate a network graph (saved as sondare_graph.html)
137
+ sudo sondare graph
138
+
139
+ # Graph with OS fingerprinting for each discovered host
140
+ sudo sondare graph --fingerprint
141
+
142
+ # Save to a custom path
143
+ sudo sondare graph -o /tmp/my_network.html
144
+ ```
145
+
146
+ ### Options
147
+
148
+ ```bash
149
+ arp:
150
+ -t, --timeout Packet timeout in seconds (default: 5)
151
+ -v, --verbose Verbose scapy output
152
+
153
+ ping:
154
+ -t, --timeout Packet timeout in seconds (default: 5)
155
+ -th, --threads Number of threads (default: 100)
156
+ -v, --verbose Verbose scapy output
157
+
158
+ tcp:
159
+ --target Target as ip, ip:port, or ip:start-end (default: local machine, ports 1-1000)
160
+ -t, --timeout Packet timeout in seconds (default: 3)
161
+ -th, --threads Number of threads (default: 20)
162
+ -r, --retries Retries per port on no response (default: 2)
163
+ -v, --verbose Verbose scapy output
164
+
165
+ udp:
166
+ --target Target as ip, ip:port, or ip:start-end (default: local machine, ports 1-1000)
167
+ -t, --timeout Packet timeout in seconds (default: 3)
168
+ -th, --threads Number of threads (default: 20)
169
+ -r, --retries Retries per port on no response (default: 2)
170
+ -v, --verbose Verbose scapy output
171
+
172
+ os:
173
+ --target Target IP address (required)
174
+ --port Port to probe; omit to auto-try common ports in parallel
175
+ -t, --timeout Timeout per probe in seconds (default: 3)
176
+ -v, --verbose Verbose scapy output
177
+
178
+ monitor arp:
179
+ -t, --timeout Timeout for initial ARP seed scan (default: 5)
180
+ -v, --verbose Verbose scapy output
181
+
182
+ monitor hosts:
183
+ --hosts Hosts to monitor; omit to auto-discover via ARP each round
184
+ -i, --interval Seconds between ping rounds (default: 30)
185
+ -t, --timeout Ping timeout in seconds (default: 2)
186
+ -th, --threads Concurrent pings per round (default: 50)
187
+ -v, --verbose Verbose scapy output
188
+
189
+ monitor ports:
190
+ --target Target as ip, ip:port, or ip:start-end (default: local machine, ports 1-1000)
191
+ -i, --interval Seconds between scans (default: 60)
192
+ -t, --timeout Timeout per probe in seconds (default: 3)
193
+ -th, --threads Concurrent probes per scan (default: 20)
194
+ -v, --verbose Verbose scapy output
195
+
196
+ monitor traffic:
197
+ --filter BPF filter expression (e.g. 'tcp', 'udp port 53', 'host 192.168.1.1')
198
+ -v, --verbose Verbose scapy output
199
+
200
+ graph:
201
+ --fingerprint OS-fingerprint each discovered host (TCP SYN, falls back to ICMP TTL)
202
+ -o, --output Output file path (default: sondare_graph.html)
203
+ -t, --timeout ARP scan timeout in seconds (default: 3)
204
+ -th, --threads Concurrent fingerprint probes (default: 10)
205
+ -v, --verbose Verbose scapy output
206
+ ```
@@ -0,0 +1,172 @@
1
+ # sondare
2
+
3
+ > *From italian: <u>sonda</u> di <u>re</u>te - network probe*
4
+
5
+ ## About
6
+
7
+ **sondare** is a Python CLI tool for auditing local networks, built on top of [Scapy](https://scapy.net/). It provides scanning and fingerprinting methods, each running with multithreaded packet dispatch for speed.
8
+
9
+ - **ARP** — discovers all active hosts on the local subnet (cannot be blocked by firewalls)
10
+ - **ICMP** — pings all hosts to check reachability
11
+ - **TCP** — performs a SYN scan on a target host to find open ports
12
+ - **UDP** — probes UDP ports; reports open (got a UDP reply) or open|filtered (no response) ports
13
+ - **OS fingerprinting** — guesses the OS of a host by analysing TTL and TCP window size in a SYN-ACK response
14
+
15
+ ## Requirements
16
+
17
+ - Python 3.10+
18
+ - Root / administrator privileges (required for raw packet access)
19
+ - npcap (Windows only)
20
+
21
+ ## Setup
22
+
23
+ ### Linux & macOS
24
+
25
+ ```bash
26
+ ./init.sh
27
+ source sondare_venv/bin/activate
28
+ ```
29
+
30
+ ### Windows
31
+
32
+ ```bat
33
+ init.bat
34
+ call sondare_venv\Scripts\activate
35
+ ```
36
+
37
+ `init.sh` / `init.bat` creates a virtual environment and runs `pip install -e .`, which installs all dependencies and registers the `sondare` command.
38
+
39
+ ## Usage
40
+
41
+ ```bash
42
+ sudo sondare <command> [options]
43
+ ```
44
+
45
+ ### Commands
46
+
47
+ | Command | Description |
48
+ | --------- | ------------- |
49
+ | `arp` | ARP scan of the local subnet |
50
+ | `ping` | ICMP scan of the local subnet |
51
+ | `tcp` | TCP SYN port scan of a target host |
52
+ | `udp` | UDP port scan of a target host |
53
+ | `os` | OS fingerprint of a target host |
54
+ | `monitor arp` | Watch for ARP traffic; report new hosts and MAC changes |
55
+ | `monitor hosts` | Live host reachability table with auto-discovery |
56
+ | `monitor ports` | Periodically SYN-scan a target and report port state changes |
57
+ | `monitor traffic` | Live packet capture with per-packet protocol breakdown |
58
+ | `graph` | Generate an interactive HTML network graph of the local subnet |
59
+
60
+ ### Examples
61
+
62
+ ```bash
63
+ # Discover all hosts via ARP
64
+ sudo sondare arp
65
+
66
+ # Discover live hosts via ICMP with 10s timeout
67
+ sudo sondare ping -t 10
68
+
69
+ # Scan ports 1–1024 on a target
70
+ sudo sondare tcp --target 192.168.1.1:1-1024
71
+
72
+ # Scan a single port
73
+ sudo sondare tcp --target 192.168.1.1:80
74
+
75
+ # UDP scan of common ports
76
+ sudo sondare udp --target 192.168.1.1:1-1024
77
+
78
+ # Fingerprint a host OS (auto-probes common ports)
79
+ sudo sondare os --target 192.168.1.1
80
+
81
+ # Fingerprint using a known-open port
82
+ sudo sondare os --target 192.168.1.1 --port 80
83
+
84
+ # Watch for new hosts and ARP spoofing attempts
85
+ sudo sondare monitor arp
86
+
87
+ # Monitor all hosts on the subnet (auto-discovers new/departed hosts)
88
+ sudo sondare monitor hosts
89
+
90
+ # Monitor specific hosts every 10s
91
+ sudo sondare monitor hosts --hosts 192.168.1.1 192.168.1.50 -i 10
92
+
93
+ # Watch for port state changes on a target
94
+ sudo sondare monitor ports --target 192.168.1.1:1-1024
95
+
96
+ # Live packet capture (all traffic)
97
+ sudo sondare monitor traffic
98
+
99
+ # Live capture filtered to DNS
100
+ sudo sondare monitor traffic --filter "udp port 53"
101
+
102
+ # Generate a network graph (saved as sondare_graph.html)
103
+ sudo sondare graph
104
+
105
+ # Graph with OS fingerprinting for each discovered host
106
+ sudo sondare graph --fingerprint
107
+
108
+ # Save to a custom path
109
+ sudo sondare graph -o /tmp/my_network.html
110
+ ```
111
+
112
+ ### Options
113
+
114
+ ```bash
115
+ arp:
116
+ -t, --timeout Packet timeout in seconds (default: 5)
117
+ -v, --verbose Verbose scapy output
118
+
119
+ ping:
120
+ -t, --timeout Packet timeout in seconds (default: 5)
121
+ -th, --threads Number of threads (default: 100)
122
+ -v, --verbose Verbose scapy output
123
+
124
+ tcp:
125
+ --target Target as ip, ip:port, or ip:start-end (default: local machine, ports 1-1000)
126
+ -t, --timeout Packet timeout in seconds (default: 3)
127
+ -th, --threads Number of threads (default: 20)
128
+ -r, --retries Retries per port on no response (default: 2)
129
+ -v, --verbose Verbose scapy output
130
+
131
+ udp:
132
+ --target Target as ip, ip:port, or ip:start-end (default: local machine, ports 1-1000)
133
+ -t, --timeout Packet timeout in seconds (default: 3)
134
+ -th, --threads Number of threads (default: 20)
135
+ -r, --retries Retries per port on no response (default: 2)
136
+ -v, --verbose Verbose scapy output
137
+
138
+ os:
139
+ --target Target IP address (required)
140
+ --port Port to probe; omit to auto-try common ports in parallel
141
+ -t, --timeout Timeout per probe in seconds (default: 3)
142
+ -v, --verbose Verbose scapy output
143
+
144
+ monitor arp:
145
+ -t, --timeout Timeout for initial ARP seed scan (default: 5)
146
+ -v, --verbose Verbose scapy output
147
+
148
+ monitor hosts:
149
+ --hosts Hosts to monitor; omit to auto-discover via ARP each round
150
+ -i, --interval Seconds between ping rounds (default: 30)
151
+ -t, --timeout Ping timeout in seconds (default: 2)
152
+ -th, --threads Concurrent pings per round (default: 50)
153
+ -v, --verbose Verbose scapy output
154
+
155
+ monitor ports:
156
+ --target Target as ip, ip:port, or ip:start-end (default: local machine, ports 1-1000)
157
+ -i, --interval Seconds between scans (default: 60)
158
+ -t, --timeout Timeout per probe in seconds (default: 3)
159
+ -th, --threads Concurrent probes per scan (default: 20)
160
+ -v, --verbose Verbose scapy output
161
+
162
+ monitor traffic:
163
+ --filter BPF filter expression (e.g. 'tcp', 'udp port 53', 'host 192.168.1.1')
164
+ -v, --verbose Verbose scapy output
165
+
166
+ graph:
167
+ --fingerprint OS-fingerprint each discovered host (TCP SYN, falls back to ICMP TTL)
168
+ -o, --output Output file path (default: sondare_graph.html)
169
+ -t, --timeout ARP scan timeout in seconds (default: 3)
170
+ -th, --threads Concurrent fingerprint probes (default: 10)
171
+ -v, --verbose Verbose scapy output
172
+ ```
@@ -0,0 +1,53 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "sondare"
7
+ version = "1.0.1"
8
+ description = "Probe and monitor local network hosts — ARP, ICMP, TCP, UDP, OS fingerprinting, and network graph."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ license-files = ["LICENSE"]
12
+ authors = [
13
+ {name = "Ivan Shurygin", email = "shurygin1vs@gmail.com"},
14
+ ]
15
+ keywords = ["network", "scanner", "arp", "tcp", "udp", "icmp", "fingerprinting", "monitoring", "scapy", "cli"]
16
+ requires-python = ">=3.10"
17
+ dependencies = [
18
+ "scapy>=2.4.5",
19
+ "psutil>=5.9.5",
20
+ ]
21
+ classifiers = [
22
+ "Development Status :: 4 - Beta",
23
+ "Environment :: Console",
24
+ "Intended Audience :: System Administrators",
25
+ "Intended Audience :: Information Technology",
26
+ "Operating System :: POSIX :: Linux",
27
+ "Operating System :: MacOS",
28
+ "Operating System :: Microsoft :: Windows",
29
+ "Programming Language :: Python :: 3",
30
+ "Programming Language :: Python :: 3.10",
31
+ "Programming Language :: Python :: 3.11",
32
+ "Programming Language :: Python :: 3.12",
33
+ "Programming Language :: Python :: 3.13",
34
+ "Topic :: System :: Networking",
35
+ "Topic :: System :: Networking :: Monitoring",
36
+ "Topic :: Security",
37
+ ]
38
+
39
+ [project.urls]
40
+ Repository = "https://github.com/w1ldy0uth/sondare"
41
+
42
+ [project.optional-dependencies]
43
+ dev = ["pytest>=8.0", "build>=1.0", "twine>=5.0"]
44
+
45
+ [project.scripts]
46
+ sondare = "sondare.main:main"
47
+
48
+ [tool.setuptools.packages.find]
49
+ where = ["."]
50
+ include = ["sondare*"]
51
+
52
+ [tool.setuptools.package-data]
53
+ sondare = ["py.typed"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,10 @@
1
+ """sondare — local network scanner using ARP, ICMP, TCP, UDP probes and OS fingerprinting."""
2
+
3
+ from sondare.models import Host, Port, Fingerprint
4
+ from sondare.services.arp import Arp
5
+ from sondare.services.icmp import Ping
6
+ from sondare.services.tcp import Tcp
7
+ from sondare.services.udp import Udp
8
+ from sondare.services.fingerprint import OsFingerprinter
9
+
10
+ __all__ = ["Arp", "Ping", "Tcp", "Udp", "OsFingerprinter", "Host", "Port", "Fingerprint"]
@@ -0,0 +1,3 @@
1
+ from sondare.main import main
2
+
3
+ main()