Здарова, щеглы, сегодня мы своими руками будем писать скрипт на Python. Нам понадобятся: интерпретатор Python 3 под "какая-там-у-вас-ОС", текстовый редактор с подсветкой синтаксиса, например, Sublime Text, Google, упаковка прамирацетама, бутылка минеральной воды и 60 минут свободного времени.
Перед тем как писать скрипт, мы должны определиться, что он вообще будет делать. Делать он будет следующее: получив на вход домен и диапазон IP-адресов, многопоточно проходить список этих адресов, совершать HTTP-запрос к каждому, в попытках понять, на каком же из них размещен искомый домен. Зачем это нужно? Бывают ситуации, когда IP-адрес домена закрыт Cloudflare, или Stormwall, или Incapsula, или еще чем-нибудь, WHOIS история не выдает ничего интересного, в DNS-записях такая же канитель, а, внезапно, один из поддоменов ресолвится в адрес из некоторой подсети, которая не принадлежит сервису защиты. И в этот момент нам становится интересно, вдруг и основной домен размещен в той же самой подсети.
Читать далее «Пишем простой скрипт на Python»
Метка: http
Библиотека для работы с Web на PHP

Давным-давно, когда в моде еще был PHP4, я написал несложную библиотеку на PHP для работы с Web. Эта библиотека была достаточно примитивной, состояла из одного-единственного класса, содержала какие-то ошибки, но, тем не менее, она работала и была вполне юзабельной, поддерживала различные типы прокси-серверов, chunked-содержимое, сжатое содержимое и еще всякие приятные мелочи.
Однако, пришло время расширить функционал библиотеки, а заодно и полностью переписать ее с использованием новых возможностей ООП PHP5.
Итак, вот основные фишки новой библиотеки в сравнении со старой (жирным отмечены самые интересные особенности):
| Характеристика | Websock2 | Websock |
|---|---|---|
| PHP4 | - | + |
| Не требует cURL | + | + |
| HTTP | + | + |
| HTTPS | + | - |
| GET-и POST-запросы | + | + |
| Удобная работа с HTTP-заголовками | + | - |
| File uploads | + | - |
| Автоматическое отслеживание cookies | + | - |
| Автоматическая обработка HTTP-редиректов | + | - |
| Установка referer при редиректах | + | - |
| Basic-аутентификация | + | - |
| Digest-аутентификация | + | - |
| Автоматическая basic/digest аутентификация | + | - |
| Chunked encoding | + | + |
| GZIPped-содержимое | + | + |
| Deflated-содержимое | + | - |
| HTTP-прокси | + | + |
| HTTP-прокси в режиме HTTPS | + | - |
| SOCKS4-прокси | + | - |
| SOCKS4a-прокси | + | - |
| SOCKS5-прокси | + | + |
| Аутентификация прокси | + | + |
| Цепочки прокси | + | - |
| Отслеживание таймаутов операций | + | - |
| Сокеты через file и socket_*-функции | + | + |
| Перехват HTTP-редиректов | + | - |
| Перехват чтения HTTP-заголовков и содержимого | + | - |
| Скачивание/загрузка очень больших файлов | + | - |
| Сделано по RFC | + | - |
| Удобная архитектура, простая расширяемость | + | - |
Как видно из таблицы, новая библиотека содержит намного больше функций, чем старая. Более того, новая библиотека хорошо задокументирована (на английском) и содержит большое количество примеров.
Скачать архив (библиотека + примеры + документация): Websock2
Просмотреть документацию и примеры использования
Пожелания и вопросы можно оставлять в комментариях к посту или на нашем форуме.
Классы для работы с HTTP(S) на C++
Написал кроссплатформенную библиотеку (набор классов) для работы с HTTP(S) на C++, используя последние концепции программирования. Пока что это, пожалуй, beta, так как тестировал я ее совсем мало.
Для сборки библиотеки потребуется собранный Boost (желательно версии 1.48 или выше). Если планируется включение функционала для работы с SSL (HTTPS), то потребуется еще собранная библиотека OpenSSL. Также в обязательном порядке требуется поддержка компилятором C++11. Сами заголовочные файлы библиотеки не включают ни заголовочные файлы boost, ни OpenSSL.
Для тех, кто захочет использовать библиотеку для написания чего-то жестоко многопоточного (конечно, спамеров, а что же еще подобное пишут с дохера потоками), учтите, что каждый запрос создает 1 дополнительный фоновый поток, т.е. количество потоков, используемых приложением, увеличивается вдвое. Такая особенность работы связана с тем, что в своем ядре библиотека использует boost::asio::io_service для контроля времени выполнения запроса (словом, внутри библиотеки всё происходит асинхронно).
Краткое описание возможностей класса:
[+] GET/POST/прочие запросы с использованием HTTP/1.0
[+] Поддержка HTTPS
[+] Поддержка multipart-POST запросов с возможностью загрузки произвольного количества файлов любого размера
[+] Автоматический менеджмент Cookies
[+] Автоматические переходы по Location-редиректам
[+] Поддержка скачивания больших файлов
[+] Поддержка HTTP/HTTPS/SOCKS5-прокси с авторизацией и без
[+] Возможность добавлять собственные HTTP-заголовки в запрос
[+] Поддержка автоматической обработки параметров (urlencode)
[+] Возможность задать таймаут на любой запрос
[+] Множество вспомогательных функций (urlencode, base64 и т.п.)
Классы потоконебезопасны, организация синхронизации должна производиться на вашей стороне в случае использования одного и того же экземпляра какого-либо класса в нескольких потоках сразу.
Далее я по пунктам приведу краткое описание возможностей библиотеки с примерами.
Читать далее «Классы для работы с HTTP(S) на C++»
Модуль для работы с Web
Написал простой модуль для работы с web. Модуль довольно легкий, основан на IO::Socket::INET и IO::Socket::SSL.
Конструктор:
new()
new(arg => value, arg => value)
Создает объект, который используется для дальнейших запросов. Доступные аргументы: agent (user-agent, который будет использоваться в запросе), timeout (таймаут соединения).
Методы:
set_cookie($arg)
Устанавливает аргумент в качестве кукисов.
header(%arg)
Устанавливает дополнительные заголовки.
proxy_auth($login, $passw)
Устанавливает логин и пароль для авторизации при работе с http-прокси.
socks_auth($login, $passw)
Устанавливает логин и пароль для авторизации при работе с socks-прокси.
proxy($proxy_type, $proxy)
Включает работу через прокси.
$proxy_type может принимать следующие значения: 0 - без прокси, 1 - http-прокси, 2 - socks5 прокси.
$proxy в формате ip:port
request($method, $host, $port, $uri, $payload, $limit)
Метод для непосредственного выполнения запроса
$method - GET, POST, HEAD,
$host - адрес сайта с http:// (например, http://rambler.ru),
$port - порт,
$uri - путь запроса (например, /index.php),
$payload - тело POST-запроса,
$limit - количество байт, которые необходимо считать из сокета (0 - считать весь ответ).
Примеры работы с модулем
Получение веб-страницы в переменную и вывод содержимого ответа на экран:
|
1 2 3 4 |
use Web; my $w = Web->new(timeout => 10, agent => 'FireFox'); my $page = $w->request('GET', 'http://rambler.ru', 80, '/', '', 0); print $page; |
Работа через прокси:
|
1 2 3 4 5 |
use Web; my $w = Web->new(timeout => 10, agent => 'FireFox'); $w->proxy(2, '127.0.0.1:1080'); #2 - socks5 прокси my $page = $w->request('GET', 'https://mini.webmoney.ru', 443, '/', '', 0); print $page; |
POST запрос через прокси:
|
1 2 3 4 |
use Web; my $w = new Web; my $page = $w->request('POST', 'http://site.com', 80, '/auth.php', 'login=vasya&pass=petya', 0); print $page; |
Скачать: web.pm
Библиотека для работы с http
Написал небольшую библиотеку на ассемблере (MASM32) для работы с http-протоколом.
Читать далее «Библиотека для работы с http»