Prerequisites
# Python 3.8+ required
python3 --version
# Install dependencies
pip install requests paramiko dnspython coloramaScript 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.