-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathportScanner_Web.py
More file actions
119 lines (98 loc) · 3.67 KB
/
portScanner_Web.py
File metadata and controls
119 lines (98 loc) · 3.67 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
import socket
import time
import os
from colorama import Fore, Style, init
from flask import Flask, render_template_string, request
init(autoreset=True)
app = Flask(__name__)
HTML_TEMPLATE = """
<!DOCTYPE html>
<html>
<head>
<title>Port Scanner by Eshwar</title>
<style>
body { font-family: monospace; background: #0d1117; color:green; padding: 20px; }
h1 { color: green; }
input, button { padding: 8px; margin: 5px; border-radius: 5px; }
.open { color: green; }
.closed { color: green; }
.summary { color: green; }
</style>
</head>
<body>
<h1>Port Scanner by Eshwar</h1>
<form method="POST">
<label>Enter Target IP:</label>
<input type="text" name="target_ip" placeholder="192.168.100.1" required>
<button type="submit">Scan</button>
</form>
{% if results %}
<h2>Results for {{ target_ip }}</h2>
<pre>
{% for port, service, version in results %}
Port {{ port }}: <span class="open">OPEN</span> | Service: {{ service }} | Version: {{ version }}
{% endfor %}
</pre>
<p class="summary">Total open ports: {{ results|length }}</p>
{% endif %}
</body>
</html>
"""
def ascii_banner():
os.system("clear")
animation = [
Fore.CYAN + r" ____ _ ____ ",
Fore.CYAN + r" | _ \ ___ ___ | |_ ___ _ __ / ___| ___ __ _ _ __ _ __ ___ _ __ ",
Fore.CYAN + r" | |_) / _ \ / _ \| __/ _ \ '__| | _ / __/ _` | '_ \| '_ \ / _ \ '__|",
Fore.CYAN + r" | __/ (_) | (_) | || __/ | | |_| | (_| (_| | | | | | | | __/ | ",
Fore.CYAN + r" |_| \___/ \___/ \__\___|_| \____| \___\__,_|_| |_|_| |_|\___|_| ",
r" ",
Fore.YELLOW + r"-------------------- Port Scanner by Eshwar --------------------------"
]
for line in animation:
print(line)
time.sleep(0.05)
print("\n")
def port_scanner(target_ip):
open_ports = []
for port in range(1, 1025):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.5)
result = sock.connect_ex((target_ip, port))
if result == 0:
service = "Unknown"
version = "Unknown"
try:
service = socket.getservbyport(port)
except:
pass
try:
sock.sendall(b"HEAD / HTTP/1.0\r\n\r\n")
banner = sock.recv(1024).decode(errors="ignore").strip()
if banner:
version = banner.split("\n")[0]
except:
pass
open_ports.append((port, service, version))
sock.close()
return open_ports
@app.route("/", methods=["GET", "POST"])
def index():
results = None
target_ip = None
if request.method == "POST":
target_ip = request.form["target_ip"]
results = port_scanner(target_ip)
return render_template_string(HTML_TEMPLATE, results=results, target_ip=target_ip)
if __name__ == "__main__":
mode = input(Fore.GREEN +"Choose One: \n 1. Terminal \n " " \n 2. Web UI \n "" \n Enter Option : ")
if mode == "1":
ascii_banner()
target = input(Fore.BLUE + "Enter target IP address: ")
results = port_scanner(target)
print(Fore.GREEN + f"\nTotal open ports found: {len(results)}")
for port, service, version in results:
print(Fore.GREEN + f"Port {port} -> {service} ({version})")
else:
print(Fore.CYAN + "[*] Starting Web UI at http://127.0.0.1:5000/")
app.run(host="0.0.0.0", port=5000, debug=False)