man-spider 1.1.1__py3-none-any.whl → 2.0.0__py3-none-any.whl

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.
@@ -1,30 +1,34 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: man-spider
3
- Version: 1.1.1
3
+ Version: 2.0.0
4
4
  Summary: Full-featured SMB spider capable of searching file content
5
- License: GPL-3.0
6
- Author: TheTechromancer
7
- Requires-Python: >=3.8,<3.14
8
- Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.8
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Requires-Dist: extractous (>=0.3.0,<0.4.0)
17
- Requires-Dist: impacket (>=0.12.0,<0.13.0)
18
- Requires-Dist: python-magic (>=0.4.27,<0.5.0)
19
- Project-URL: Homepage, https://github.com/blacklanternsecurity/MANSPIDER
20
5
  Project-URL: Repository, https://github.com/blacklanternsecurity/MANSPIDER
6
+ Project-URL: Homepage, https://github.com/blacklanternsecurity/MANSPIDER
7
+ Author: TheTechromancer
8
+ License: GPL-3.0
9
+ License-File: LICENSE
10
+ Requires-Python: >=3.10
11
+ Requires-Dist: charset-normalizer
12
+ Requires-Dist: impacket
13
+ Requires-Dist: kreuzberg
21
14
  Description-Content-Type: text/markdown
22
15
 
23
16
  # MANSPIDER
24
17
  ### Crawl SMB shares for juicy information. File content searching + regex is supported!
25
18
 
