Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/324: Рейтинг темы: голосов - 324, средняя оценка - 4.80
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
1

сканер proxy

25.09.2011, 19:54. Показов 60381. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане!
Никогда не работал с сетью в с++ поэтому прошу объясните что потребуется для того чтобы написать программу, чтобы она брала прокси к примеру с сайта spys.ru (c нужной страницы) и проверяла на доступность после чего рабочие прокси записывала в файл.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2011, 19:54
Ответы с готовыми решениями:

MySQL proxy
Доброго времени суток! Мне необходимо написать прозрачное прокси для mysql. На сколько я понял,...

Сканер портов
Всем привет :) Не могу реализовать сканер по диапазону ip-адресов и на определённый порт(по...

Сканер портов
Хочу написать сканер портов,но что то не получается.Вот код: #include "StdAfx.h" #include...

InternetSetOption - установка proxy
Здравствуйте, пытаюсь задать автоматический скрипт для установки прохи, все работает только...

6
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2011, 01:59 2
Цитата Сообщение от N!K Посмотреть сообщение
что потребуется для того чтобы написать программу, чтобы она брала прокси к примеру с сайта spys.ru
во первых - нужно понимать, что дармовыми могут быть только медленные или краткоживущие прокси.

Добавлено через 1 минуту
и не забывать о том, что подобные прокси могут намеренно снифать траф
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
26.09.2011, 05:11 3
Цитата Сообщение от N!K Посмотреть сообщение
что потребуется для того чтобы написать программу
Нужны:
+ библиотека или просто набор функций для работы с протоколом http (например libcurl)
+ библиотека для работы со строками, чтобы вытаскивать оттуда то, что нужно (например методы std:string или что-то вроде libxml, libhtml)
+ знания, как работать с вышеперечисленными вещами.
+ понимать то, что сказал niXman и сделать выводы типа "оно того стоит".
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
26.09.2011, 16:06 4
Для чего тебе такая программа ?
По мне так проще задачу решить на perl
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
04.10.2011, 13:07 5
Лучший ответ Сообщение было отмечено как решение

Решение

Вот, указываешь адрес страницы со списком прокси, прога через сокет пробует подключаться поочерёдно, результат выводит в консоль
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
#include <istream>
#include <ostream>
#include <iomanip>
#include <windows.h>
#include <stdio.h>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/asio.hpp>
typedef boost::asio::ip::tcp tcp;
 
// [url]http://www.samair.ru/proxy/proxy-01.htm[/url]
// [url]http://www.atomintersoft.com/proxy_list_Austria_at[/url]
// [url]http://www.free-proxy-list.info/free-proxy-list/all-working-proxies.php[/url]
 
std::string uri="spys.ru";             // адрес страницы со списком прокси
std::string url, urn;
boost::smatch res;
boost::regex regUri("(?:[url]http://)?([/url][^/]+)(.*)"); // теги [url] и [/url] надо удалить
boost::regex regLocation("Location: ([^ \r]+)");
boost::regex regStartingLine("HTTP/\\d\\.\\d +\\d{3}.*\r");
std::string fileHttp = "1.txt", fileRes = "2.txt";
boost::asio::io_service io;
tcp::socket sock(io);
boost::system::error_code err;
 
int ParseUri(){
    if(!boost::regex_match(uri, res, regUri)) return 1;
    url=res[1];
    if((urn=res[2]).empty()) urn="/";
    return 0;
}
 
void FileToFile(){                       // парсит страницу и тестирует прокси
    std::ifstream ifs(fileHttp.c_str());
    if(!ifs){std::cerr << "File " << fileHttp << " not found\n"; exit(__LINE__);}
    std::string s((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
    //std::cout << s << "\n\n";
    boost::regex reg("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}) ?: ?(\\d{1,5})");
    std::string::const_iterator itBeg = s.begin(), itEnd = s.end();
    //std::ofstream ofs(fileRes.c_str());
    //if(!ofs){std::cerr << "Can't create file " << fileRes; exit(__LINE__);}
    unsigned short port;
    for(; boost::regex_search(itBeg, itEnd, res, reg); itBeg = res[0].second){
        //std::cout << res[0] << std::endl;
        std::cout << std::setw(24) << std::left << res[0];
        port = boost::lexical_cast<unsigned short>(res[2]);
        sock.connect(tcp::endpoint(boost::asio::ip::address::from_string(res[1]), port), err);
        std::cout << ( err ? "FAIL" : "OK" ) << "\n";
        sock.close();
    }
    ifs.close();
    //ofs.close();
}
 
int main(){
    SetConsoleOutputCP(1251);
    try{
        tcp::resolver resolver(io);
        boost::asio::streambuf reqBuf;
        std::ostream reqStream(&reqBuf);
        boost::asio::streambuf* pRespBuf=new boost::asio::streambuf();
        std::istream respStream(pRespBuf);
        while(true){
            if(ParseUri()){
                std::cerr<<"ParseUri() failed\n";
                return __LINE__;
            }
            tcp::resolver::query q(url, "http");
            tcp::resolver::iterator it = resolver.resolve(q, err), itEnd;
            if (err){
                std::cerr<<"resolve() failed:\n"<<err.message()<<"\n";
                return __LINE__;
            }
            err = boost::asio::error::host_not_found;
            while (err && it != itEnd){
                sock.close();
                sock.connect(*it++, err);
            }
            if (err){
                std::cerr<<"connect() failed:\n"<<err.message()<<"\n";
                return __LINE__;
            }
            reqStream<<"GET "<<urn<<" HTTP/1.0\r\n"
            <<"Host: "<<url<<"\r\n"
            <<"Connection: close\r\n\r\n";
            boost::asio::write(sock, reqBuf);
            boost::asio::read_until(sock, *pRespBuf, boost::regex("(?:\r\n){2,}"));
            std::string headers, tmp;
            while(std::getline(respStream, tmp)&&tmp!="\r"){
                headers+=(tmp+'\n');
            }
            std::cout<<headers<<"\n";
            if (!boost::regex_search(headers, res, regStartingLine)){
                std::cerr<<"\nUnexpected starting line"<<std::endl;
                return __LINE__;
            }
            if(boost::regex_search(headers, res, regLocation)){
                uri=res[1];
                std::cout<<"Trying use new uri:\n"<<uri<<"\n\n";
                pRespBuf->consume(pRespBuf->size());
            }
            else break;
        }
        std::ofstream ofs(fileHttp.c_str(), std::ios::binary);
        if(!ofs){std::cerr << "Can't create file\n"; return __LINE__;}
        if(pRespBuf->size()) ofs<<pRespBuf;
        while (boost::asio::read(sock, *pRespBuf, boost::asio::transfer_at_least(1), err)){
            ofs<<pRespBuf;
        }
        ofs.close();
        if (err != boost::asio::error::eof) throw boost::system::system_error(err);
        respStream.rdbuf(NULL);
        delete pRespBuf;
        pRespBuf=NULL;
        sock.shutdown(tcp::socket::shutdown_both);
        sock.close();
        FileToFile();
    }
    catch (std::exception& e){
        std::cerr<<"Caught exception:\n"<<e.what()<<"\n";
    }
    return 0;
}
3
Заблокирован
Автор FAQ
04.10.2011, 17:58 6
Цитата Сообщение от N!K Посмотреть сообщение
Здравствуйте уважаемые форумчане!
Никогда не работал с сетью в с++ поэтому прошу объясните что потребуется для того чтобы написать программу, чтобы она брала прокси к примеру с сайта spys.ru (c нужной страницы) и проверяла на доступность после чего рабочие прокси записывала в файл.
- Я решил далеко в лес не ходить и решил с помощью библиотеки ws2_32.lib конектиться своим клиентом к серверу.Принцип такой беру АЙПИшник и пор запихиваю это всё в sockaddr_in addr и вот так пытаюсь подконнектиться
C++
1
if(!connect(s,(sockaddr *)&addr,sizeof(addr)))
- если конект неудачный функция моей библиотеки IPCheck.lib BOOL IPCheck(ULONG uPORT, LPCTSTR sSERVIP); выдаст FALSE иначе TRUE. В программе решил не заморачиваться парсингом HTTP страницы, а просто работаю со входным файлом (в нём сохранённая 1 к 1-му таблица из spys.ru) в віходном файле out.txt результаты коннекта.
Вот код клиента юзающего мою IPCheck.lib(её код не привожу, т.к. думаю для ТС он сложен, а выдавать свои тайны тоже не особо хочется)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <windows.h>
#include <stdio.h>
 
#define IMPORT __declspec (dllimport)
#pragma comment(lib,"IPCheck.lib")
 
IMPORT BOOL IPCheck(ULONG uPORT, LPCTSTR sSERVIP);
 
struct inpIP
{
    char sIP[32];//Думаю с лихвой хватит
    char sTYPE[8];//тожк самое HTTP SOCKS ESMTP
    char sANON[8];//-/-
    char sREGN[32];//Вдруг какойто северо азиацкий уругвай 
                      //попадёт будем готовы к этому xD
    char sTIME[24];//Хватит с головой
};
 
int main()
{
    inpIP pIP;
    ULONG uPORT;
    char sBUF[32],ch;
    BOOL bCHECK = FALSE;
    FILE * inp = fopen("inp.txt","r");
    FILE * out = fopen("out.txt","w");
    if(!inp)
        printf("Error open inp.txt\r\n");
    else
    if(!out)
        printf("Error open out.txt\r\n");
    else
    {
        while(!feof(inp))
        {
            bCHECK = FALSE;
            fscanf
            (
                inp,
                "%s%s%s%s%s",
                sBUF,
                pIP.sTYPE,
                pIP.sANON,
                pIP.sREGN,
                pIP.sTIME
            );
            sscanf(sBUF,"%[^:]%c%u",pIP.sIP,&ch,&uPORT);
            printf("CHECKING SERVER IP : %s\r\n",pIP.sIP);
            printf("PORT : %u\r\n",uPORT);
            fprintf(out,"CHECKING SERVER IP : %s\r\n",pIP.sIP);
            fprintf(out, "PORT : %u\r\n",uPORT);
            bCHECK = IPCheck(uPORT, pIP.sIP);
            fprintf(out,"CONNECT : ");
            printf("CONNECT : ");
            printf("%s\r\n",(bCHECK ? "TRUE" : "FALSE"));
            fprintf(out,"%s\r\n",(bCHECK ? "TRUE" : "FALSE"));
        }
        fclose(out);
        
    }
    if(inp)
        fclose(inp);
    system("pause");
    return 0;
}
результат коннекта

результат коннекта
CHECKING SERVER IP : 18.112.185.71

PORT : 8080

CONNECT : FALSE

CHECKING SERVER IP : 49.212.96.96

PORT : 8080

CONNECT : FALSE

CHECKING SERVER IP : 83.172.0.119

PORT : 3128

CONNECT : FALSE

CHECKING SERVER IP : 213.33.180.103

PORT : 80

CONNECT : FALSE

CHECKING SERVER IP : 213.33.180.99

PORT : 80

CONNECT : FALSE

CHECKING SERVER IP : 187.62.64.36

PORT : 162

CONNECT : TRUE

CHECKING SERVER IP : 41.234.206.92

PORT : 80

CONNECT : FALSE

CHECKING SERVER IP : 61.247.46.195

PORT : 3128

CONNECT : FALSE

CHECKING SERVER IP : 119.235.53.130

PORT : 8080

CONNECT : FALSE

CHECKING SERVER IP : 187.4.128.10

PORT : 3128

CONNECT : FALSE

CHECKING SERVER IP : 213.207.46.242

PORT : 8080

CONNECT : FALSE

CHECKING SERVER IP : 188.93.20.179

PORT : 8080

CONNECT : FALSE

CHECKING SERVER IP : 77.109.9.189

PORT : 8080

CONNECT : FALSE

CHECKING SERVER IP : 190.152.249.73

PORT : 3128

CONNECT : TRUE

CHECKING SERVER IP : 77.79.8.223

PORT : 80

CONNECT : FALSE

CHECKING SERVER IP : 188.116.52.125

PORT : 3128

CONNECT : FALSE
Вложения
Тип файла: rar IPChecker.rar (29.2 Кб, 41 просмотров)
0
Заблокирован
Автор FAQ
04.10.2011, 22:29 7
Я чуть перепаял, вот код (сделал вывод в файл именно работающих прокси а не результатов TRUE FALSE).
Код здесь
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <windows.h>
#include <stdio.h>
 
#define IMPORT __declspec (dllimport)
#pragma comment(lib,"IPCheck.lib")
 
IMPORT BOOL IPCheck(ULONG uPORT, LPCTSTR sSERVIP);
 
struct inpIP
{
    char sIP[32];//Думаю с лихвой хватит
    char sTYPE[8];//тожк самое HTTP SOCKS ESMTP
    char sANON[8];//-/-
    char sREGN[32];//Вдруг какойто северо азиацкий уругвай 
                   //попадёт будем готовы к этому xD
    char sTIME[24];//Хватит с головой
};
 
int main()
{
    inpIP pIP;
    ULONG uPORT;
    char sBUF[32],ch;
    BOOL bCHECK = FALSE;
    FILE * inp = fopen("inp.txt","rb+");
    FILE * out = fopen("out.txt","wb+");
    if(!inp)
        printf("Error open inp.txt\r\n");
    else
        if(!out)
            printf("Error open out.txt\r\n");
        else
        {
            while(!feof(inp))
            {
                
                fscanf
                    (
                        inp,
                        "%s%s%s%s%s",
                        sBUF,
                        pIP.sTYPE,
                        pIP.sANON,
                        pIP.sREGN,
                        pIP.sTIME
                    );
                    sscanf(sBUF,"%[^:]%c%u",pIP.sIP,&ch,&uPORT);
                    printf("CHECKING SERVER IP : %s\r\n",pIP.sIP);
                    printf("PORT : %u\r\n",uPORT);
                    bCHECK = IPCheck(uPORT, pIP.sIP);
                    printf("CONNECT : ");
                    printf("%s\r\n",(bCHECK ? "TRUE" : "FALSE"));
                    if(bCHECK)
                    {
                        fprintf(out,"CHECKING SERVER IP : %s\r\n",pIP.sIP);
                        fprintf(out, "PORT : %u\r\n",uPORT);
                        fprintf(out,"CONNECT : OK\r\n");
                    }
                    bCHECK = FALSE;
                }
                fclose(out);
                
        }
        if(inp)
            fclose(inp);
        system("pause");
        return 0;
}

inp.txt
62.213.6.122:808 HTTP ANM RU 04:10:11-22:03
62.148.136.79:80 HTTP ANM RU 04:10:11-22:03
80.237.83.225:8080 HTTP ANM RU 4:10:11-22:02
62.231.168.153:8080 HTTP ANM RU 04:10:11-22:02
83.172.0.119:3128 HTTP ANM RU 04:10:11-22:01
186.201.27.66:3128 HTTP NOA BR 04:10:11-22:01
180.95.129.232:80 HTTP ANM CN 04:10:11-22:01
216.127.51.52:80 HTTP HIA US 04:10:11-22:01
213.255.129.182:80 HTTP ANM EG 04:10:11-22:01
213.255.129.181:80 HTTP ANM EG 04:10:11-22:01
117.6.132.78:8080 HTTP ANM VN 04:10:11-22:01
93.159.144.43:3128 HTTP ANM PL 04:10:11-22:01
203.158.200.26:80 HTTP ANM TH 04:10:11-22:01
204.93.211.219:80 HTTP ANM US 04:10:11-20:56
95.143.115.77:3128 HTTP NOA RU 04:10:11-20:54
84.204.79.228:3128 HTTP NOA RU 04:10:11-20:54
188.93.20.179:8080 HTTP NOA RU 04:10:11-20:54
79.172.11.158:8080 HTTP ANM RU 04:10:11-20:54
109.200.97.254:3128 HTTP HIA RU 04:10:11-20:54
87.255.6.117:80 HTTP NOA RU 04:10:11-20:54
195.218.178.118:80 HTTP NOA RU 04:10:11-20:54
109.230.136.4:8080 HTTP NOA RU 04:10:11-20:54
86.62.117.211:3128 HTTP HIA RU 04:10:11-20:53
218.14.227.197:3128 HTTP NOA CN 04:10:11-20:53
118.112.185.71:8080 HTTP NOA CN 04:10:11-20:53


Отдельно о программе (конект к IP может длиться до 15 секунд!, чтобы пользователь понимал что конект прошёл, оснастил программу MessageBox - ом(см миниатюру) свидетельствующем о том что попытка connect-а завершилась)
Вобщем на 21:26 по Киеву все прокси из spys.ru были уже неактивными(поэтому файл out.txt біл пуст)
Вывод консоль
CHECKING SERVER IP : 62.213.6.122
PORT : 808
CONNECT : FALSE
CHECKING SERVER IP : 62.148.136.79
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 80.237.83.225
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 62.231.168.153
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 83.172.0.119
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 186.201.27.66
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 180.95.129.232
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 216.127.51.52
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 213.255.129.182
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 213.255.129.181
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 117.6.132.78
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 93.159.144.43
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 203.158.200.26
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 204.93.211.219
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 95.143.115.77
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 84.204.79.228
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 188.93.20.179
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 79.172.11.158
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 109.200.97.254
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 87.255.6.117
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 195.218.178.118
PORT : 80
CONNECT : FALSE
CHECKING SERVER IP : 109.230.136.4
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 86.62.117.211
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 218.14.227.197
PORT : 3128
CONNECT : FALSE
CHECKING SERVER IP : 118.112.185.71
PORT : 8080
CONNECT : FALSE
CHECKING SERVER IP : 118.112.185.71
PORT : 8080
CONNECT : FALSE
Для продолжения нажмите любую клавишу . . .

IPCheck.lib берём в предыдущем посте
Миниатюры
сканер proxy  
1
04.10.2011, 22:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2011, 22:29
Помогаю со студенческими работами здесь

TCP proxy server для СУБД с возможностью логирования всех запросов
Доброго времени суток! У меня есть задача:сделать TCP proxy server для СУБД с возможностью...

Proxy - выдает ошибку HTTP/1.0 407 PROXY AUTHENTICATION REQUIRED
что не так :angry: ? IdHTTP1.ProxyParams.ProxyServer :='прокси'; ...

LWP proxy ошибка Error: 407 Proxy authentication required
Есть скрипт: #!/usr/bin/perl use LWP::UserAgent; $ua = LWP::UserAgent-&gt;new;...

Прорыв через ISA proxy ошибку HTTP/1.1 407 Proxy Authentication Required
мой клиент на си++ по http протоколу общается с моим же сервром. Если на пути тупое прокси, то всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru