Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2010 07:19:08

LeFruit
От:
Зарегистрирован: 2010-12-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Зацикливается программа

Доброе утро! Не могу понять, почему зацикливается программа (Python 2.7, Windows 7 64-bit):

import threading,sys
from socket import *

class MyThread(threading.Thread):
def __init__(self, func, ip, port):
threading.Thread.__init__(self)
self.func = func
self.ip = ip
self.port = port
def run(self):
apply(self.func,(self.ip, self.port))

def Scan(ip,port):
sk = socket(AF_INET, SOCK_STREAM)
sk.connect((ip, port))
if getservbyport(port) != '' : print "[*] OPEN :",port," :: ",getservbyport(port)
sk.close()

def s():
print '\nStart'
for i in range(start,(end+1)):
MyThread(Scan,host,i).start()


host = sys.argv[1]
start = int(sys.argv[2])
end = int(sys.argv[3])
s()



Офлайн

#2 Дек. 13, 2010 08:19:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Зацикливается программа

А как вы увидели, что она “зацикливается”?
sk.connect при неудаче бросает исключение, не мешало бы его обрабатывать.



Офлайн

#3 Дек. 13, 2010 08:35:28

LeFruit
От:
Зарегистрирован: 2010-12-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Зацикливается программа

Это моё предположение, и возможно оно ошибочное.

def Scan(ip,port):
try:
sk = socket(AF_INET, SOCK_STREAM)
sk.connect((ip, port))
if getservbyport(port) != '' : print "[*] OPEN :",port," :: ",getservbyport(port)
sk.close()
except:pass
Добавил обработку исключений, результат остался прежний.



Офлайн

#4 Дек. 13, 2010 08:46:59

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Зацикливается программа

Не поверите - но у меня работает!



Офлайн

#5 Дек. 13, 2010 08:50:05

LeFruit
От:
Зарегистрирован: 2010-12-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Зацикливается программа

И корректно выходит обратно в командную строку? У меня она тоже находит открытые порты, но после этого продолжает работать, приходится завершать через Crtl+Break.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version