Научная статья на тему 'Разработка программного обеспечения для получения пользовательских веб-запросов'

Разработка программного обеспечения для получения пользовательских веб-запросов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
809
62
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
РАЗРАБОТКА / СПОСОБ / ПЕРЕХВАТ / ПОЛЬЗОВАТЕЛЬ / ВЕБ-ЗАПРОС / JAVA / NETTYIO

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Стрекалов И. Э., Новиков А. А., Лопатин Д. В.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Разработка программного обеспечения для получения пользовательских веб-запросов»

УДК 004.056

РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ ПОЛУЧЕНИЯ ПОЛЬЗОВАТЕЛЬСКИХ ВЕБ-ЗАПРОСОВ

И.Э. Стрекалов, А.А. Новиков, Д.В. Лопатин

Тамбовский государственный университет имени Г.Р. Державина, Россия, г. Тамбов. е-mail: [email protected]

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

Ключевые слова: разработка, способ, перехват, пользователь, веб-запрос, java, nettyio.

Разрабатываемое программное обеспечение для получения пользовательских веб-запросов является частью будущей системы динамической фильтрации веб-контента, направленной на снижение информационных угроз для пользователя [1, 2]. Ранее нами были установлены необходимые требования к системе фильтрации веб-контента [3]. Основные требования следующие: необходимо учесть вероятную нагрузку на сервер системы фильтрации, обеспечить масштабируемость разрабатываемого программного продукта, изначально разрабатывать продукт, для которого в дальнейшем можно будет добавить дополнительные модули, например, обеспечивающие фильтрацию графического контента, обеспечить должную защиту от попыток обхода фильтра со стороны пользователя, последним и вероятно самым спорным из перечисленных выше требований является - кроссплатформенность разрабатываемого продукта.

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

Существует несколько вариантов получения запросов пользователя в сеть Интернет для обработки ответов на данные запросы [46]. Среди них наиболее распространены варианты: 1) перехват API операционной системы; 2) создание собственного сетевого подключения для передачи запросов по нему; 3) настройка прокси-сервера.

Перехват API операционной системы не соответствует требованиям к разрабатываемому продукту, так как решение должно быть кроссплатформенным, а написание перехватчиков для существующих операционных систем требует больших время- и трудозатрат и создает проблему создания клиента системы динамической фильтрации контента. Однако подобный подход отвечает требованиям к безопасности, так как пользователь никак не влияет на «перехваты» и не может изменить их конфигурацию без внесения изменений в конфигурацию клиентской части программного обеспечения.

Создание собственного сетевого подключения по своей сути создаст те же проблемы, что и перехват API, за исключением того, что пользователь с правами администратора сможет перенастроить или вовсе отключить созданное сетевое подключение для обхода контентной фильтрации [7].

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

граммного кода системы динамической фильтрации веб-контента.

Используемый прокси-сервер позволит также кешировать пользовательские запросы для обеспечения высокой скорости работы всей системы фильтрации. Однако необходимо учесть, что на сегодняшний день существуют технологии обновления некоторой части веб-страницы без повторного запроса полной страницы на удаленном вебсервере. Для того чтобы кеш страниц, использующих подобные технологии, обновлялся корректно, необходимо проверять полученный ответ от веб-сервера на предмет использования таких технологий. В случае если подобные технологии не используются, и содержимое страницы представляет из себя статический текст (например, статья в энциклопедии), то страницу можно добавить в кеш сервера, а если подобная технология используется (например, для реализации функции мгновенного обмена сообщениями), то все обращения к веб-сайту необходимо проводить без использования ке-ша [8].

Наиболее распространенной на сегодняшний день технологией асинхронной обработки веб-страниц с использованием JavaScript и XML, используемой для «фонового» обмена данными между клиентом и веб-сервером, является AJAX. Для определения присутствия технологии AJAX на вебстранице необходимо проверить является ли НТТР^)-запрос просто запросом веб-страницы или это «xmlhttprequest». В случае если запрос является «xmlhttprequest», то такие запросы нельзя кешировать, их необходимо обрабатывать каждый раз [9].

На данный момент в сети Интернет существует множество прокси-серверов, но все они так или иначе защищены авторскими правами и распространяются на основе различных лицензий, большинство из которых накладывают серьезные ограничения на коммерческие продукты. Поэтому система динамической фильтрации веб-контента нуждается в собственном решении, которое обеспечило бы работу с протоколами HTTP(S). Собственный прокси-сервер позволит не только избежать трудностей с лицензированием, но и облегчит установку системы фильтрации на серверное оборудование,

