Программирование на C++ глазами хакера


Клиентские функции - часть 2


  • name — символьное имя компьютера, адрес которого надо определить;
  • buf — буфер, в который будет помещена структура hostent. Буфер должен иметь достаточный объем памяти. Максимальный размер можно определить с помощью макроса MAXGETHOSTSTRUCT;
  • buflen — длина буфера, указанного в четвертом параметре.
  • Теперь рассмотрим структуру hostent, с помощью которой получен результат:

    struct hostent { char FAR * h_name; char FAR * FAR * h_aliases; short h_addrtype; short h_length; char FAR * FAR * h_addr_list; };

    Проанализируем параметры структуры:

    • h_name — полное имя компьютера. Если в сети используется доменная система, то этот параметр будет содержать полное доменное имя;
    • h_aliases — дополнительное имя узла;
    • h_addrtype — тип возвращаемого адреса;
    • h_length — длина каждого адреса в списке адресов;
    • h_addr_list — список адресов компьютера.

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

    Теперь непосредственно функция соединения с сервером connect. Она выглядит следующим образом :

    int connect ( SOCKET s, const struct sockaddr FAR* name, int namelen );

    Параметры функции:

    • s — предварительно созданный сокет;
    • name — структура SOCKADDR, содержащая адрес сервера, к которому надо подключиться;
    • namelen — размер структуры SOCKADDR, указанной в качестве второго параметра.

    Во второй версии WinSock появилась функция WSAConnect:

    int WSAConnect ( SOCKET s, const struct sockaddr FAR * name, int namelen, LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS );

    Первые три параметра ничем не отличаются от параметров функции connect. Поэтому рассмотрим только новые:

    • lpCallerData — указатель на пользовательские данные, которые будут отправлены серверу во время установки соединения;
    • lpCalleeData — указатель на буфер, в который будут помещены переданные во время соединения данные.



    • Начало  Назад  Вперед



      Книжный магазин