ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Скрипт проверяющий прокси
  #1  
Старый 08.09.2009, 16:17
Ardling
Новичок
Регистрация: 30.08.2009
Сообщений: 19
Провел на форуме:
24215

Репутация: 7
По умолчанию Скрипт проверяющий прокси

Не нашел никакой программы для linux, которая бы умела проверять прокси на работоспособность.

Возможно выход в такой ситуации написать скриптик самому, но встало два вопроса:
На чем писать
Самый очевидный выбор для linux это bash или perl, но у меня почти не т опыта программирования и на том и на другом.
Как выриант можно писть на python, с которым я немножко имел дело, но все равно хотелось бы услышать аргументированное мнение по поводу выбора языка.

Что писать
Опять у меня совсем нет опыта программирования для сети. Из баша можно запускать ping или httping, но похоже что это не самый удачный способ проверки проксей, посему прошу предложить спосб луше.

В случае с питоном вопрос проверки еще более тумант.

Буду благодарен за любые ссылки на маны и документацию и вообще ссылки на любые марериалы по теме, можно на языке вероятного противника.
 
Ответить с цитированием

  #2  
Старый 08.09.2009, 16:42
FireFenix
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме:
3178262

Репутация: 389
По умолчанию

Где вас только таких берут? или мама поиском не научила пользоваться?

иду я в поиск и что я вижу?
python -> http://forum.antichat.ru/showpost.php?p=1268835&postcount=1
обсуждение "proxy cheker, консольный для nix" -> http://forum.antichat.ru/showthread.php?t=116388
php чекер -> http://forum.antichat.ru/showthread.php?p=1158954-proxy+%F7%E5%EA%E5%F0#post1158954
Ещё одна общая доработка perl чекера -> http://forum.antichat.ru/threadnav40897-104-10.html

при большом желании найти можно всё..... но вот задавать глупые вопросы - это всегда пожалуйста!
 
Ответить с цитированием

  #3  
Старый 08.09.2009, 16:48
Ardling
Новичок
Регистрация: 30.08.2009
Сообщений: 19
Провел на форуме:
24215

Репутация: 7
По умолчанию

Спасибо. Подборка хорошая. Ошибку понял.

Тем не менее за буду весьма признателен, если кто-то поделится опытом по выше озвученным вопросам, так как видимо буду либо подгонять скрипты под себя, либо все равно писать свои. Посмотрим что будет попроще.

Последний раз редактировалось Ardling; 08.09.2009 в 16:52..
 
Ответить с цитированием

  #4  
Старый 08.09.2009, 17:15
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

forum.antichat.ru/showpost.php?p=1491575&postcount=6
 
Ответить с цитированием

  #5  
Старый 15.09.2009, 14:09
Ardling
Новичок
Регистрация: 30.08.2009
Сообщений: 19
Провел на форуме:
24215

Репутация: 7
По умолчанию

В итоге, после долгих блужданий по форуму так и не нашел нормального чекера на python и решил сам написать что-то подобное. Возможно кому-то это пригодится, ибо написанное на питоне очень удобно подстраивать под свои конкретные нужды.

PHP код:
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import urllib2
import threading

openUrl 
'http://2ip.ru/'
proxiesFileName 'proxies-big'
outFileName 'goodproxies'
timeout 5
maxProxyNum 
100

class fileLister:
    
def __init__(selffileName):
        
with open(fileName'r') as file:
            
self.fileList file.readlines()

    
def getProxyAdress(self):
        return {
'http''http://'+self.fileList.pop().strip()}
    
    
def isNotEmpty(self):
        if 
len(self.fileList) == 0:
            return 
False
        
else: return True

def checkThread
():
    while 
proxyFile.isNotEmpty():
        
checkProxy(proxyFile.getProxyAdress())

def checkProxy(proxyAdress):
    
proxyHandler urllib2.ProxyHandler(proxyAdress)
    
opener urllib2.build_opener(proxyHandler)
    
urllib2.install_opener(opener)
    
    try: 
urllib2.urlopen(openUrl)
    
except urllib2.URLErroreproxyErr(proxyAdresse)
    else: 
goodProxy(proxyAdress)

def proxyErr(proxyAdresserror):
    
proxyName proxyAdress.values()[0][7:]
    
with printLock:
        print 
proxyNameerror.errnoerror.reason

def goodProxy
(proxyAdress):
    
proxyName proxyAdress.values()[0][7:]
    
with printLock:
        print 
proxyName"Работает"
    
with open(outFileName'a') as file:
        print>>
fileproxyName

def main
():
    global 
printLock
    printLock 
threading.Lock()

    
socket.setdefaulttimeout(timeout)
    
    global 
proxyFile
    proxyFile 
fileLister(proxiesFileName)
    
    for 
i in xrange(maxProxyNum):
        
threading.Thread(target=checkThread).start()

if 
__name__ == '__main__':
    
main() 
Хотелось бы услышать что вы о моем тварении думаете, желательно разумную критику. Интересно было бы услышать чего еще полезного можно к этому скрипту прикрутить.
 
Ответить с цитированием

  #6  
Старый 15.09.2009, 14:22
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Ну кагбэ майн имха такова : первый минус - что грузишь файл в оперативку, тут можно обойтись итератором
<дальше не читать>
Код:

, хотя лучше использовать queue и динамическую прогрузку - сделать iter(filehandler) и в вечном цикле до stopIteration гонять этот файлхендлер, queue же заюзать тупо как буффер и сделать его размер где-то так :threads_count*2(3) тогда потоки у тебя будут постоянно получать задачи, и можно будет сделать красивую обработку ошибок (хотя не стоять, я не туда уже поплыл, для чекера проксей это пох ибо что так что эдак это не катит именно для чекера проксей)
</дальше не читать>

А вообще в принципе нормально, но имхо уж больно много функций ) Лучше сделай пару функций покрупнее, а не 10 одно-двухстрочных )

P.S. Кагбэ интересно, а он нормально работает ?
Попробуй прочекать в 10 потоков 100 прокси - чето мне подсказывает что вывод прокси будет только один раз, ибо не катит
Код:
printLock = threading.Lock()
лучше бы
Код:
printLock = threading.RLock()
Потом, при длительной работе/большом количестве потоков могут повылазить эксепшны, не айс использовать замок для вывода в консоль - с этим траблов не буит, а вот многопоточный вывод в файл может запросто убить его, лучше сделай отдельную функцию вывода в файл и юзай там глобальный замок, и вообще глобал не айс )

Последний раз редактировалось login999; 15.09.2009 в 14:29..
 
Ответить с цитированием

  #7  
Старый 15.09.2009, 14:53
Ardling
Новичок
Регистрация: 30.08.2009
Сообщений: 19
Провел на форуме:
24215

Репутация: 7
По умолчанию

Цитата:
Сообщение от login999  
Ну кагбэ майн имха такова : первый минус - что грузишь файл в оперативку, тут можно обойтись итератором
Я думал об этом, но мне показалось сомнительным, что читать с диска по одной скажем несколько сотен строчек - просто насилие над диском. Тем более что сам я не юзаю пока списки по нескольку тысяч прокси. Возможно хорошим решением будет сливать с диска по сотне строк за раз.
Цитата:
Сообщение от login999  
<дальше не читать>
</дальше не читать>
У меня то что ты написал в теге CODE отображается с горизонтальной прокруткой почему-то. Читать невозможно!!!

Теперь буду долго пытаться понять что ты мне там написал, и возможно меня за мои труды ждет озарение.
Цитата:
Сообщение от login999  
Лучше сделай пару функций покрупнее, а не 10 одно-двухстрочных )
Я помнится у Кернигана и Ричи вычитал, что функции не должны быть длинными и использоваться везде, где требется повторять ког, или если это отражает структуру программы.

А вообще проще изменять функциональность отдельных функций (вот такой я поэт), а в будущем одни скорее всего потолстеют.
Цитата:
Сообщение от login999  
P.S. Кагбэ интересно, а он нормально работает ?
Попробуй прочекать в 10 потоков 100 прокси - чето мне подсказывает что вывод прокси будет только один раз, ибо не катит
Код:
printLock = threading.Lock()
лучше бы
Код:
printLock = threading.RLock()
Потом, при длительной работе/большом количестве потоков могут повылазить эксепшны, не айс использовать замок для вывода в консоль - с этим траблов не буит, а вот многопоточный вывод в файл может запросто убить его, лучше сделай отдельную функцию вывода в файл и юзай там глобальный замок, и вообще глобал не айс )
Тут как раз все хорошо, по крайней мере кроме записи на диск, хотя и с ней косяков не замечено. Поясняю зачем Lock на вывод - если несколько процов на компе (или ядер) то пара потогов вместе начинает выводить на экран, и вылезает белиберда. На однопроцессорной конфигурации таких проблем нет и лок излишен.

С выводом в файл проблем не замечено, подозреваю что with решает).

global - это ужасно, на C я бы за такое все бы поотрывал. Но в питоне области видимости - больная тема, и я не нашел более красивого решения. Не хочу мутить новый объект тк просто можно скрипт подключать как модуль и юзать функции. Оч удобно на мой взгляд.
 
Ответить с цитированием

  #8  
Старый 15.09.2009, 15:42
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Эх, не о том мну Lock (если исходить из манов) один поток может вызывать только один раз, RLock один поток может вызывать несколько раз подряд.
P.S. Насчет монструозности - мну бывает заносит, начинаю изь*бываться.
Несколько процов/ядер пох ибо это threading а не multiprocessing, параша в консоль валится это бесспорно, в принципе, сделай так (ну попиарю я WRITER )
Код:
#Класс для записи данных в несколько файлов
class WRITER:
    
    #Атрибут инициализации
    def __init__(self):
        
        from threading import RLock
        
        self.Lock = RLock
        self.Locks = {}
        
        self.defaultencoding = "UTF-8"
        self.defaultout = u"out"
    
    #Атрибут записи одного элемента
    def write_one(self, data, id_=None, data_encoding=None):
        if id_ is None:
            id_ = self.defaultout
        if data_encoding is None:
            encoding = self.defaultencoding
        if id_ not in self.Locks:
            self.Locks[id_] = self.Lock()
        self.Locks[id_].acquire()
        with open(u"{0}.csv".format(id_).encode(self.defaultencoding), "a") as out:
            print data
            out.write("{0}\n".format(data.encode(encoding, "replace")))
        self.Locks[id_].release()
    
    #Атрибут записи последовательности
    def write_many(self, data, id_=None, data_encoding=None):
        if id_ is None:
            id_ = self.defaultout
        if data_encoding is None:
            encoding = self.defaultencoding
        if id_ not in self.Locks:
            self.Locks[id_] = self.Lock()
        self.Locks[id_].acquire()
        with open(u"{0}.csv".format(id_).encode(self.defaultencoding), "a") as out:
            for item in data:
                print item
                out.write("{0}\n".format(item.encode(encoding, "replace")))
        self.Locks[id_].release()
Данные ему давать в юникоде )
Потом, еще раз, в той куче монструозности есть еще один класс - PROXYS, его тоже можешь глянуть, при малюсенькой корректировке им можно заменить твой скрипт (добавить только вывод в файл и вывод в консоль, замки там уже имеются). П.С. насчет критики моей ты можешь не нервничать, по большому счету мне все равно как ты напишешь своё творение, мои посты можешь рассматривать просто как ещё один возможный вариант решения своей задачи.
П.С. смотри аву - мну мудак )
P.P.S. WRITER задуман для вывода данных в несколько разных файлов, это просто мойне парашен, в стандартной поставке есть logging, назначение его в принципе другое, но его можно переделать под аналогичные задачи, а так то мне лень было с ним разбираться =/

Последний раз редактировалось login999; 15.09.2009 в 15:46..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proxy FAQ iv. Анонимность 75 01.05.2010 13:24
mIRC: proxy script by elimS elimS2 PHP, PERL, MySQL, JavaScript 10 23.03.2009 22:13
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
Прокси: Как вас вычислить если вы под анонимным прокси Geveres Статьи 0 19.11.2005 17:02
Нужен скрипт на php или perl, проверяющий прокси и Чаты 0 05.10.2004 23:04



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