Keep alive application windows

SO_KEEPALIVE socket option

The SO_KEEPALIVE socket option is designed to allow an application to enable keep-alive packets for a socket connection.

To query the status of this socket option, call the getsockopt function. To set this option, call the setsockopt function with the following parameters.

Socket option value

The constant that represents this socket option is 0x0008.

Syntax

Parameters

A descriptor identifying the socket.

The level at which the option is defined. Use SOL_SOCKET for this operation.

The socket option for which the value is to be set. Use SO_KEEPALIVE for this operation.

A pointer to the buffer containing the value for the option to set. This parameter should point to buffer equal to or larger than the size of a DWORD value.

This value is treated as a boolean value with 0 used to indicate FALSE (disabled) and a nonzero value to indicate TRUE (enabled).

A pointer to the size, in bytes, of the optval buffer. This size must be equal to or larger than the size of a DWORD value.

Return value

If the operation completes successfully, setsockopt returns zero.

If the operation fails, a value of SOCKET_ERROR is returned and a specific error code can be retrieved by calling WSAGetLastError.

Error code Meaning
WSANOTINITIALISED A successful WSAStartup call must occur before using this function.
WSAENETDOWN The network subsystem has failed.
WSAEFAULT One of the optval or the optlen parameters point to memory that is not in a valid part of the user address space. This error is also returned if the value pointed to by the optlen parameter is less than the size of a DWORD value.
WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.
WSAEINVAL The level parameter is unknown or invalid. On WindowsВ Vista and later, this error is also returned if the socket was in a transitional state.
WSAENOPROTOOPT The option is unknown or unsupported by the indicated protocol family. This error is returned if the socket descriptor passed in the s parameter was for a datagram socket.
WSAENOTSOCK The descriptor is not a socket.

Remarks

The getsockopt function called with the SO_KEEPALIVE socket option allows an application to retrieve the current state of the keepalive option, although this is feature not normally used. If an application needs to enable keepalive packets on a socket, it justs calls the setsockopt function to enable the option.

The setsockopt function called with the SO_KEEPALIVE socket option allows an application to enable keep-alive packets for a socket connection. The SO_KEEPALIVE option for a socket is disabled (set to FALSE) by default.

When this socket option is enabled, the TCP stack sends keep-alive packets when no data or acknowledgement packets have been received for the connection within an interval. For more information on the keep-alive option, see section 4.2.3.6 on the Requirements for Internet Hosts—Communication Layers specified in RFC 1122 available at the IETF website. (This resource may only be available in English.)

The SO_KEEPALIVE socket option is valid only for protocols that support the notion of keep-alive (connection-oriented protocols). For TCP, the default keep-alive timeout is 2 hours and the keep-alive interval is 1 second. The default number of keep-alive probes varies based on the version of Windows.

The SIO_KEEPALIVE_VALS control code can be used to enable or disable keep-alive, and adjust the timeout and interval, for a single connection. If keep-alive is enabled with SO_KEEPALIVE, then the default TCP settings are used for keep-alive timeout and interval unless these values have been changed using SIO_KEEPALIVE_VALS.

The default system-wide value of the keep-alive timeout is controllable through the KeepAliveTime registry setting which takes a value in milliseconds. The default system-wide value of the keep-alive interval is controllable through the KeepAliveInterval registry setting which takes a value in milliseconds.

On WindowsВ Vista and later, the number of keep-alive probes (data retransmissions) is set to 10 and cannot be changed.

On Windows ServerВ 2003, WindowsВ XP, and WindowsВ 2000, the default setting for number of keep-alive probes is 5. The number of keep-alive probes is controllable through the TcpMaxDataRetransmissions and PPTPTcpMaxDataRetransmissions registry settings. The number of keep-alive probes is set to the larger of the two registry key values. If this number is 0, then keep-alive probes will not be sent. If this number is above 255, then it is adjusted to 255.

