Найти - Пользователи
Полная версия: Сканер портов на Python
Начало » Network » Сканер портов на Python
1
zero_mod
Вот решил написать простой сканер портов. Просто ради интереса (в плане безопасности). Но возникли проблемы.
Вот сам код:

# -*- 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

| #вот тут молчит...
Помогите разобраться. Спасибо.
slav0nic
попробуй задать sock.settimeout(TIMEOUT)
zero_mod
Все нормально. Установил 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
shiza
ну да. для HTTP нужно протокол соблюдать =)
но то что порт открыт - ты уже знаешь.
а чтоб не вылетал с ошибкой - можно тоже обернуть:
try:
result = sock.recv(1024) # очередная порция байтов
except Exception, er:
print er
poltergeist
В документации по питону несколько иначе обрабатывают эксепшины (т.е. не все):

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

Смысл и результат будет тот-же, но мне так красивее, ИМХО
Да, и можно вместо settimeout(1) использовать значение поменьше, т.к. эта величина там в секундах, чтоб долго не ждать в некоторых случаях
senkler
доброй ночи,подскажите в чем может быть проблема
пишет
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)
Хотя бы в каком направлении копать.
PooH
senkler
пишу на python3.1
Если уж взяли третий питон, так пишите на третем питоне:
try:
self.connect((s, p))
except socket.error as e:
reason = utils.socket_error(e)
senkler
PooH
Если уж взяли третий питон, так пишите на третем питоне:
Спасибо.
rtt
а что такое AF_INET и SOCK_STREAM ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB