Name | pukpuk JSON |
Version |
3.3.0
JSON |
| download |
home_page | None |
Summary | HTTP discovery toolkit |
upload_time | 2025-01-31 13:04:46 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | MIT License |
keywords |
http
discovery
scanning
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
![version](https://img.shields.io/pypi/v/pukpuk) ![pyversions](https://img.shields.io/pypi/pyversions/pukpuk) ![license](https://img.shields.io/pypi/l/pukpuk) ![status](https://img.shields.io/pypi/status/pukpuk)
# pukpuk
> HTTP discovery and change monitoring tool
## About
Pukpuk ("pook-pook") is a simple utility that stores screenshots and HTTP responses for a given network range or URLs. It does so by looking for open ports, parsing certificates and performing reverse DNS lookups.
## Requirements
* Python 3.11, 3.12
* `chromium` (for screen grabbing functionality)
## Basic Usage
### Scan CIDR network using default ports
$ pukpuk -N 10.0.0.0/24
### Scan IP range and examine ports 80/http, 443/https and 8443 (auto-detect)
$ pukpuk -N 10.0.1.1-10.0.2.15 -p 80/http,443/https,8443
### Skip discovery and load URLs from a file
$ pukpuk -U urls.txt
## Installation
### Using PyPI
$ pip3 install pukpuk
## Troubleshooting
### libgcc_s.so.1 must be installed for pthread_cancel to work
$ LD_PRELOAD=libgcc_s.so.1 pukpuk
### Doesn't discover ports that exist for sure
In case of larger scans and possibility of dealing with a firewall experiment with increasing `--socket-timeout`, using less `--workers`, splitting the scan into smaller parts using text file input or give randomization a chance.
## CLI
```
usage: pukpuk [-h] [-N NETWORK] [-H HOSTS] [-U URLS] [-p PORTS] [-b BROWSER] [-r] [-o OUTPUT_DIR] [-u USER_AGENT] [-w WORKERS] [--process-timeout PROCESS_TIMEOUT] [--socket-timeout SOCKET_TIMEOUT] [--skip-screens] [--grabbing-attempts GRABBING_ATTEMPTS] [-v] [-d | -q]
HTTP discovery and change monitoring tool
options:
-h, --help show this help message and exit
-N NETWORK, --network NETWORK
Accepts network in CIDR notation or an IP range and performs discovery using ports in `-p`, e.g. "10.0.0.0/24", "10.0.1.1-10.2.1.1"
-H HOSTS, --hosts HOSTS
Loads hosts from a file and performs discovery using ports in `-p`
-U URLS, --urls URLS Loads specific URLs from a file, skips discovery and ignores the `-p` argument for these
-p PORTS, --ports PORTS
Comma separated port list for HTTP service discovery [Default: 80/http, 443/https]
-b BROWSER, --browser BROWSER
Chromium browser path for headless screen grabbing [Default: chromium]
-r, --randomize Randomize scanning order
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
Path where results (text files, images) will be stored [Default: YYYYMMDD_HHMM.pukpuk]
-u USER_AGENT, --user-agent USER_AGENT
Browser User-Agent header [Default: python-requests/2.28.1]
-w WORKERS, --workers WORKERS
Number of concurrent workers [Default: 15]
--process-timeout PROCESS_TIMEOUT
Process timeout in seconds [Default: 20]
--socket-timeout SOCKET_TIMEOUT
Socket timeout in seconds [Default: 3]
--skip-screens Skip screen grabbing
--grabbing-attempts GRABBING_ATTEMPTS
Number of screen grabbing attempts [Default: 3]
-v, --version Print version
-d, --debug
-q, --quiet
```
## Changelog
### 3.2.1 (2025-01-31)
* Switched to modern packaging.
* Updated dependencies.
* Print help when no arguments.
* Tests and minor fixes.
### 3.2.0 (2022-08-05)
* Improved screen capturing.
* [NEW] CLI arguments changed, it is now possible to use multiple sources for targets, i.e. mix network range, list of URLs, hosts in a file.
* [NEW] Several screen grabbing attempts (added argument) and a longer process timeout by default. Works better.
* [NEW] If paths are provided in the URLs file, they will be hashed with md5 when saving output.
* [NEW] HTTP request headers included with each individual file.
### 3.1.1 (2022-07-23)
* Fixed regression
* Tested with Python 3.8
### 3.1.0 (2022-07-23)
* Removed unreliable proxy support
* Removed misleading `nameserver` option
* Better error handling
* Logging to file
* [NEW] Added option for skipping screenshots
* [NEW] Saving targeted URLs
* [NEW] Support for IP ranges
### 3.0.0 (2022-07-22)
* Major refactoring and backward incompatible changes
* Improved test suite
### 2.0.6 (2022-06-22)
* Updated requirements
### 2.0.5 (2022-03-23)
* Updated requirements
### 2.0.4 (2022-01-13)
* Updated dependency (Pillow)
* Changed licensing
### 2.0.3 (2021-11-24)
* Updated dependency (Pillow)
* Minor refactoring
### 2.0.2 (2021-07-30)
* Updated dependency (Pillow)
### 2.0.1 (2021-03-31)
* Updated dependency (Pillow)
### 2.0.0 (2021-01-26)
* Major refactoring
* Updated requirements
* [NEW] Simplified CLI
* [NEW] Configuration file support
* [NEW] HTTP(S) can be omitted, falls back to protocol discovery
* [NEW] Randomization
* [NEW] Timeouts now in floats
* [NEW] Unit tests
* [FIXED] Grabbing screenshots with self-signed certificates
* [FIXED] Memory usage
### 1.1.1 (2020-11-26)
* Hotfix
### 1.1 (2020-11-26)
* Added support for SOCKS5 proxying
### 1.0 (2020-11-25)
* Updated Python requirements
* Removed timestamps from file names, no longer needed and makes it easier to diff and track with source versioning
* Strip whitespaces when loading CSV files
* Results now end up in separate subdirectories named after modules
* FIXED: Issue with loading from CSV files
### 0.5 (2020-09-20)
* CSV input and discovery phase skipping
* Minor improvements in logging and storing results
### 0.4 (2020-09-14)
* Simplified usage: removed option to launch selected modules since there are only two for now
* Creates directory for storing results by default
* Saves logging output by default
* Less detailed logging at info level
* Adjusted default timeouts
* Added usage examples
### 0.3 (2020-07-22)
* Graceful exit, cancelling steps
* Remove blank screenshots
* Added timestamp to default logging level
### 0.2 (2020-07-13)
* Initial commit
Raw data
{
"_id": null,
"home_page": null,
"name": "pukpuk",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "HTTP, discovery, scanning",
"author": null,
"author_email": "tasooshi <tasooshi@pm.me>",
"download_url": "https://files.pythonhosted.org/packages/75/75/125d71bb4890b0bfbf83ddcf490e02867d185c91e426425e3a0cc6978e29/pukpuk-3.3.0.tar.gz",
"platform": null,
"description": "![version](https://img.shields.io/pypi/v/pukpuk) ![pyversions](https://img.shields.io/pypi/pyversions/pukpuk) ![license](https://img.shields.io/pypi/l/pukpuk) ![status](https://img.shields.io/pypi/status/pukpuk)\n\n# pukpuk\n\n> HTTP discovery and change monitoring tool\n\n## About\n\nPukpuk (\"pook-pook\") is a simple utility that stores screenshots and HTTP responses for a given network range or URLs. It does so by looking for open ports, parsing certificates and performing reverse DNS lookups.\n\n## Requirements\n\n* Python 3.11, 3.12\n* `chromium` (for screen grabbing functionality)\n\n## Basic Usage\n\n### Scan CIDR network using default ports\n\n $ pukpuk -N 10.0.0.0/24\n\n### Scan IP range and examine ports 80/http, 443/https and 8443 (auto-detect)\n\n $ pukpuk -N 10.0.1.1-10.0.2.15 -p 80/http,443/https,8443\n\n### Skip discovery and load URLs from a file\n\n $ pukpuk -U urls.txt\n\n## Installation\n\n### Using PyPI\n\n $ pip3 install pukpuk\n\n## Troubleshooting\n\n### libgcc_s.so.1 must be installed for pthread_cancel to work\n\n $ LD_PRELOAD=libgcc_s.so.1 pukpuk\n\n### Doesn't discover ports that exist for sure\n\nIn case of larger scans and possibility of dealing with a firewall experiment with increasing `--socket-timeout`, using less `--workers`, splitting the scan into smaller parts using text file input or give randomization a chance.\n\n## CLI\n\n```\nusage: pukpuk [-h] [-N NETWORK] [-H HOSTS] [-U URLS] [-p PORTS] [-b BROWSER] [-r] [-o OUTPUT_DIR] [-u USER_AGENT] [-w WORKERS] [--process-timeout PROCESS_TIMEOUT] [--socket-timeout SOCKET_TIMEOUT] [--skip-screens] [--grabbing-attempts GRABBING_ATTEMPTS] [-v] [-d | -q]\n\nHTTP discovery and change monitoring tool\n\noptions:\n -h, --help show this help message and exit\n -N NETWORK, --network NETWORK\n Accepts network in CIDR notation or an IP range and performs discovery using ports in `-p`, e.g. \"10.0.0.0/24\", \"10.0.1.1-10.2.1.1\"\n -H HOSTS, --hosts HOSTS\n Loads hosts from a file and performs discovery using ports in `-p`\n -U URLS, --urls URLS Loads specific URLs from a file, skips discovery and ignores the `-p` argument for these\n -p PORTS, --ports PORTS\n Comma separated port list for HTTP service discovery [Default: 80/http, 443/https]\n -b BROWSER, --browser BROWSER\n Chromium browser path for headless screen grabbing [Default: chromium]\n -r, --randomize Randomize scanning order\n -o OUTPUT_DIR, --output-dir OUTPUT_DIR\n Path where results (text files, images) will be stored [Default: YYYYMMDD_HHMM.pukpuk]\n -u USER_AGENT, --user-agent USER_AGENT\n Browser User-Agent header [Default: python-requests/2.28.1]\n -w WORKERS, --workers WORKERS\n Number of concurrent workers [Default: 15]\n --process-timeout PROCESS_TIMEOUT\n Process timeout in seconds [Default: 20]\n --socket-timeout SOCKET_TIMEOUT\n Socket timeout in seconds [Default: 3]\n --skip-screens Skip screen grabbing\n --grabbing-attempts GRABBING_ATTEMPTS\n Number of screen grabbing attempts [Default: 3]\n -v, --version Print version\n -d, --debug\n -q, --quiet\n```\n\n## Changelog\n\n### 3.2.1 (2025-01-31)\n\n* Switched to modern packaging.\n* Updated dependencies.\n* Print help when no arguments.\n* Tests and minor fixes.\n\n### 3.2.0 (2022-08-05)\n\n* Improved screen capturing.\n* [NEW] CLI arguments changed, it is now possible to use multiple sources for targets, i.e. mix network range, list of URLs, hosts in a file.\n* [NEW] Several screen grabbing attempts (added argument) and a longer process timeout by default. Works better.\n* [NEW] If paths are provided in the URLs file, they will be hashed with md5 when saving output.\n* [NEW] HTTP request headers included with each individual file.\n\n### 3.1.1 (2022-07-23)\n\n* Fixed regression\n* Tested with Python 3.8\n\n### 3.1.0 (2022-07-23)\n\n* Removed unreliable proxy support\n* Removed misleading `nameserver` option\n* Better error handling\n* Logging to file\n* [NEW] Added option for skipping screenshots\n* [NEW] Saving targeted URLs\n* [NEW] Support for IP ranges\n\n### 3.0.0 (2022-07-22)\n\n* Major refactoring and backward incompatible changes\n* Improved test suite\n\n### 2.0.6 (2022-06-22)\n\n* Updated requirements\n\n### 2.0.5 (2022-03-23)\n\n* Updated requirements\n\n### 2.0.4 (2022-01-13)\n\n* Updated dependency (Pillow)\n* Changed licensing\n\n### 2.0.3 (2021-11-24)\n\n* Updated dependency (Pillow)\n* Minor refactoring\n\n### 2.0.2 (2021-07-30)\n\n* Updated dependency (Pillow)\n\n### 2.0.1 (2021-03-31)\n\n* Updated dependency (Pillow)\n\n### 2.0.0 (2021-01-26)\n\n* Major refactoring\n* Updated requirements\n* [NEW] Simplified CLI\n* [NEW] Configuration file support\n* [NEW] HTTP(S) can be omitted, falls back to protocol discovery\n* [NEW] Randomization\n* [NEW] Timeouts now in floats\n* [NEW] Unit tests\n* [FIXED] Grabbing screenshots with self-signed certificates\n* [FIXED] Memory usage\n\n### 1.1.1 (2020-11-26)\n\n* Hotfix\n\n### 1.1 (2020-11-26)\n\n* Added support for SOCKS5 proxying\n\n### 1.0 (2020-11-25)\n\n* Updated Python requirements\n* Removed timestamps from file names, no longer needed and makes it easier to diff and track with source versioning\n* Strip whitespaces when loading CSV files\n* Results now end up in separate subdirectories named after modules\n* FIXED: Issue with loading from CSV files\n\n### 0.5 (2020-09-20)\n\n* CSV input and discovery phase skipping\n* Minor improvements in logging and storing results\n\n### 0.4 (2020-09-14)\n\n* Simplified usage: removed option to launch selected modules since there are only two for now\n* Creates directory for storing results by default\n* Saves logging output by default\n* Less detailed logging at info level\n* Adjusted default timeouts\n* Added usage examples\n\n### 0.3 (2020-07-22)\n\n* Graceful exit, cancelling steps\n* Remove blank screenshots\n* Added timestamp to default logging level\n\n### 0.2 (2020-07-13)\n\n* Initial commit\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "HTTP discovery toolkit",
"version": "3.3.0",
"project_urls": {
"Source": "https://github.com/tasooshi/pukpuk/"
},
"split_keywords": [
"http",
" discovery",
" scanning"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "cbea08f5a6dacebd014330593f88441b2941ef3eccd65b4919eabf0ddf32494a",
"md5": "007d0ac8ac17f45421c40b00f40bdfaf",
"sha256": "2f8f8b477110bb2e4824bb1344a34a9d177d127cd3b7d46bb36a8f285fe505f7"
},
"downloads": -1,
"filename": "pukpuk-3.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "007d0ac8ac17f45421c40b00f40bdfaf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 11120,
"upload_time": "2025-01-31T13:04:45",
"upload_time_iso_8601": "2025-01-31T13:04:45.004005Z",
"url": "https://files.pythonhosted.org/packages/cb/ea/08f5a6dacebd014330593f88441b2941ef3eccd65b4919eabf0ddf32494a/pukpuk-3.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7575125d71bb4890b0bfbf83ddcf490e02867d185c91e426425e3a0cc6978e29",
"md5": "e01162ccc0c4815f388c4a40e274ec46",
"sha256": "788b06dd60871af62672d426400358a1ace215f9e3794c51811b67cb6642a5ce"
},
"downloads": -1,
"filename": "pukpuk-3.3.0.tar.gz",
"has_sig": false,
"md5_digest": "e01162ccc0c4815f388c4a40e274ec46",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 14495,
"upload_time": "2025-01-31T13:04:46",
"upload_time_iso_8601": "2025-01-31T13:04:46.768576Z",
"url": "https://files.pythonhosted.org/packages/75/75/125d71bb4890b0bfbf83ddcf490e02867d185c91e426425e3a0cc6978e29/pukpuk-3.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-31 13:04:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tasooshi",
"github_project": "pukpuk",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pukpuk"
}