On WindowsВ Vista and later, the SO_KEEPALIVE socket option can only be set using the setsockopt function when the socket is in a well-known state not a transitional state. For TCP, the SO_KEEPALIVE socket option should be set either before the connect function (connect, ConnectEx, WSAConnect, WSAConnectByList, or WSAConnectByName) is called, or after the connection request is actually completed. If the connect function was called asynchronously, then this requires waiting for the connection completion before trying to set the SO_KEEPALIVE socket option. If an application attempts to set the SO_KEEPALIVE socket option when a connection request is still in process, the setsockopt function will fail and return WSAEINVAL.

On Windows ServerВ 2003, WindowsВ XP, and WindowsВ 2000, the SO_KEEPALIVE socket option can be set using the setsockopt function when the socket is a transitional state (a connection request is still in progress) as well as a well-known state.

Ускорение Работы Сайта — Включение Режима Keep-Alive

Введение

Как работает режим Keep-Alive?

В этом руководстве вы научитесь 4 способам, как включить режим Keep-Alive. Keep-Alive позволяет браузеру пользователя скачивать весь необходимый контент (такой как JavaScript, CSS, изображения, видео и т.д.) через постоянное TCP соединение, вместо создания нескольких запросов для каждого файла. Это обеспечит скорость и производительность, так как браузер вашего посетителя сможет получить все из одного, постоянного HTTP соединения. Простыми словами, Keep-Alive — это форма связи между сервером и браузером способная серьезно уменьшить количество запросов и скорость загрузки страницы. Эта схема позволит вам понять разницу и преимущество режима Keep-Alive:

Преимущества режима Keep-Alive:

  • Keep-Alive сокращает использование ресурсов сервера из-за меньшего количества сгенерированных HTTP запросов. Это приносит пользу всем пользователям, независимо от их хостинга (бесплатного, виртуального или VPS).
  • Режим Keep-Alive обеспечивает конвейерность (доставку запросов через одно и тоже TCP соединение).
  • HTTPS запросам нужно больше времени и ресурсов центрального процессора. Если вы используете HTTPS и SSL, Keep-Alive станет еще более полезен.
  • Уменьшение задержки, общее увеличение скорости загрузки и производительности.
  • Keep-Alive поддерживается всеми современными браузерами.
  • Режим Keep-Alive также принесет вам пользу в сфере SEO оптимизации, из-за лучшей производительности сайта.

После всего этого, можно с уверенностью сказать, что Keep-Alive это отличный способ для уменьшения использования ресурсов сервера, и в то же время увеличения скорости загрузки вашего сайта.

Что вам понадобится

Перед тем, как вы начнете это руководство, вам понадобится следующее:

  • Доступ к файлу .htaccess
  • Доступ к httpd.conf (необязательно)
  • Доступ к HttpCoreModule (необязательно)

Шаг 1 — Анализ вашего сайта

Во-первых, вы должны проанализировать ваш сайт с помощью таких инструментов как GTMetrix, чтобы определить включен ли режим Keep-Alive на вашем сервере. Вот результаты после анализа тестовой страницы:

На некоторых серверах или провайдерах услуг хостинга режим Keep-Alive включен по умолчанию. Если ваши результаты выдают 100%, значит вам нет необходимости производить какие-либо действия.

Шаг 2 — Включение режима Keep-Alive

Существует несколько способов включения режима Keep-Alive и их выбор зависит от вашего сервера или провайдера услуг хостинга. Вот несколько вариантов:

Вариант 1 — Редактирование файла .htaccess

Добавление данного кода в ваш файл .htaccess должно помочь включить режим Keep-Alive. Включение режима Keep-Alive через .htaccess заменит собой любые настройки сервера и включит постоянное соединение.

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

Вариант 2 — Включение режима Keep-Alive в Apache через файл httpd.conf

Если у вас есть доступ к файлу настроек Apache, вы можете включить режим оттуда. Вот как должны выглядеть настройки:

  • KeepAlive On включает режим Keep-Alive.
  • MaxKeepAliveRequests устанавливает максимальное количество запросов для одного соединения. 50 запросов для одного соединения считается оптимальным.
  • KeepAliveTimeout определяет, как долго сервер будет ожидать запрос от клиента. Рекомендуется начать с меньших значений, таких как 5 или 10 секунд и увеличивать их по мере необходимости. Выставление слишком больших значений может увеличить нагрузку на сервер.

