Всем ку. Мне 16 лет, интересуюсь и увлекаюсь программированием. Очень понравился язык Python.
Написал программу, которая осуществляет проверку портов, выставляю ее на оценку.
Очень прекрасно понимаю, что она ужасная, но всё же хочу услышать мнение более опытных людей, в этом деле.
Перед ее использованием , необходимо установить модули:
termcolor
threading
import time
import sys
from termcolor import colored
import threading
import socket
# создание красивого меню (вверх)
def animate_menu_up():
# объвяляю глобальную переменную в функции
global flag
# особождение строки
print("\n")
# переменная symbol будет содержать символ применяемый в анимации
symbol = '~'
# переменная string будет содержать результат анимации
string = ""
# анимация в цикле
while len(string) <= 50:
string += symbol
sys.stdout.write(f"\r{string}")
time.sleep(0.01)
# освобождение места для следующей анимации
print("", flush=True)
flag = 1
# создание анимации центрального меню
def animate_menu_center():
# объвяляю глобальную переменную в функции
global flag
# настройки для анимации
string_first = list("[1] scan all ports")
string_second = list("[2] scan enter port")
string_three = list("SCANNER V1.0")
# результат
string_result_one = ""
string_result_two = ""
string_result_three = ""
# анимация названия
while len(string_result_three) != len(string_three):
for char in string_three:
string_result_three += char
sys.stdout.write(f"\r\t\t{string_result_three}")
time.sleep(0.04)
# выделение места под другую строку
print("\n")
# сама анимация
while len(string_result_one) != len(string_first):
for char in string_first:
string_result_one += char
sys.stdout.write(f"\r\t{string_result_one}")
time.sleep(0.04)
# выделение места под другую строку
print("")
# анимация второй строки
while len(string_result_two) != len(string_second):
for char in string_second:
string_result_two += char
sys.stdout.write(f"\r\t{string_result_two}")
time.sleep(0.04)
# принудительно ощичаем поток
sys.stdout.flush()
print("", flush=True)
flag = 2
# создание анимации меню (низ)
def animate_menu_down():
# объвяляю глобальную переменную в функции
global flag
# тоже самое, что и в animate_menu_up
symbol = '~'
# тоже самое, что и в animate_menu_up
string = ""
# тоже самое, что и в animate_menu_up
while len(string) <= 50:
string += symbol
sys.stdout.write(f"\r{string}")
time.sleep(0.01)
# принудительно очищаем поток
sys.stdout.flush()
print("")
flag = 3
# функция, которая будет проверять выбранный режим
# и что-то делать
def select_mode():
# переменная, которая будет содержать выбранный режим
answer = input("\n[scan] Select mode: ")
# переменная, которая будет содержать хост, для проверки портов
hostname = input("[scan] Enter hostname: ")
if answer == "1":
# если режим проверки всех популярных портов
# создается список с известными портами
ports = [22, 80, 7777, 2516]
print("")
while True:
for port in ports:
# создаю объект сокета, который в будущем будет помогать проверять порты
sock = socket.socket()
try:
sock.settimeout(0.5)
sock.connect((hostname, port))
except socket.error as socketerror:
print(colored(f"[!] ", "red") + str(port) + " --CLOSE")
else:
print(colored(f"[#] ", "green") + str(port) + " --OPEN")
break
# переменная, которая содержит выбранный режим
answer = ""
# переменная - флаг, нужна чтобы контролировать выполнение потоков
flag = 0
# создание объекта Thread
th_one = threading.Thread(target=animate_menu_up)
th_two = threading.Thread(target=animate_menu_down)
th_three = threading.Thread(target=animate_menu_center)
# запуск потоков
th_one.start()
while True:
try:
if flag == 1:
th_three.start()
elif flag == 2:
th_two.start()
elif flag == 3:
select_mode()
except RuntimeError:
continue
#th_two.start()
ссылка на файл (на всякий) -
https://disk.yandex.ru/d/Mq8d9johP45W0g