Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2007 14:12:50

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Сканер портов на Python

Вот решил написать простой сканер портов. Просто ради интереса (в плане безопасности). Но возникли проблемы.
Вот сам код:

# -*- coding: cp1251 -*-
import socket

HOST = “www.anyhost.com.ua” # удаленный компьютер

# создаем список портов
ports = [21, 22, 23, 25, 38, 43, 80, 109, 110, 115, 118, 119, 143,
194, 220, 443, 540, 585, 591, 1112, 1433, 1443, 3128, 3197,
3306, 4000, 4333, 5100, 5432, 6669, 8000, 8080, 9014, 9200]

for i in ports:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((HOST, i)) # соединяемся к порту, i - port
except:
continue # если порт закрыт, то переходим к следующему
result = sock.recv(1024) # очередная порция байтов
print “Получено:”, i, “порт: ”, result
sock.close()


Сначало все идет по плану. То есть, соединяемся с определенным портом, если нет коннекта, то переходим на следующий порт. Вот в этом вся проблема, когда цикл доходит то того порта, который закрыт - сканер, просто молчит, ничего не выводит о полученой информации о порте.
Пишет вроде вот этого:

Получено: 21 порт 220 web.anyhost.com.ua FTP server (Version 6.00LS) ready.

Получено: 22 порт SSH-2.0-OpenSSH_3.8.1p1 FreeBSD-20040419

Получено: 25 порт 220 mail.anyhost.com.ua ESMTP Postfix

| #вот тут молчит...
Помогите разобраться. Спасибо.



Офлайн

#2 Сен. 10, 2007 15:05:41

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Сканер портов на Python

попробуй задать sock.settimeout(TIMEOUT)

Офлайн

#3 Сен. 10, 2007 16:12:17

zero_mod
От:
Зарегистрирован: 2007-09-07
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Сканер портов на Python

Все нормально. Установил settimeout(1). Только вот, когда доходит до 80 порта, пишет:

Traceback (most recent call last):
File "E:\PHP_MySQL_Apache\Python25\Projects\Scaner.py", line 31, in <module>
result = sock.recv(1024)
timeout: timed out



Офлайн

#4 Сен. 10, 2007 17:50:23

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Сканер портов на Python

ну да. для HTTP нужно протокол соблюдать =)
но то что порт открыт - ты уже знаешь.
а чтоб не вылетал с ошибкой - можно тоже обернуть:
try:
result = sock.recv(1024) # очередная порция байтов
except Exception, er:
print er



Офлайн

#5 Сен. 11, 2007 10:10:36

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Сканер портов на Python

В документации по питону несколько иначе обрабатывают эксепшины (т.е. не все):

try:
buf = sock.recv(MSG_HEADER_SIZE-received)
except socket.error, msg:
if self.__verbose: print msg
else:

Смысл и результат будет тот-же, но мне так красивее, ИМХО
Да, и можно вместо settimeout(1) использовать значение поменьше, т.к. эта величина там в секундах, чтоб долго не ждать в некоторых случаях



Отредактировано (Сен. 11, 2007 10:11:22)

Офлайн

#6 Март 31, 2010 02:01:43

senkler
От:
Зарегистрирован: 2010-03-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Сканер портов на Python

доброй ночи,подскажите в чем может быть проблема
пишет
SyntaxError: invalid syntax(line 57, offset 22): ‘except socket.error, e:’
пишу на python3.1

try:
self.connect((s, p))
except socket.error, e:
reason = utils.socket_error(e)
Хотя бы в каком направлении копать.



Отредактировано (Март 31, 2010 02:07:11)

Офлайн

#7 Март 31, 2010 05:36:10

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Сканер портов на Python

senkler
пишу на python3.1
Если уж взяли третий питон, так пишите на третем питоне:
try:
self.connect((s, p))
except socket.error as e:
reason = utils.socket_error(e)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Март 31, 2010 07:02:16

senkler
От:
Зарегистрирован: 2010-03-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Сканер портов на Python

PooH
Если уж взяли третий питон, так пишите на третем питоне:
Спасибо.



Офлайн

#9 Сен. 9, 2012 22:41:42

rtt
Зарегистрирован: 2012-09-01
Сообщения: 8
Репутация: +  0  -
Профиль  

Сканер портов на Python

а что такое AF_INET и SOCK_STREAM ?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version