Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
| Помогли мы вам |
официальной документации.
Запомним время запуска программы — в дальнейшем это пригодится, чтобы узнать время сканирования.
start = datetime.now()Хранить пары из портов и названий сервисов будем прямо в коде. При желании можешь проапгрейдить этот метод, например до файлов JSON.
ports = { 20: "FTP-DATA", 21: "FTP", 22: "SSH", 23: "Telnet", 25: "SMTP", 43: "WHOIS", 53: "DNS", 80: "http", 115: "SFTP", 123: "NTP", 143: "IMAP", 161: "SNMP", 179: "BGP", 443: "HTTPS", 445: "MICROSOFT-DS", 514: "SYSLOG", 515: "PRINTER", 993: "IMAPS", 995: "POP3S", 1080: "SOCKS", 1194: "OpenVPN", 1433: "SQL Server", 1723: "PPTP", 3128: "HTTP", 3268: "LDAP", 3306: "MySQL", 3389: "RDP", 5432: "PostgreSQL", 5900: "VNC", 8080: "Tomcat", 10000: "Webmin" }Преобразуем переданный аргумент в IP-адрес. Для этого скормим первый аргумент командной строки нашего сканера функции socket. — бонусом получим разрешение DNS, если передано доменное имя, а не IP-адрес.
host_name = sys.argv[1]ip = socket.gethostbyname(host_name)Теперь в цикле обойдем все порты из списка и проверим возможность подключения к ним. Если порт закрыт, будет вызываться исключение, которое мы перехватим, и программа не вылетит.
В конце работы сохраняем время окончания и выводим на экран длительность сканирования.
ends = datetime.now()print("<Time:{}>".format(ends - start))input("Press Enter to the exit....")for port in ports: cont = socket.socket() cont.settimeout(1) try:cont.connect((ip, port)) except socket.error:pass else:print(f"{socket.gethostbyname(ip)}:{str(port)}is open/{ports[port]}")cont.close()Теперь, чтобы протестировать работу нашего сканера, откроем терминал, перейдем в папку со сканером и выполним команду
python.exe socket.py 45.33.32.156Если ты работаешь на Linux, используй команду python3, чтобы случайно не нарваться на устаревший Python.
Само собой, вместо IP в примере можно указать любой хост.
Давай посмотрим, как это выглядит со стороны сервера. Для этого воспользуемся старичком Netcat. Скачай его и запусти следующим образом:
ncat.exe -lnvp 123Netcat может понадобиться внести в белый список антивируса или согласовать установку с корпоративной службой безопасности. Netcat часто используют хакеры, чтобы поднять шеллы в скомпрометированных системах, так что ругань антивируса вполне оправданна.
В соседнем терминале запускаем наш сканер изучать наш собственный IP-адрес. Посмотреть его можно в выводе команды ipconfig /. В результате в окне с Netcat произойдет следующее.
Реакция Netcat на сканирование
На скриншоте видно, что было установлено полноценное соединение, и, конечно, в реальности любая программа тоже это увидит, то есть незаметно просканировать кого‑то таким образом не получится.
Также давай теперь просканируем сервер scanme. (именно его IP был в первом примере). Результаты будут выглядеть примерно так:
Address: 45.33.32.15645.33.32.156:22 is open/SSH45.33.32.156:80 is open/httpСканер нашел два открытых порта — 22 и 80. Но если просканировать этот же хост при помощи Nmap, увидим, что открытых портов намного больше.
Nmap scan report for scanme.nmap.org (45.33.32.156)Host is up (0.22s latency).Not shown: 994 closed portsPORTSTATE SERVICE22/tcp open ssh80/tcp open http1720/tcp open h323q9315060/tcp open sip9929/tcp open nping-echo31337/tcp open EliteNmap done: 1 IP address (1 host up) scanned in 5.02 secondsПочему так? Nmap проходит по значительно большему списку портов, чем наш сканер, и, соответственно, видит больше. Если мы добавим эти порты в наш сканер, он тоже их найдет.
Понятно, что такой сканер вряд ли применим в реальных условиях, кроме совсем уж экзотических: например, когда сканировать надо с машины, на которую невозможно доставить полноценный сканер, но на которой уже есть Python.
Давай лучше попробуем сделать сканер, который не станет так палиться и работать будет куда быстрее.
|
|
|