Найти - Пользователи
Полная версия: Создание таймера для прерывания итерации в основном потоке
Начало » Центр помощи » Создание таймера для прерывания итерации в основном потоке
1 2 3
vic57
 ты ничего не перепутал? только что пробовал, все выполнилось за 3 сек
 #!/usr/bin/env python
import sys
import gevent
from gevent import socket
found = []
def ip2url(ip):
    try:
        url = socket.gethostbyaddr(ip)
        found.append([ip,url[0]])
    except:
        pass
        
addrs = ['87.250.250.%s' % i for i in range(1,255)]  
for addr in addrs:
    gevent.spawn(ip2url,addr).join(timeout=0.1)
for i in found:print i
sys.exit()
 вообще у меня макось, за винду не скажу
UrfinJuice
vic57, в рабочей сети вроде нормально работает. В виртуалке все-равно 100% результата я так и не добился, но мне это и не так важно. Я правильно понимаю: последний скрипт порождает 254 микропотока, они выполняются последовательно и если каждый из них не успевает за 0.1сек, то выполняется следующий? Метод .join() стоит внутри цикла, а не снаружи, поэтому никакого миниDDOSа не будет, верно?
vic57
ты правильно понимаешь. создается один гринлет с таймаутом 0.1 сек. оптимально я думаю так:
 #!/usr/bin/env python
import sys
import gevent
from gevent import socket
from gevent.pool import Pool
from time import time
def ip2url(ip):
    try:
        url = socket.gethostbyaddr(ip)
        found.append(ip +' : '+ url[0])
    except:
        pass
    
if __name__=="__main__":
    #addrs = ['173.194.222.%s' % i for i in range(1,255)] #google 
    #addrs = ['87.250.250.%s' % i for i in range(1,255)]  #yandex
    #addrs = ['94.100.180.%s' % i for i in range(1,255)] #mail.ru
    addrs = ['81.19.82.%s' % i for i in range(1,255)] #rambler
    pool = Pool(10)
    found = []
    t1 = time()
    with gevent.Timeout(5,False):
        for addr in addrs:
            pool.spawn(ip2url,addr)
        pool.join()
    t2 = time()
    for i in found: print i
    print 'time:',t2 - t1,'found:',len(found)
    sys.exit()
создается пул из 10 гринлетов с суммарным таймаутом 5 сек
но тут много факторов - сколько серверов в цепочке, кэшируют ли они запросы, как у них система безопасности настроена и т.д. у тебя на виртуалке днс сервер поднят ? имхо смысл есть тока реальные адреса сканить, но если админ не спит, за такие зксперименты вполне реально люлей огрести -
IDS
UrfinJuice
vic57, сделал так. Работает и славно. Матчасть буду подтягивать, а то сложновато так с наскока… В плане IDS, тут проблем нет.
Спасибо за помощь!

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