26
- ### UPDATE 2025-05-26
27
- **Manspider has been updated to support kerberos!** Also, the textract library has been replaced with [Extractous](https://github.com/yobix-ai/extractous), so you can now feel free to run it outside Docker. 🎉
19
+ ---
20
+
21
+ ## What's New in v2.0
22
+
23
+ **Manspider 2.0 is here!** This brings significant improvements:
24
+
25
+ - **New and improved text extraction** powered by [Kreuzberg](https://github.com/Goldziher/kreuzberg) - now supporting PDF, DOCX, XLSX, PPTX, images with OCR, and many more formats
26
+ - **Modern package management** with [uv](https://github.com/astral-sh/uv) for faster, more reliable installations
27
+ - **Python 3.14 support** - ready for the latest Python releases
28
+ - **Date filtering** - search files by modification date with `--modified-after` and `--modified-before`
29
+ - **Comprehensive unit tests** - improved reliability and stability
30
+
31
+ ---
28
32
 
29
33
  ![manspider](https://user-images.githubusercontent.com/20261699/74963251-6a08de80-53df-11ea-88f4-60c39665dfa2.gif)
30
34
 
@@ -39,19 +43,35 @@ Description-Content-Type: text/markdown
39
43
  ### MANSPIDER will crawl every share on every target system. If provided creds don't work, it will fall back to "guest", then to a null session.
40
44
  ![manspider](https://user-images.githubusercontent.com/20261699/80316979-f9ab7e80-87ce-11ea-9628-3c22a07e8378.png)
41
45
 
42
- ### Installation:
43
- (Optional) Install these dependencies to add additional file parsing capability:
46
+ ### Installation
47
+
48
+ #### Quick Run with uvx (recommended)
49
+ ~~~bash
50
+ # Run directly without installing
51
+ uvx --from git+https://github.com/blacklanternsecurity/MANSPIDER manspider --help
44
52
  ~~~
45
- # for images (png, jpeg)
46
- $ sudo apt install tesseract-ocr
47
53
 
48
- # for legacy document support (.doc)
49
- $ sudo apt install antiword
54
+ #### Install with uv
55
+ ~~~bash
56
+ # Install globally
57
+ uv tool install git+https://github.com/blacklanternsecurity/MANSPIDER
58
+
59
+ # Run
60
+ manspider --help
50
61
  ~~~
51
- Install manspider (please be patient, this can take a while):
62
+
63
+ #### Install with pipx
64
+ ~~~bash
65
+ pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
52
66
  ~~~
53
- $ pip install pipx
54
- $ pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
67
+
68
+ #### Optional Dependencies
69
+ ~~~bash
70
+ # for OCR on images (png, jpeg)
71
+ sudo apt install tesseract-ocr
72
+
73
+ # for legacy .doc support (kreuzberg uses libreoffice)
74
+ sudo apt install libreoffice
55
75
  ~~~
56
76
 
57
77
  ## Installation (Docker)
@@ -133,6 +153,11 @@ $ manspider share.evilcorp.local -e kdbx kdb 1pif agilekeychain opvault lpd dash
133
153
  $ manspider share.evilcorp.local -e pfx p12 pkcs12 pem key crt cer csr jks keystore key keys der -d evilcorp -u bob -p Passw0rd
134
154
  ~~~
135
155
 
156
+ ### Example #10: Search for recently modified files
157
+ ~~~
158
+ $ manspider share.evilcorp.local -e docx xlsx pdf --modified-after 2026-01-01 -d evilcorp -u bob -p Passw0rd
159
+ ~~~
160
+
136
161
  ### Usage Tip #1:
137
162
  You can run multiple instances of manspider at one time. This is useful when one instance is already running, and you want to search what it's downloaded (similar to `grep -R`). To do this, specify the keyword `loot` as the target, which will search the downloaded files in `$HOME/.manspider/loot`.
138
163
 
@@ -162,9 +187,9 @@ For example, you could specify any or all of these:
162
187
 
163
188
  ## Usage:
164
189
  ~~~
165
- usage: manspider [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-m MAXDEPTH] [-H HASH] [-t THREADS] [-f REGEX [REGEX ...]] [-e EXT [EXT ...]] [--exclude-extensions EXT [EXT ...]]
166
- [-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]] [--exclude-dirnames DIR [DIR ...]] [-q] [-n]
167
- [-mfail INT] [-o] [-s SIZE] [-v]
190
+ usage: manspider [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-l LOOT_DIR] [-m MAXDEPTH] [-H HASH] [-k] [-aesKey HEX] [-dc-ip IP] [-t THREADS] [-f REGEX [REGEX ...]] [-e EXT [EXT ...]]
191
+ [--exclude-extensions EXT [EXT ...]] [-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]]
192
+ [--exclude-dirnames DIR [DIR ...]] [-q] [-n] [-mfail INT] [-o] [-s SIZE] [-v]
168
193
  targets [targets ...]
169
194
 
170
195
  Scan for juicy data on SMB shares. Matching files and logs are stored in $HOME/.manspider. All filters are case-insensitive.
@@ -173,26 +198,31 @@ positional arguments:
173
198
  targets IPs, Hostnames, CIDR ranges, or files containing targets to spider (NOTE: local searching also supported, specify directory name or keyword "loot" to search
174
199
  downloaded files)
175
200
 
176
- optional arguments:
201
+ options:
177
202
  -h, --help show this help message and exit
178
- -u USERNAME, --username USERNAME
203
+ -u, --username USERNAME
179
204
  username for authentication
180
- -p PASSWORD, --password PASSWORD
205
+ -p, --password PASSWORD
181
206
  password for authentication
182
- -d DOMAIN, --domain DOMAIN
183
- domain for authentication
184
- -m MAXDEPTH, --maxdepth MAXDEPTH
207
+ -d, --domain DOMAIN domain for authentication
208
+ -l, --loot-dir LOOT_DIR
209
+ loot directory (default ~/.manspider/)
210
+ -m, --maxdepth MAXDEPTH
185
211
  maximum depth to spider (default: 10)
186
- -H HASH, --hash HASH NTLM hash for authentication
187
- -t THREADS, --threads THREADS
212
+ -H, --hash HASH NTLM hash for authentication
213
+ -k, --kerberos Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters
214
+ -aesKey, --aes-key HEX
215
+ AES key to use for Kerberos Authentication (128 or 256 bits)
216
+ -dc-ip, --dc-ip IP IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter
217
+ -t, --threads THREADS
188
218
  concurrent threads (default: 5)
189
- -f REGEX [REGEX ...], --filenames REGEX [REGEX ...]
219
+ -f, --filenames REGEX [REGEX ...]
190
220
  filter filenames using regex (space-separated)
191
- -e EXT [EXT ...], --extensions EXT [EXT ...]
221
+ -e, --extensions EXT [EXT ...]
192
222
  only show filenames with these extensions (space-separated, e.g. `docx xlsx` for only word & excel docs)
193
223
  --exclude-extensions EXT [EXT ...]
194
224
  ignore files with these extensions
195
- -c REGEX [REGEX ...], --content REGEX [REGEX ...]
225
+ -c, --content REGEX [REGEX ...]
196
226
  search for file content using regex (multiple supported)
197
227
  --sharenames SHARE [SHARE ...]
198
228
  only search shares with these names (multiple supported)
@@ -204,11 +234,38 @@ optional arguments:
204
234
  don't search directories containing these strings (multiple supported)
205
235
  -q, --quiet don't display matching file content
206
236
  -n, --no-download don't download matching files
207
- -mfail INT, --max-failed-logons INT
237
+ -mfail, --max-failed-logons INT
208
238
  limit failed logons
209
239
  -o, --or-logic use OR logic instead of AND (files are downloaded if filename OR extension OR content match)
210
- -s SIZE, --max-filesize SIZE
240
+ -s, --max-filesize SIZE
211
241
  don't retrieve files over this size, e.g. "500K" or ".5M" (default: 10M)
212
242
  -v, --verbose show debugging messages
243
+ --modified-after DATE
244
+ only show files modified after this date (format: YYYY-MM-DD)
245
+ --modified-before DATE
246
+ only show files modified before this date (format: YYYY-MM-DD)
213
247
  ~~~
214
248
 
249
+ ## Development
250
+
251
+ ### Testing
252
+
253
+ ```bash
254
+ # Run tests
255
+ uv run pytest
256
+ ```
257
+
258
+ ### Linting
259
+
260
+ This project uses [ruff](https://github.com/astral-sh/ruff) for linting and formatting.
261
+
262
+ ```bash
263
+ # Run linter
264
+ uv run ruff check .
265
+
266
+ # Run linter with auto-fix
267
+ uv run ruff check --fix .
268
+
269
+ # Run formatter
270
+ uv run ruff format .
271
+ ```
@@ -0,0 +1,18 @@
1
+ man_spider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ man_spider/manspider.py,sha256=un_CwO2EbwCoXRfIccvCeddMy5jFWfG4PuTKr9lHf9M,10445
3
+ man_spider/lib/__init__.py,sha256=ur53cnY4wqGh1C19LDk61D62vzk0iXZRYshU33Mqe-Q,86
4
+ man_spider/lib/errors.py,sha256=NP-T7KtgNAEOoUKAJipSSk45QeyWrZb4y8uTgj6VB-w,1065
5
+ man_spider/lib/file.py,sha256=W96HlDVZip9bdeMYZfBxVKGg2vrwqvPRjPtCjHriN1w,1527
6
+ man_spider/lib/logger.py,sha256=kcqrVHdY_yddqFSI1YhlSK1A4JNi8JiMGgjei8-UXvg,2420
7
+ man_spider/lib/processpool.py,sha256=6kg_KL49XVdQXLiBlYram8pK-PTmebjrAuVJvvIGB54,3865
8
+ man_spider/lib/smb.py,sha256=Co_wPted46gEoVomcmV55VWrj_yO-8i65shsWEX5Mxk,9686
9
+ man_spider/lib/spider.py,sha256=l_eBetH0FMHS2BnxBOXd_5NA09E-5-6BfGXV_6q_nh4,7416
10
+ man_spider/lib/spiderling.py,sha256=Sdk-PHTl7vui36jiQEAXqEHUIGWaBwpxTY5t2AywGfQ,18751
11
+ man_spider/lib/util.py,sha256=0wqPXVA0yhtsZPFht4BDXZJxkOnXEsMkNduJPA4g8bE,5016
12
+ man_spider/lib/parser/__init__.py,sha256=FRoKwIMIYfP1ESv02iKyCG9PH4vR2wZg1Cpqj7ryI3g,22
13
+ man_spider/lib/parser/parser.py,sha256=zHFagYBXp7fDe6H1Fp-_HqEbXCHPgvDueXxRI334EJo,7093
14
+ man_spider-2.0.0.dist-info/METADATA,sha256=IByvTAoKnT6zRf2I5S78BO5BlAVt_-zEzSSrgP27uOI,10897
15
+ man_spider-2.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
16
+ man_spider-2.0.0.dist-info/entry_points.txt,sha256=tNKDPBaLZJ65HCR2zP37LGmXVFvVoxRoGvmLdoOLyXg,56
17
+ man_spider-2.0.0.dist-info/licenses/LICENSE,sha256=qvZcoAC_iNU83gvyvlLTL2TKCCmP0CBDzRQgXZKePAM,35102
18
+ man_spider-2.0.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ manspider = man_spider.manspider:main
@@ -1,18 +0,0 @@
1
- man_spider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- man_spider/lib/__init__.py,sha256=ur53cnY4wqGh1C19LDk61D62vzk0iXZRYshU33Mqe-Q,86
3
- man_spider/lib/errors.py,sha256=InHvv7ZfWn766Jm6DsWRRZCzWhWxaDzlfmGyDg3SOJo,1061
4
- man_spider/lib/file.py,sha256=6k1U680OLjuM4uqteeTbUDZojpy7MVDBR3pBp_LD4hk,1503
5
- man_spider/lib/logger.py,sha256=apDRFLWy2j7ShrxatHqBkYAGyv7b9FQyAO0uDvTHqdM,2440
6
- man_spider/lib/parser/__init__.py,sha256=m0KGcdcwfM6xh0l1YFLvlXSeCI82auoB6ztrWN7qGyM,21
7
- man_spider/lib/parser/parser.py,sha256=x2uzuS2ESZrAOR6hnfd5Goi8Sy04wRjNTXVf0LoGask,5006
8
- man_spider/lib/processpool.py,sha256=KkT7ZCzi6_6c9bNlW04MioSb8G8muoUcxIIF8DXEMrA,3742
9
- man_spider/lib/smb.py,sha256=uy9SbnwjYwiRh-7TVI7U0D8tcrU34o9pIHIAfo-IinQ,8974
10
- man_spider/lib/spider.py,sha256=KcklxlgcTCOfBR6wlR8SRDGwES4M-IHedl7wyfjVrao,7185
11
- man_spider/lib/spiderling.py,sha256=aVHkpyJI8YvKQyNldoLP7CzfMP0HYudpnzkzZx-wypo,15687
12
- man_spider/lib/util.py,sha256=Ti7R8JMcA9q1iSyqYPBn9aCQtNoua7jYCH70rfgslHE,3130
13
- man_spider/manspider.py,sha256=l4vfG_1CQjt6jVP_owAHybhajizSXTa9D3nocHOU3BY,8917
14
- man_spider-1.1.1.dist-info/LICENSE,sha256=qvZcoAC_iNU83gvyvlLTL2TKCCmP0CBDzRQgXZKePAM,35102
15
- man_spider-1.1.1.dist-info/METADATA,sha256=e1AtliskoGLNQ1iXBzwbtLDHzjRWe8JfWEWvQzIcRWM,9648
16
- man_spider-1.1.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
17
- man_spider-1.1.1.dist-info/entry_points.txt,sha256=ECMHYrXRR3rO40LF4AiKmuM2DbPvdmkxINp0Wa_qVCc,55
18
- man_spider-1.1.1.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- manspider=man_spider.manspider:main
3
-