ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Определение IP сайта
  #1  
Старый 28.01.2010, 09:23
Аватар для marcos
marcos
Участник форума
Регистрация: 08.11.2009
Сообщений: 114
Провел на форуме:
201148

Репутация: -4
По умолчанию Определение IP сайта

Всем привет! Подскажите как определить IP у сайта[delphi]
 
Ответить с цитированием

  #2  
Старый 28.01.2010, 10:31
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

gethostbyname в winsock
 
Ответить с цитированием

  #3  
Старый 28.01.2010, 10:31
Аватар для 0rs
0rs
Познающий
Регистрация: 30.12.2008
Сообщений: 64
Провел на форуме:
647156

Репутация: 76
Отправить сообщение для 0rs с помощью ICQ
По умолчанию

Код:
uses Winsock; 

function GetIPFromHost(HostName:PChar): string; 
var 
	HEnt: pHostEnt; 
	WSAData: TWSAData; 
begin 
	WSAStartup($0101, WSAData);
	HEnt := gethostbyname(HostName);
	Result := inet_ntoa(PInAddr(HEnt^.h_addr_list^)^ );
	WSACleanup; 
end;
Ошибки проверяй сам

Последний раз редактировалось 0rs; 28.01.2010 в 10:59..
 
Ответить с цитированием

  #4  
Старый 28.01.2010, 10:40
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Главная ошибка многие - это писать в Делфи как хочется, а не как надо )
Я имею в виду правильность написания имен апи функция.
GetHostByName считается не правильным написание. Правильное gethostbyname итп.
и дело не в том что в делфи пофигу на регистр а в Си нет. А в том что это имена апишек и если искать их через GetProcAddress то важен регистр символов.

ПО этому лучше писать всё сразу в сишном стиле. Потому как это будет более удобно для переписывания на С/С++ (если конечно такое понадобиться когданить ))
 
Ответить с цитированием

  #5  
Старый 28.01.2010, 11:03
Аватар для 0rs
0rs
Познающий
Регистрация: 30.12.2008
Сообщений: 64
Провел на форуме:
647156

Репутация: 76
Отправить сообщение для 0rs с помощью ICQ
По умолчанию

Поправил регистр имен, но на С/С++ можно написать и более красиво, к тому же используется функция PInAddr которая есть только в Delphi.
 
Ответить с цитированием

  #6  
Старый 28.01.2010, 13:34
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

PInAddr это не функция это тип. И ты юзаешь его для преобразования.

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

Код:
ULONG Host2Ip(char * host)
{
	struct hostent * p;
	ULONG ret;

	p = gethostbyname(host);
	if (p)
	{
		ret = *(ULONG*)(p->h_addr);
	}
	else
	{
		ret = INADDR_NONE;
	}

	return ret;
}
 
Ответить с цитированием

  #7  
Старый 28.01.2010, 16:18
Аватар для Gar|k
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

slesh функция хороша и интелектуально понятно, но есть два факта
1) host ведь можно указать строкой "127.0.0.1"

Цитата:
Сообщение от Самоучитель игры на WINSOCK (c)Крис Касперски  
sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(PORT);
HOSTENT *hst;

// преобразование IP адреса из символьного в сетевой формат
if (inet_addr(SERVERADDR) != INADDR_NONE)
dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
else
{
// попытка получить IP адрес по доменному имени сервера
if (hst = gethostbyname(SERVERADDR))
// hst->h_addr_list содержит не массив адресов,
// а массив указателей на адреса
((unsigned long *)&dest_addr.sin_addr)[0] =
((unsigned long **)hst->h_addr_list)[0][0];
else
{
printf("Invalid address %s\n", SERVERADDR);
closesocket(my_sock);
WSACleanup();
return -1;
}
}
2) gethostbyname - у одного адреса может быть несколько ip адресов на то и массив в структуре HOSTENT

Код:
struct hostent
{
    char FAR * h_name;            // официальное имя узла
    char FAR * FAR * h_aliases;   // альтернативные имена узла (массив строк)
    short h_addrtype;             // тип адреса
    short h_length;               // длина адреса (как правило AF_INET)
    char FAR * FAR * h_addr_list; // список указателей на IP-адреса
                                  // ноль - конец списка
};
хотя и я ленюсь это учитывать
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программы для сайта Вконтакте. Fruit Социальные сети 3 05.01.2010 22:59
Шпаргалки для сертификатов по Битрикс Liar PHP, PERL, MySQL, JavaScript 7 30.05.2009 10:13
Раскрутка сайта heks Статьи 15 15.02.2009 19:51



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