- Как настроить windows sockets
- Понятие windows sockets приложения
- Список сокетов приложений в Windows
- Как посмотреть сокеты приложений у вас на компьютере
- Как изменить время жизни сокета
- Как узнать PID приложения
- Сокеты Windows. Использование класса CAsyncSocket Windows Sockets: Using Class CAsyncSocket
- Создание и использование объекта CAsyncSocket Creating and Using a CAsyncSocket Object
- Использование CAsyncSocket To use CAsyncSocket
- Ваши обязанности с CAsyncSocket Your Responsibilities with CAsyncSocket
Как настроить windows sockets
Добрый день, уважаемые посетители и читатели блога, недавно я на одном из форумов наткнулся на дискуссию, на тему того, что такое сокеты windows и как их посмотреть и подумал, что это неплохая тема для статьи. Подумал и написал :)). Думаю эта заметка будет полезна начинающим системным администраторам, в понимании того, как на транспортном уровне модели OSI найти проблему или проверить доступность приложения по номеру порта, хочу отметить, что эти знания фундаментальные, и их понимание заложит в вас отличную базу, для дальнейшей работы, на любом предприятии.
Понятие windows sockets приложения
Что такое сокет — это по сути область оперативной памяти, в которой на определенном сетевом порту (TCP/UDP) работает приложение, и именно оно прослушивает нужный порт. Какая задача стояла перед программистами, задача простая переместить информацию из оперативной памяти одного компьютера, в оперативную память другого компьютера. Дальше это может быть представлено как:
Номер сокета Windows, это номер ячейки оперативной памяти к которому привязано приложение. Приложение привязавшись к некой области оперативной памяти начинает туда писать данные и сокет из этой области памяти начинает мелкими пакетами по 65 кбайт, начинает передавать в сеть на другое устройство. На другой стороне эти кусочки, так же помещаются в ОЗУ, желательно в той же последовательности, и сокет с той стороны начинает их разбирать, и представлять пользователю из какого то приложения.
Список сокетов приложений в Windows
У меня стоит операционная систем Windows 8.1, показывать я буду все на ней, в прошлый раз мы кстати в ней лечили баг, что был не найден run vbs. Для того, чтобы посмотреть какие сокеты соответствуют каким приложениям и каким TCP/UDP портам, вы должны перейти в директорию
и отыскать там файл services, он будет без расширения, но его можно открыть правой кнопкой мыши через обычный блокнот, у меня это будет notepad++.
Открыв данный файл вы увидите название службы (приложения) номер сокета (TCP/UDP) и описание. Для примера видно, что сервер ftp работает по портам 20 и 21. По сути тут системе и задаются стандарты по которым должны работать службы.
Как посмотреть сокеты приложений у вас на компьютере
Тут два метода которыми я пользуюсь. Представим себе ситуацию, что вы установили некое приложение, все работает пытаетесь на него попасть с другого компьютера по сети, но не можете. Отключаете брандмауэр на том компьютере, и все начинает работать, вывод блокируется какой то порт этого приложения. Его вычислить поможет нам две утилиты, первая из командной строки, а вторая имеет удобный графический интерфейс.
Более подробно про утилиту netstat и ее использование читайте по ссылке. В итоге вы получите сводную таблицу, в которой будет вот, что интересно:
- Тип протокола — TCP или UDP
- Адрес отправителя с указанием портов
- Адрес получателя с указанием портов
- Состояние — либо слушает либо установил соединение и закрыто
- PID это номер идентифицирующий приложение
Как видите в примере у меня много сессий по 443 и 80 порту по сути это браузер Google Chrome.
Приложение заняв сокет, уже не позволит на нем же открыться другому приложению, Сокет живет минут 10.
Как изменить время жизни сокета
Для того, чтобы в операционной системе Windows изменить TTL или как его еще называют время жизни сокета, вам необходимо воспользоваться реестром. Открываете редактор реестра Windows 8.1. Переходите в раздел
Там есть ключ TcpTimedWaitDelay, если его нет то нужно его создать. Укажите нужное вам десятичное значение. TcpTimedWaitDelay — Этот параметр определяет интервал времени, в течение которого подключение находится в состоянии TIME_WAIT, прежде чем будет закрыто. Пока подключение находится в состоянии TIME_WAIT, пара сокетов не может быть использована повторно (это т. н. «состояние 2MSL»). Согласно документу RFC793, данное значение должно в два раза превышать максимальное время жизни пакета в сети.
Как узнать PID приложения
Для того, чтобы узнать PID приложения в Windows, вам нужно в области пуск кликнуть правой кнопкой мыши и из контекстного меню выбрать Диспетчер задач
В диспетчере задач, найдите поле ИД процесса .если его не будет то добавьте.
Теперь давайте смотреть, в правой части я вижу приложение skype и оно имеет PID 4352, смотрим в левой части экрана и видим порты и Ip адрес, которые слушает данной приложение.
Ну и еще есть утилита TCPView, про нее я уже отдельно писал. Утилита бесплатная и имеет графический интерфейс, запустив ее вы сразу видите кому какой PID принадлежит. Так же видно все сокеты и их состояния.
Думаю, у вас теперь не должно быть вопроса, что такое сокеты windows и как их посмотреть, всем спасибо за прочтение.
Сокеты Windows. Использование класса CAsyncSocket Windows Sockets: Using Class CAsyncSocket
В этой статье объясняется, как использовать класс CAsyncSocket. This article explains how to use class CAsyncSocket. Имейте в виду, что этот класс инкапсулирует API Windows Sockets на очень низком уровне. Be aware that this class encapsulates the Windows Sockets API at a very low level. CAsyncSocket предназначен для использования программистами, которые узнают о сетевом взаимодействии, но хотят использовать обратные вызовы для уведомления о сетевых событиях. CAsyncSocket is for use by programmers who know network communications in detail but want the convenience of callbacks for notification of network events. Основываясь на этом предположении, в этой статье содержится только основная инструкция. Based on this assumption, this article provides only basic instruction. Вы, вероятно, рассмотрите возможность использования, CAsyncSocket Если вы хотите, чтобы использование сокетов Windows было удобным для работы с несколькими сетевыми протоколами в приложении MFC, но не хотите пожертвовать гибкостью. You should probably consider using CAsyncSocket if you want Windows Sockets’ ease of dealing with multiple network protocols in an MFC application but do not want to sacrifice flexibility. Кроме того, вы можете получить лучшую эффективность благодаря более эффективному программированию взаимодействия, чем использовать более общую альтернативную модель класса CSocket . You might also feel that you can get better efficiency by programming the communications more directly yourself than you could using the more general alternative model of class CSocket .
CAsyncSocket описывается в справочнике по MFC. CAsyncSocket is documented in the MFC Reference. Visual C++ также предоставляет спецификацию сокетов Windows, расположенную в Windows SDK. Visual C++ also supplies the Windows Sockets specification, located in the Windows SDK. Сведения отправляются по левому краю. The details are left to you. Visual C++ не предоставляет пример приложения для CAsyncSocket . Visual C++ does not supply a sample application for CAsyncSocket .
Если вы не обладаете широкими знаниями о сетевых подключениях и хотите использовать простое решение, используйте класс CSocket с CArchive объектом. If you are not highly knowledgeable about network communications and want a simple solution, use class CSocket with a CArchive object. Дополнительные сведения см. в разделе сокеты Windows: Использование сокетов с архивами . See Windows Sockets: Using Sockets with Archives for more information.
В этой статье рассматриваются следующие вопросы: This article covers:
Создание и использование CAsyncSocket объекта. Creating and using a CAsyncSocket object.
Создание и использование объекта CAsyncSocket Creating and Using a CAsyncSocket Object
Использование CAsyncSocket To use CAsyncSocket
Создайте объект CAsyncSocket и используйте объект для создания базового маркера сокета . Construct a CAsyncSocket object and use the object to create the underlying SOCKET handle.
Создание сокета соответствует шаблону MFC для создания двух этапов. Creation of a socket follows the MFC pattern of two-stage construction.
Пример: For example:
Первый приведенный выше конструктор создает CAsyncSocket объект в стеке. The first constructor above creates a CAsyncSocket object on the stack. Второй конструктор создает объект CAsyncSocket в куче. The second constructor creates a CAsyncSocket on the heap. Первый вызов CREATE выше использует параметры по умолчанию для создания сокета потока. The first Create call above uses the default parameters to create a stream socket. Второй Create вызов создает сокет датаграммы с указанным портом и адресом. The second Create call creates a datagram socket with a specified port and address. (Можно использовать любую из Create версий с любым методом создания.) (You can use either Create version with either construction method.)
Параметры Create : The parameters to Create are:
«Port»: короткое целое число. A «port»: a short integer.
Для сокета сервера необходимо указать порт. For a server socket, you must specify a port. Для сокета клиента обычно принимается значение по умолчанию для этого параметра, что позволяет использовать сокеты Windows для выбора порта. For a client socket, you typically accept the default value for this parameter, which lets Windows Sockets select a port.
Тип сокета: SOCK_STREAM (по умолчанию) или SOCK_DGRAM. A socket type: SOCK_STREAM (the default) or SOCK_DGRAM.
Адрес сокета, например «ftp.microsoft.com» или «128.56.22.8». A socket «address,» such as «ftp.microsoft.com» or «128.56.22.8».
Это IP-адрес в сети. This is your Internet Protocol (IP) address on the network. Вы, вероятно, всегда полагаетесь на значение по умолчанию для этого параметра. You will probably always rely on the default value for this parameter.
Термины «порт» и «адрес сокета» описаны в подокнах сокетов Windows: порты и адреса сокетов. The terms «port» and «socket address» are explained in Windows Sockets: Ports and Socket Addresses.
Если сокет является клиентом, подключите объект сокета к сокету сервера с помощью CAsyncSocket:: Connect. If the socket is a client, connect the socket object to a server socket, using CAsyncSocket::Connect.
Если сокет является сервером, задайте для сокета начало прослушивания (с помощью CAsyncSocket:: Listen) для попыток подключения клиента. If the socket is a server, set the socket to begin listening (with CAsyncSocket::Listen) for connect attempts from a client. После получения запроса на подключение примите его с помощью CAsyncSocket:: Accept. Upon receiving a connection request, accept it with CAsyncSocket::Accept.
После принятия подключения можно выполнять такие задачи, как проверка паролей. After accepting a connection, you can perform such tasks as validating passwords.
Accept Функция-член принимает ссылку на новый пустой CSocket объект в качестве параметра. The Accept member function takes a reference to a new, empty CSocket object as its parameter. Этот объект необходимо создать перед вызовом метода Accept . You must construct this object before you call Accept . Если этот объект сокета выходит за пределы области действия, соединение закрывается. If this socket object goes out of scope, the connection closes. Не вызывайте Create этот новый объект сокета. Do not call Create for this new socket object. Пример см. в статье сокеты Windows: последовательность операций. For an example, see the article Windows Sockets: Sequence of Operations.
Выполните обмен данными с другими сокетами, вызвав CAsyncSocket функции-члены объекта, которые инкапсулируют функции API сокетов Windows. Carry out communications with other sockets by calling the CAsyncSocket object’s member functions that encapsulate the Windows Sockets API functions.
См. спецификацию сокетов Windows и класс CAsyncSocket в справочнике по MFC. See the Windows Sockets specification and class CAsyncSocket in the MFC Reference.
Удалите CAsyncSocket объект. Destroy the CAsyncSocket object.
Если объект сокета был создан в стеке, его деструктор вызывается, когда содержащая ее функция выходит за пределы области. If you created the socket object on the stack, its destructor is called when the containing function goes out of scope. Если вы создали объект сокета в куче с помощью new оператора, вы несете ответственность за использование delete оператора для уничтожения объекта. If you created the socket object on the heap, using the new operator, you are responsible for using the delete operator to destroy the object.
Перед уничтожением объекта деструктор вызывает функцию закрытия элемента объекта. The destructor calls the object’s Close member function before destroying the object.
Пример этой последовательности в коде (на самом деле для CSocket объекта) см. в разделе сокеты Windows: последовательность операций. For an example of this sequence in code (actually for a CSocket object), see Windows Sockets: Sequence of Operations.
Ваши обязанности с CAsyncSocket Your Responsibilities with CAsyncSocket
При создании объекта класса CAsyncSocketобъект инкапсулирует маркер Windows Socket и предоставляет операции с этим маркером. When you create an object of class CAsyncSocket, the object encapsulates a Windows SOCKET handle and supplies operations on that handle. При использовании вы CAsyncSocket должны иметь дело со всеми проблемами, которые могут возникнуть при непосредственном использовании API. When you use CAsyncSocket , you must deal with all the issues you might face if using the API directly. Пример: For example:
Сценарии блокировки. «Blocking» scenarios.
Различия порядка байтов между отправляющей и принимающей машинами. Byte order differences between the sending and receiving machines.
Преобразование между строками Юникода и многобайтовой кодировкой (MBCS). Converting between Unicode and multibyte character set (MBCS) strings.
Несмотря на эти проблемы, класс CAsycnSocket может быть правильным выбором, если ваше приложение требует всей гибкости и управления, которые можно получить. Despite these issues, class CAsycnSocket may be the right choice for you if your application requires all the flexibility and control you can get. Если нет, вместо этого следует использовать класс CSocket . If not, you should consider using class CSocket instead. CSocket скрывает от вас много деталей: он переносит сообщения Windows во время блокирующих вызовов и предоставляет вам доступ к CArchive , который управляет различиями порядка байтов и преобразованием строк. CSocket hides a lot of detail from you: it pumps Windows messages during blocking calls and gives you access to CArchive , which manages byte order differences and string conversion for you.
Дополнительные сведения см. в разделе: For more information, see: