pukpuk


Namepukpuk JSON
Version 3.3.0 PyPI version JSON
download
home_pageNone
SummaryHTTP discovery toolkit
upload_time2025-01-31 13:04:46
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseMIT 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"
}
        
Elapsed time: 1.13553s