Перейти до

Авторизатор по доменному имени


Рекомендованные сообщения

Хотелось бы в авторизаторе иметь возможность в адресе сервера прописывать не только ip адрес, но и доменное имя сервера.

Ибо так удобней, сменил в днсе ип, а клиентам ничего менять не нада. А то каждого оповещать о смене параметров...

Ссылка на сообщение
Поделиться на других сайтах

В исходниках авторизатора (2.55.7) ищем файл OptionsUnit.cpp

Там смотрим код:

void __fastcall TOptionsForm::OkBitBtnClick(TObject *Sender)
{
unsigned long ip = inet_addr(ServerIPEdit->Text.c_str());

if (ip == INADDR_NONE)
   {
   ShowMessage("Неверный IP!");
   ServerIPEdit->SetFocus();
   return;
   }

 

Как видим, идет простая проверка на превращение строки в ип-адрес.

 

Откопав у себя исходничек с таким кодом

struct hostent *phe; /* pointer to host information entry */

/* Map host name to IP address, allowing for dotted decimal */
if ( phe = gethostbyname(host) )
   memcpy(&sin.sin_addr, phe->h_addr, phe->h_length);
else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE )
   exit(1);

 

Я решил, что можно сделать что-нибудь приблизительно такое:

 

void __fastcall TOptionsForm::OkBitBtnClick(TObject *Sender)
{
struct hostent *phe; /* pointer to host information entry */
unsigned long ip;

/* Map host name to IP address, allowing for dotted decimal */
if (phe = gethostbyname(ServerIPEdit->Text.c_str()))
{
   ip = inet_addr(phe->h_addr);
}
else if ( (ip = inet_addr(ServerIPEdit->Text.c_str())) == INADDR_NONE )
{
ShowMessage("Неверный IP или домен!");
ServerIPEdit->SetFocus();
return;
}

 

Честно скажу, у себя не компилировал, не проверял.

Быть может вместо "ip = inet_addr(phe->h_addr);" нужно писать "ip = phe->h_addr".

 

А в целом оставляю, как домашнее задание для программистов )

Ссылка на сообщение
Поделиться на других сайтах


void __fastcall TOptionsForm::OkBitBtnClick(TObject *Sender)
{
struct hostent *phe; /* pointer to host information entry */
unsigned long ip;

/* Map host name to IP address, allowing for dotted decimal */
if (phe = gethostbyname(ServerIPEdit->Text.c_str()))
{
  ip = inet_addr(phe->h_addr);
}
else if ( (ip = inet_addr(ServerIPEdit->Text.c_str())) == INADDR_NONE )
{
ShowMessage("Неверный IP или домен!");
ServerIPEdit->SetFocus();
return;
}

Компилиццо и впринципе имена ресолвит, но подключки нет.

При вбивании доменного имени проверяет его на ресолв и в случае неудачи возвращает ошибку, при удаче проглатывает нормально.

А вот соединения нет. Причём если имя меняеь опять на ип адрес то всё нормально

 

ip = phe->h_addr
с этим не собирает

Вот

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...