-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
120 lines (93 loc) · 4.15 KB
/
main.py
File metadata and controls
120 lines (93 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python3
"""
python-security-toolkit
A lightweight network reconnaissance & security auditing tool.
Usage:
python main.py scan <target> [options]
python main.py dns <domain>
python main.py audit <url>
python main.py help
"""
import argparse
import sys
from scanner import scan, print_results
from osint import resolve_dns, print_header_audit
from utils import color, validate_ip, parse_ports
BANNER = r"""
____ ____ ____ _____ __ __ _____ _ _ _ _
| _ \/ ___|| _ \_ _| \/ | |_ _|__ ___ | | | _(_) |_
| |_) \___ \| | | || | | |\/| | | |/ _ \ / _ \| | |/ / | __|
| __/ ___) | |_| || | | | | | | | (_) | (_) | | <| | |_
|_| |____/|____/ |_| |_| |_| |_|\___/ \___/|_|_|\_\_|\__|
python-security-toolkit | github.com/DomainWarrior
Use responsibly. Only scan systems you own or have permission to test.
"""
def cmd_scan(args) -> None:
if not validate_ip(args.target):
print(color("red") + f"Invalid target: {args.target}" + color("reset"))
sys.exit(1)
lo, hi = parse_ports(args.ports)
if lo < 1 or hi > 65535 or lo > hi:
print(color("red") + "Port range must be between 1-65535." + color("reset"))
sys.exit(1)
print(color("cyan") + f"\n[*] Scanning {args.target} ports {lo}-{hi} ..." + color("reset"))
try:
data = scan(args.target, (lo, hi), grab_banners=args.banners)
print_results(data, verbose=args.verbose)
except ValueError as e:
print(color("red") + str(e) + color("reset"))
sys.exit(1)
def cmd_dns(args) -> None:
bld = color("bold")
grn = color("green")
cyn = color("cyan")
rst = color("reset")
print(f"\n{bld}DNS Enumeration — {args.domain}{rst}")
print("─" * 50)
data = resolve_dns(args.domain)
if "error" in data:
print(color("red") + f"Error: {data['error']}" + rst)
sys.exit(1)
for ip in data["ipv4"]:
rev = data["reverse"].get(ip, "")
print(f" {grn}A {rst} {ip:<20} {cyn}{rev}{rst}")
for ip in data["ipv6"]:
rev = data["reverse"].get(ip, "")
print(f" {grn}AAAA{rst} {ip:<40} {cyn}{rev}{rst}")
print()
def cmd_audit(args) -> None:
print_header_audit(args.url)
def main() -> None:
print(color("green") + BANNER + color("reset"))
parser = argparse.ArgumentParser(
prog="security-toolkit",
description="Lightweight network recon & security audit toolkit",
formatter_class=argparse.RawDescriptionHelpFormatter,
)
sub = parser.add_subparsers(dest="command", metavar="<command>")
# ── scan ────────────────────────────────────────────────
p_scan = sub.add_parser("scan", help="Scan open ports on a target")
p_scan.add_argument("target", help="IP address or hostname")
p_scan.add_argument("-p", "--ports", default="common",
help="Port range: '80', '1-1024', 'common', 'full' (default: common)")
p_scan.add_argument("-b", "--banners", action="store_true",
help="Attempt banner grabbing on open ports")
p_scan.add_argument("-v", "--verbose", action="store_true",
help="Show banners in output table")
# ── dns ─────────────────────────────────────────────────
p_dns = sub.add_parser("dns", help="DNS enumeration for a domain")
p_dns.add_argument("domain", help="Domain to enumerate")
# ── audit ───────────────────────────────────────────────
p_audit = sub.add_parser("audit", help="HTTP security header audit")
p_audit.add_argument("url", help="URL to audit (e.g. https://example.com)")
args = parser.parse_args()
if args.command == "scan":
cmd_scan(args)
elif args.command == "dns":
cmd_dns(args)
elif args.command == "audit":
cmd_audit(args)
else:
parser.print_help()
if __name__ == "__main__":
main()