Skip to content

Instantly share code, notes, and snippets.

@lasteminista
Created May 9, 2022 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lasteminista/cce7e511abe5f0efa206ac7d18c3d273 to your computer and use it in GitHub Desktop.
Save lasteminista/cce7e511abe5f0efa206ac7d18c3d273 to your computer and use it in GitHub Desktop.
Port Scanner Code Snippet 5
import tkinter as tk
from tkinter import ttk, font, scrolledtext
from ctypes import windll
class App(tk.Tk):
def __init__(self):
super().__init__()
# Default : common ports
self.common_ports = [20, 21, 22, 23, 25, 53, 80, 110, 443]
# Configure the Root Window
self.title("My Port Scanner")
self.geometry("820x550")
self.resizable(0, 0)
# Set default Font
self.def_font = tk.font.nametofont("TkDefaultFont")
self.def_font.config(family="Segoe Script", size=13, weight=font.BOLD)
# Port Scanner title
ttk.Label(self, text="My Port Scanner", font=("Segoe Script", 17, "bold")) \
.grid(column=0, row=0, columnspan=4)
# Label Hostname
ttk.Label(self, text="Enter your target : ").grid(column=0, row=1)
# Entry Hostname
self.hostname = ttk.Entry(self, font="TkDefaultFont")
self.hostname.insert(tk.END, 'localhost')
self.hostname.grid(column=1, row=1, sticky=tk.EW, columnspan=3)
# Get ports : common, list or range
self.option_port_common = ttk.Radiobutton(self, text="Common Ports", value=1)
self.option_port_common.grid(column=0, row=2, sticky=tk.W)
self.option_port_list = ttk.Radiobutton(self, text="Ports List", value=2)
self.option_port_list.grid(column=0, row=3, sticky=tk.W)
self.option_port_range = ttk.Radiobutton(self, text="Ports Range", value=3)
self.option_port_range.grid(column=0, row=4, sticky=tk.W)
# Port entries
self.port_common_entry = ttk.Entry(self, font="TkDefaultFont")
self.port_common_entry.insert(0, str(self.common_ports)[1:-1])
self.port_common_entry.config(state='readonly')
self.port_common_entry.grid(column=1, row=2, sticky=tk.EW, columnspan=3)
self.port_list_entry = ttk.Entry(self, font="TkDefaultFont")
self.port_list_entry.config(state='disabled')
self.port_list_entry.grid(column=1, row=3, sticky=tk.EW, columnspan=3)
self.port_range_entry_1 = ttk.Entry(self, font="TkDefaultFont")
self.port_range_entry_1.grid(column=1, row=4, sticky=tk.W)
self.port_range_entry_1.config(state='disabled')
ttk.Label(self, text="-").grid(column=2, row=4, sticky=tk.W)
self.port_range_entry_2 = ttk.Entry(self, font="TkDefaultFont")
self.port_range_entry_2.config(state='disabled')
self.port_range_entry_2.grid(column=3, row=4, sticky=tk.W)
# Port Options
self.port_entries = [self.port_common_entry,
self.port_list_entry,
self.port_range_entry_1, self.port_range_entry_2]
# Scan Button
scan_button = ttk.Button(self, text="Scan Target")
scan_button.grid(column=1, row=5, columnspan=3, sticky=tk.EW)
# Results Label
ttk.Label(self, text="Results : ").grid(column=0, row=7, sticky=tk.EW)
# Results Area
self.results_area = scrolledtext.ScrolledText(self, width=30, height=5, font="TkDefaultFont")
self.results_area.grid(column=1, row=7, columnspan=3, pady=10, padx=10, sticky=tk.EW)
self.results_area.config(state='disabled')
# Save Results Button
self.save_button = ttk.Button(self, text="Save Results")
self.save_button.grid(column=1, row=9, columnspan=3, sticky=tk.EW)
self.save_button.config(state='disabled')
# Set default padding for all widgets
for widget in self.winfo_children():
if widget.grid_info()['column'] == 0:
widget.grid(padx=25)
widget.grid(pady=5)
if __name__ == "__main__":
app = App()
windll.shcore.SetProcessDpiAwareness(1)
app.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment