diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e8e2805 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PYTHONPATH=/app + +WORKDIR /app + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + libxml2-dev \ + libxslt1-dev \ + libffi-dev \ + libssl-dev \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Install package dependencies using setup.py (uses install_requires to avoid conflicting pins) +COPY setup.py README.md MANIFEST.in /app/ +RUN pip install --no-cache-dir . + +# Copy project sources (we run as a module; this allows local changes via volume) +COPY . /app + +# Default entrypoint runs the CLI as a module; user can pass CLI args to docker run +ENTRYPOINT ["python", "-m", "subsurfer"] +CMD ["--help"] diff --git a/requirements.txt b/requirements.txt index e1f3787..da1fe08 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ propcache==0.2.1 Pygments==2.18.0 pytest==8.3.4 pytest-asyncio==0.25.0 -python-Wappalyzer==0.3.1 +python-Wappalyzer @ git+https://github.com/mirusu400/python-Wappalyzer PyYAML==6.0.2 requests==2.32.5 rich==13.9.4 diff --git a/setup.py b/setup.py index b862de6..f6cde6f 100644 --- a/setup.py +++ b/setup.py @@ -4,50 +4,50 @@ name="subsurfer", version="1.2.6", description="Red Teaming and Web Bug Bounty Fast Asset Identification Tool", - long_description=open('README.md').read(), + long_description=open("README.md").read(), long_description_content_type="text/markdown", author="arrester", author_email="arresterloyal@gmail.com", url="https://github.com/arrester/subsurfer", - packages=find_namespace_packages(include=['subsurfer*']), + packages=find_namespace_packages(include=["subsurfer*"]), package_data={ - 'subsurfer': ['core/config/*.yaml', 'core/handler/takeover/*.json'], + "subsurfer": ["core/config/*.yaml", "core/handler/takeover/*.json"], }, include_package_data=True, install_requires=[ - 'rich>=13.7.0', - 'aiohttp>=3.9.1', - 'beautifulsoup4>=4.12.2', - 'dnspython>=2.4.2', - 'aiodns>=3.0.0', - 'pyyaml>=6.0.1', - 'asyncio>=3.4.3', - 'pytest>=7.4.3', - 'pytest-asyncio>=0.23.2', - 'python-Wappalyzer>=0.3.1', - 'setuptools>=78.1.1' + "rich>=13.7.0", + "aiohttp>=3.9.1", + "beautifulsoup4>=4.12.2", + "dnspython>=2.4.2", + "aiodns>=3.0.0", + "pyyaml>=6.0.1", + "asyncio>=3.4.3", + "pytest>=7.4.3", + "pytest-asyncio>=0.23.2", + "python-Wappalyzer @ git+https://github.com/mirusu400/python-Wappalyzer", + "setuptools>=78.1.1", ], entry_points={ - 'console_scripts': [ - 'subsurfer=subsurfer.__main__:run_main', + "console_scripts": [ + "subsurfer=subsurfer.__main__:run_main", ], }, - python_requires='>=3.9', + python_requires=">=3.9", classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Information Technology', - 'Intended Audience :: System Administrators', - 'Topic :: Security', - 'Topic :: Internet :: WWW/HTTP', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.13', - 'Operating System :: OS Independent', + "Development Status :: 3 - Alpha", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Topic :: Security", + "Topic :: Internet :: WWW/HTTP", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.13", + "Operating System :: OS Independent", ], - keywords='security, subdomain enumeration, bug bounty, red team, web security', + keywords="security, subdomain enumeration, bug bounty, red team, web security", project_urls={ - 'Bug Reports': 'https://github.com/arrester/subsurfer/issues', - 'Source': 'https://github.com/arrester/subsurfer', - 'Documentation': 'https://github.com/arrester/subsurfer#readme', + "Bug Reports": "https://github.com/arrester/subsurfer/issues", + "Source": "https://github.com/arrester/subsurfer", + "Documentation": "https://github.com/arrester/subsurfer#readme", }, -) \ No newline at end of file +)