From 53a99b78bec1e03fff9f4cc058f4c1461b070da4 Mon Sep 17 00:00:00 2001 From: nkowenski Date: Wed, 8 Jan 2025 18:54:46 +0100 Subject: [PATCH 1/2] make networks comfigurable for zmap --- docker-compose.yml | 1 + rigour/common/common/config.py | 8 ++++++++ rigour/ports/main.py | 8 +++++--- rigour/ports/zmap.py | 4 +++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index adbed3e..3af29e4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: network_mode: "host" environment: PORTS: "80,443,22,21,25565,27017,143,6379" + NETWORKS: "10.0.0.0/8 192.168.0.0/16" depends_on: rabbitmq: condition: service_healthy diff --git a/rigour/common/common/config.py b/rigour/common/common/config.py index 1104edf..e779e8c 100644 --- a/rigour/common/common/config.py +++ b/rigour/common/common/config.py @@ -14,6 +14,14 @@ def get_mongo_db(default: str = "rigour") -> str: def get_rabbitmq_uri(default: str = "amqp://localhost:5672/") -> str: return os.environ.get("RABBITMQ_URL", default) + @staticmethod + def get_networks(default: str = "10.0.0.0/8") -> str: + return os.environ.get("NETWORKS", default) + + @staticmethod + def get_ports(default: str = "80") -> str: + return os.environ.get("PORTS", default) + @staticmethod def get_scan_collection() -> str: return "scans" diff --git a/rigour/ports/main.py b/rigour/ports/main.py index 67b188c..0318f0f 100644 --- a/rigour/ports/main.py +++ b/rigour/ports/main.py @@ -9,6 +9,7 @@ from common.database.mongodb import Database from common.queue.rabbitmq_asyncio import AsyncRabbitMQQueueManager from common.types import Host, HostMessage, Location +from common.config import Config from loguru import logger from zmap import ZMap, ZMapCommand, ZMapResult @@ -46,8 +47,9 @@ def main(): db = Database() queue = AsyncRabbitMQQueueManager() reader = geoip2.database.Reader("geolite2-city.mmdb") - ports = os.getenv("PORTS", "80") - + ports = Config.get_ports() + networks = Config.get_networks() + logger.info(f"Starting port scanner for port/s: {ports}") async def callback(result: ZMapResult) -> None: @@ -60,7 +62,7 @@ async def callback(result: ZMapResult) -> None: await queue.publish(route_key, asdict(host)) save(db, host) - command = ZMapCommand(ports) + command = ZMapCommand(ports,networks) zmap = ZMap(command) loop = asyncio.get_event_loop() loop.run_until_complete(zmap.run(callback)) diff --git a/rigour/ports/zmap.py b/rigour/ports/zmap.py index b36d32f..38aed9c 100644 --- a/rigour/ports/zmap.py +++ b/rigour/ports/zmap.py @@ -4,8 +4,9 @@ class ZMapCommand: - def __init__(self, ports: str): + def __init__(self, ports: str, networks: str): self.ports = ports + self.networks = networks def build(self): return [ @@ -16,6 +17,7 @@ def build(self): "--quiet", # Suppress status updates "--rate=200", # Send 100 packets per second '--output-filter="success = 1"', # Filter successful results + self.networks ] From 9bfc8ffd42e3006fe8c812af0b4b7070d4382f1d Mon Sep 17 00:00:00 2001 From: nkowenski Date: Mon, 13 Jan 2025 09:59:34 +0100 Subject: [PATCH 2/2] pre-commit formatting --- rigour/ports/main.py | 7 +++---- rigour/ports/zmap.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/rigour/ports/main.py b/rigour/ports/main.py index 0318f0f..e62a36a 100644 --- a/rigour/ports/main.py +++ b/rigour/ports/main.py @@ -1,15 +1,14 @@ import asyncio -import os from dataclasses import asdict from datetime import datetime import geoip2.database import geoip2.errors from common import utils +from common.config import Config from common.database.mongodb import Database from common.queue.rabbitmq_asyncio import AsyncRabbitMQQueueManager from common.types import Host, HostMessage, Location -from common.config import Config from loguru import logger from zmap import ZMap, ZMapCommand, ZMapResult @@ -49,7 +48,7 @@ def main(): reader = geoip2.database.Reader("geolite2-city.mmdb") ports = Config.get_ports() networks = Config.get_networks() - + logger.info(f"Starting port scanner for port/s: {ports}") async def callback(result: ZMapResult) -> None: @@ -62,7 +61,7 @@ async def callback(result: ZMapResult) -> None: await queue.publish(route_key, asdict(host)) save(db, host) - command = ZMapCommand(ports,networks) + command = ZMapCommand(ports, networks) zmap = ZMap(command) loop = asyncio.get_event_loop() loop.run_until_complete(zmap.run(callback)) diff --git a/rigour/ports/zmap.py b/rigour/ports/zmap.py index 38aed9c..ddfcaea 100644 --- a/rigour/ports/zmap.py +++ b/rigour/ports/zmap.py @@ -17,7 +17,7 @@ def build(self): "--quiet", # Suppress status updates "--rate=200", # Send 100 packets per second '--output-filter="success = 1"', # Filter successful results - self.networks + self.networks, ]