68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
import os
|
|
import socket
|
|
import nmap
|
|
import requests
|
|
from datetime import datetime
|
|
|
|
requests.packages.urllib3.disable_warnings()
|
|
os.environ['PYTHONHTTPSVERIFY'] = '0'
|
|
|
|
DEFAULT_NETWORKS = "192.168.85.0/24,192.168.86.0/24"
|
|
|
|
|
|
def load_networks():
|
|
networks = os.getenv("SCAN_NETWORKS", DEFAULT_NETWORKS)
|
|
return [network.strip() for network in networks.split(",") if network.strip()]
|
|
|
|
|
|
def scan_network(network):
|
|
print(f"Scanning network: {network}")
|
|
nm = nmap.PortScanner()
|
|
nm.scan(hosts=network, arguments='-p 1-32768 -T4 --host-timeout 2m')
|
|
host_results = []
|
|
|
|
for host in nm.all_hosts():
|
|
status = nm[host]["status"]["state"]
|
|
ports = []
|
|
if 'tcp' in nm[host]:
|
|
ports = [
|
|
port for port, info in nm[host]['tcp'].items()
|
|
if info['state'] == 'open'
|
|
]
|
|
host_results.append((host, status, ports))
|
|
print(f"Host: {host}, Status: {status}, Open ports: {' '.join(str(port) for port in ports)}")
|
|
|
|
return host_results
|
|
|
|
|
|
def write_output(hosts, output_path):
|
|
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
|
header = f"# network.txt generated on {datetime.utcnow().isoformat()}Z\n"
|
|
|
|
with open(output_path, 'w', encoding='utf-8') as output_file:
|
|
output_file.write(header)
|
|
output_file.write("# host status open_ports\n")
|
|
for host, status, ports in hosts:
|
|
ports_text = ' '.join(str(port) for port in ports)
|
|
output_file.write(f"{host} {status} {ports_text}\n")
|
|
|
|
print(f"Scan saved to {output_path}")
|
|
|
|
|
|
def main():
|
|
networks = load_networks()
|
|
all_hosts = []
|
|
|
|
for network in networks:
|
|
try:
|
|
all_hosts.extend(scan_network(network))
|
|
except Exception as exc:
|
|
print(f"Failed to scan {network}: {exc}")
|
|
|
|
output_path = os.getenv("OUTPUT_PATH", "/app/output/network.txt")
|
|
write_output(all_hosts, output_path)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|