так как большинство прокси-серверов необходимо устанавливать отдельно и конфигурировать тоже отдельно [10].

Для написания небольшого многопоточного кроссплатформенного прокси-сервера отлично подойдет язык программирования Java с его встроенными библиотеками, обеспечивающими работу с сетью java.net.*, работу с потоками java.lang.Thread и вводом-выводом java.io.*. В дальнейшем для реализации сложного по своей структуре кеширую-щего веб-сервера возможно использование сторонней библиотеки языка Java - Netty IO. Библиотека Netty IO распространяется по лицензии Apache License 2.0 и является совершенно бесплатной, также разрешено использовать данную библиотеку в коммерческих продуктах. Стоит отметить, что благодаря использованию прокси-сервера переход на Netty IO можно совершить совершенно незаметно для конечного пользователя системы фильтрации.

В работе с HTTP-запросами также необходимо учесть тот факт, что в настоящий момент многие веб-сайты стараются использовать модифицированную версию протокола с шифрованным соединением - HTTPS. В этом случае снова возникает необходимость использовать библиотеку Netty IO, так как она полностью поддерживает SSL/TLS-соедине-ния благодаря классу io.netty.handler.ssl.

Прокси-сервер, по сути, это обычная программа, которая прослушивает определенный порт или несколько портов и производит некие действия, в зависимости от полученных команд. Например, если пользователь использует прокси-сервер для просмотра интернет-страниц, то браузер пользователя передает НТТР^)-запрос прокси-серверу, а прокси-сервер передает этот запрос в Интернет, получает ответ, изменяет его содержимое при необходимости и возвращает обратно браузеру пользователя.

Для прослушивания порта можно использовать стандартный класс JDK с названием ServerSocket. При инициализации, класс ServerSocket в качестве параметра принимает порт, который нужно прослушивать. В качества порта можно использовать любой свободный, например 10000. Основным условием является то, что порт не должен быть занят другой программой:

ServerSocket serverSocket = new ServerSocket( 10000).

Для того чтобы запустить процесс прослушивания, необходимо вызвать метод accept в условно бесконечном цикле while для непрерывного прослушивания, до принудительного выхода из тела цикла:

while (listening) { new

ProxyThread(serverSocket.accept()) .start(); // Создание экземпляра класса ProxyThread и

применение к нему метода start(). }

Start() для класса ProxyThread - позволяет запустить прослушивание в отдельном потоке выполнения.

Далее в ProxyThread необходимо создать логику работы прокси-сервера. Для начала необходимо получить все данные из сформированного ранее сокета для получения URL-адреса запроса. В первую очередь необходимо инициировать поток приема данных с помощью BufferedReader:

BufferedReader in = new BufferedReader (new InputStreamReader(socket.getInputStream())).

Затем необходимо получить URL-адрес, прочитав поток in построчно с помощью readLine до тех пор, пока поток не закончится:

while ((inputLine = in.readLine()) != null)