Если вы не можете найти файл httpd.conf, запустите следующую команду в командной строке:

Вариант 3 — Включение Keep-Alive в NGINX

В NGINX, Keep-Alive по умолчанию обычно включен. Однако в некоторых случаях он может быть выключен. Вы можете включить его используя HttpCoreModule. Найдите значение keepalive_disable, которое в большинстве случаев является причиной его отключения. Перед внесением каких-либо изменений убедитесь, что узнали причину по которой он был отключен.

Вариант 4 — Сервер Windows (IIS)

Если вы используете сервер на базе Windows, вы можете легко включить режим Keep-Alive используя командную строку.

Данная команда включит режим Keep-Alive:

На случай если вы захотите его отключить используйте эту:

Вы также можете обратиться к официальному руководству от Microsoft на эту тему.

Шаг 3 — Проверка изменений

После того, как режим Keep-Alive полностью включен, запустите еще один анализ в GTMetrix или любом другом сайте по анализу производительности. Вот результаты тестового сайта после включения режима Keep-Alive:

Также можно узнать работает ли Keep-Alive проверив header вашего HTTP. Это может быть сделано через терминал, используя следующую команду:

Часть кода Connection: keep-alive означает, что режим Keep-Alive полностью функционирует.

Заключение

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

Атаки на веб-приложения с помощью keep-alive

Большинство современных серверов поддерживает соединения keep-alive . Если на страницах много медиаконтента, то такое соединение поможет существенно ускорить их загрузку. Но мы попробуем использовать keep-alive для куда менее очевидных задач.

How it works

Прежде чем переходить к нестандартным способам применения, расскажу, как работает keep-alive . Процесс на самом деле прост донельзя — вместо одного запроса в соединении посылается несколько, а от сервера приходит несколько ответов. Плюсы очевидны: тратится меньше времени на установку соединения, меньше нагрузка на CPU и память. Количество запросов в одном соединении, как правило, ограничено настройками сервера (в большинстве случаев их не менее нескольких десятков). Схема установки соединения универсальна:

  1. В случае с протоколом HTTP/1.0 первый запрос должен содержать заголовок Connection: keep-alive.
    Если используется HTTP/1.1 , то такого заголовка может не быть вовсе, но некоторые серверы будут автоматически закрывать соединения, не объявленные постоянными. Также, к примеру, может помешать заголовок Expect: 100-continue. Так что рекомендуется принудительно добавлять keep-alive к каждому запросу — это поможет избежать ошибок.

Expect принудительно закрывает соединение

Хакер #196. Все о Docker

Иногда даже после корректного завершения запроса схема keep-alive не отрабатывает из-за неопределенных магических особенностей сервера и сценария, к которому обращен запрос. В таком случае может помочь принудительная инициализация соединения путем передачи в первом запросе HEAD.

Запрос HEAD запускает последовательность keep-alive

Тридцать по одному или один по тридцать?

Как бы забавно это ни звучало, но первый и самый очевидный профит — это возможность ускориться при некоторых видах сканирования веб-приложений. Разберем простой пример: нам нужно проверить определенный XSS-вектор в приложении, состоящем из десяти сценариев. Каждый сценарий принимает по три параметра.

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

import socket, time, re print(«\n\nScan is started. \n») s_time = time.time() for pg_n in range(0,10): for prm_n in range(0,3): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((«host.test», 80)) req = «GET /page»+str(pg_n)+».php?param»+str(prm_n)+»= HTTP/1.1\r\nHost: host.test\r\nConnection: close\r\n\r\n» s.send(req) res = s.recv(64000) pattern = » HTTP/1.1\r\nHost: host.test\r\nConnection: keep-alive\r\n\r\n» req += «HEAD /page0.php HTTP/1.1\r\nHost: host.test\r\nConnection: close\r\n\r\n» s.send(req) # Timeout for correct keep-alive time.sleep(0.15) res = s.recv(640000000) pattern = «

Check Also

Занимательная форензика. Извлекаем пароль из дампа памяти с помощью Volatility и GIMP

Задачи на форензику (криминалистику) в соревнованиях Capture The Flag делятся на несколько…

Читайте также:  Эмулятор сега для linux
Оцените статью