{

try {

if (cnt == 0) {

String[] tokens = inputLine.split(" "); // Разделение строки на подстроки - слова и помещение их в массив строк tokens.

urlToCall = tokens[1]; // Выбор второго элемента массива tokens хранящего

URL адрес веб-ресурса. }

cnt++; }

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

BufferedReader rd = null; try {

URL url = new URL(urlToCall);

URLConnection conn =

url.openConnection(); // Открытие подключения к заданному адресу urlToCall.

conn.setDolnput(true); // Передача запроса GET

conn.setDoOutput(false); // Отмена для запроса POST

InputStream is = null; HttpURLConnection huc = (HttpURLConnection)conn;

if (conn.getContentLength() > 0) { try {

is = conn.getInputStream(); rd = new BufferedReader(new In-putStreamReader(is)); // Передача URL подключения в поток чтения.

} catch (IOException ioe) {

System.out.println(ioe); }

}

Далее необходимо отправить полученные данные клиенту прокси-сервера. Для этого поток is (InputStream) необходимо будет разделить на равные по размеру блоки и отправить их клиенту в выходной поток out (DataOutputStream). Размер блоков в данном случае равен 32768 байт.

DataOutputStream out = new DataOutputStream(socket.getOutputStream()); byte by[] = new byte[32768]; int index = is.read( by, 0, 32768); while ( index != -1 ) {

out.write( by, 0, index ); // Последовательная запись в выходной поток блоков by.

index = is.read( by, 0, 32768); // Индексация блоков для последующей отправки. }

out.flush(); // По завершении передачи -очистка потока.

По завершении передачи необходимо закрыть все открытые ранее потоки с помощью метода close(), если они не были закрыты до этого, а также очистить сформированный сокет.

if (rd != null) { rd.close();} // Закрытие потока для чтения.

if (out != null) { out.close();} // Закрытие потока вывода.

if (in != null) { in.close();} // Закрытие потока ввода.

if (socket != null) { socket.close(); }// Закрытие созданного ранее сокета.

Необходимо отметить, что приведенный выше пример прокси-сервера лишь показывает насколько легко написать простой прокси-сервер на языке Java с использованием лишь стандартных средств разработки, включенных в пакет JDK. Приведенный пример прокси-сервера позволяет обрабатывать только HTTP-GET-запросы и не обрабатывает полученные результаты, а лишь отправляет их пользователю.

Проанализировав типовые методики получения пользовательских веб-запросов, было отмечено, что наиболее благоприятный способ для динамической фильтрации веб-контента - это создание и использование собственного прокси-сервера, который будет работать с протоколами HTTP и HTTPS. Помимо того, что прокси-сервер удовлетворяет большинству требований к разрабатываемому продукту, он также позволяет создать на его основе кешированную базу последних запросов. Кеширование позволит увеличить скорость работы системы динамической фильтрации при частом переходе по одним и тем же веб-сайтам. В анализе было учтено и то, что создание собственного прокси-сервера стандартными средствами разработки выбранного языка программирования Java является возможным, но не достаточным для обеспечения полного спектра возможностей и раскрытия всего потенциала использования кеширующего прокси-сервера.

Литература

1. Лопатин Д.В. Угрозы информационного характера в современной России // Актуальные проблемы информатики и информационных технологий: учебное пособие / под ред. М.С. Чвановой. Тамбов: Издательский дом ТГУ им. Г.Р. Державина, 2012. С. 100-122.

2. Лопатин Д.В., Анурьева М.С., Лопатина М.В., Заплатина Е.А., Калинина Ю.В., Еремина Е.А., Шевлягина М.А. Безопасность пользователей инфокоммуникационных технологий. Гуманитарный аспект // Вестник Тамбовского университета. Сер. : Естественные и технические науки. Тамбов, 2014. Т. 19. № 2. С. 652-655.

3. Стрекалов И.Э., Новиков А.А., Лопатин Д.В. Методы динамической фильтрации веб-контента // Вестник Тамбовского университета. Сер.: Естественные и технические науки. Тамбов, 2014. Т. 19. № 2. С. 668-669.

4. Реализация перехвата вызовов API [Электронный ресурс] // HabraHabr. URL: http://

habrahabr.ru/post/178393/. Дата обращения 07.06.2014.

5. Создание драйвера сетевого устройства. Часть 1 [Электронный ресурс] // NKLUG. URL: http://nklug.org.ua/lg/lg93/bhaskaran.html. Дата обращения 07.06.2014.

6. Настройка использования прокси-сервера для обозревателя Internet Explorer [Электронный ресурс] // Microsoft Поддержка. URL: http:// support.microsoft.com/kb/135982/ru. Дата обращения 07.06.2014.

7. To-do: Фильтруем вся и все [Электронный ресурс] II HabraHabr. URL: http://habrahabr.ru/ post/188444/. Дата обращения 07.06.2014.

8. Отт A. О контентной фильтрации II Jet Info. 2006. №10 (261) [Электронный ресурс]. URL: http://alexott.net/ru/writings/cf/JI200610.pdf. Дата обращения 07.06.2014.

9. Учебное пособие по кэшированию. Часть 1 [Электронный ресурс] II HabraHabr. URL: http://habrahabr.ru/post/203548/. Дата обращения 07.06.2014.

10. Учебное пособие по кэшированию. Часть 2 [Электронный ресурс] // HabraHabr URL: http://habrahabr.ru/post/204464/. Дата обращения 07.06.2014.

References

1. Lopatin D.V. Ugrozy informatsionnogo haraktera v sovremennoy Rossii // Aktual'nye problemy in-formatiki i informatsionnyh tehnologiy: ucheb-noe posobie / pod red. M.C. Chvanovoy. Tambov: Izdatel'skiy dom TGU im. G.R. Derzhavina, 2012. S. 100-122.

2. Lopatin D.V., Anur'eva M.S., Lopatina M.V., Zaplatina E.A., Kalinina Yu.V., Eremina E.A., Shevlyagina M.A. Bezopasnost' pol'zovateley infokommunikatsionnyh tehnologiy. Gumanitarnyj aspekt // Vestnik Tambovskogo universiteta. Ser.: Estestvennye i tehnicheskie nauki. Tambov, 2014. T. 19. № 2. S. 652-655.

3. Strekalov I.E., Novikov A.A., Lopatin D.V. Metody dinamicheskoy fil'tratsii veb-kontenta// Vestnik Tambovskogo universiteta. Ser.: Estestvennye i tehnicheskie nauki. Tambov, 2014.

T. 19, № 2. S. 668-669.

4. Realizatsiya perehvata vyzovov API [Elektronnyj resurs] // HabraHabr. URL: http://habrahabr.ru/ post/178393/. Data obrascheniya 07.06.2014.

5. Sozdanie drayvera setevogo ustroystva. Chast' 1 [Elektronnyj resurs] // NKLUG. URL: http:// nklug.org.ua/lg/lg93/bhaskaran.html. Data obrascheniya 07.06.2014.

6. Nastroyka ispol'zovaniya proksi-servera dlya obozrevatelya Internet Explorer [Elektronnyj resurs] // Microsoft Podderzhka. URL: http://

support.microsoft.com/kb/135982/ru. Data obrascheniya 07.06.2014.

7. To-do: Fil'truem vsya i vse [Elektronnyj resurs] // HabraHabr. URL: http://habrahabr.ru/post/188444/. Data obrascheniya 07.06.2014.

8. Ott A. O kontentnoy fil'tratsii // Jet Info. 2006. №10 (261) [Elektronnyj resurs]. URL: http:// alexott.net/ru/writings/cf/JI200610.pdf. Data obrascheniya 07.06.2014.

9. Uchebnoe posobie po keshirovaniyu. Chast' 1 [Elektronnyj resurs] // HabraHabr. URL: http:// habrahabr.ru/post/203548/. Data obrascheniya 07.06.2014.

10. Uchebnoe posobie po keshirovaniyu. Chast' 2 [Elektronnyj resurs] // HabraHabr. URL: http://

habrahabr.ru/post/204464/, svobodnyj. Data obrascheniya 07.06.2014.

SOFTWARE DEVELOPMENT FOR CUSTOM WEB SEARCHES

I.E. Strekalov, A.A. Novikov, D.V. Lopatin

Tambov State University named after G.R. Derzhavin Tambov, Russia. e-mail: [email protected]

This paper provides analysis of the most common methods of obtaining user queries. The main ways of getting user requests to web resources, highlighted their shortcomings.

Key words: development, method interception, user, web request, java, nettyio.

УДК 519.240

ИСПОЛЬЗОВАНИЕ ПЛП-ПОИСКА В ЗАДАЧАХ ОБРАБОТКИ РЕЗУЛЬТАТОВ ВЫЧИСЛИТЕЛЬНОГО ЭКСПЕРИМЕНТА

И.Н. Статников, Г.И. Фирсов

Институт машиноведения им. А.А. Благонравова РАН, Россия, г. Москва e-mail: [email protected]

В статье рассматривается возможность на основе планируемого вычислительного эксперимента на стадии математического моделирования эффективно строить свертки получаемой информации. Это позволяет строить непосредственную функциональную зависимость между параметрами и критериями качества динамической системы.

Ключевые слова: планирование вычислительных экспериментов, ЛП-сетки, имитационное моделирование, регрессионный анализ.

Проведение математических экспериментов, т.е. математическое моделирование, должно быть целенаправленным и оптимальным (хотя бы в смысле затрат машинного времени, что далеко не всегда является главным). Специфика различных областей научных исследований привела к разработке множества методов и их модификаций планирования экстремальных экспериментов. При исследовании машин и механизмов специфика этой области научного знания может быть обрисована следующим образом. Физические принципы и законы классической механики позволяют в большинстве случаев строить математические модели функционирования современных проектируемых технических систем. Такие модели представляют собой совокупность обыкновенных дифференциальных (линейных или нелинейных) уравнений, дифференциальных уравнений в частных производных, интегральных, интегро-диффе-

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ренциальных уравнений и различных функциональных ограничений. Наличие таких (имитационных) моделей и современной вычислительной техники позволяет уже на предварительной стадии исследования изучить особенности функционирования, т.е. динамические свойства проектируемого устройства.

С учетом рассмотренной специфики исследования задач механики машин авторами был предложен метод ПЛП-поиска (планируемого ЛП-поиска) [1-3], позволяющий, с одной стороны, на основе проведения вычислительных экспериментов осуществить квазиравномерный просмотр области исследуемых параметров О (а), а с другой стороны, в результате специального планирования этих экспериментов применить количественные оценки влияния варьируемых параметров а}- на анализируемые свойства машины (оценки, разработанные в математической статистике).

i Надоели баннеры? Вы всегда можете отключить рекламу.