Форум: "Сети";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизЗаполнение структуры PHostEnt Найти похожие ветки
← →
n_shadow (2006-12-20 17:23) [0]Нужно запонить каждый параметр структуры PHostEnt отдельно и в ручную. У меня ничего не получается, всё уже перепробовал, может кто поможет!? Заранее благодарен!
← →
Rouse_ © (2006-12-20 23:17) [1]
> отдельно и в ручную. У меня ничего не получается
Что значит не получается?Z: PHostEnt ;
Вышеописанный способ не заполняет структуру?
begin
New(Z);
try
Z^.h_name := "qwe";
ShowMessage(Z^.h_name);
finally
Dispose(Z);
end;
← →
n_shadow (2006-12-21 11:54) [2]Итак, есть функция:
function gethostbyname(name: PChar): PHostEnt; stdcall; Я подменяю данную функцию на свою новую и мне нужно заполнить структуру PHostEnt. Т.е. вписать ip адрес, имя хоста и т.д. полностью структуру:
h_name: PChar;
h_aliases: ^PChar;
h_addrtype: Smallint;
h_length: Smallint;
case Byte of
0: (h_addr_list: ^PChar);
1: (h_addr: ^PChar)
← →
Rouse_ © (2006-12-21 11:57) [3]показывай код...
← →
Плохиш © (2006-12-21 11:57) [4]Банально, конечно, но "Ошибка в 17й строке".
← →
n_shadow (2006-12-21 12:25) [5]function Newgethostbyname(name: PChar): PHostEnt; stdcall;
var Host: PHostEnt;
t: TInAddr;
begin
t.S_addr:=inet_addr(PChar("192.168.1.110"));
Host:=gethostbyaddr(@t, SizeOf(in_addr), AF_INET);
result:=Host;
end;
Вот пример, только в PHostEnt будет всё о хосте с ип адресом 192.168.1.110, если он ещё будет в сети, а мне надо самому заполнить структуру PHostEnt, чтобы туда записать любой ип адрес и имя.
← →
Anatoly Podgoretsky © (2006-12-21 12:38) [6]> n_shadow (21.12.2006 12:25:05) [5]
Не требуется, можешь даже шнурок из компьютера вытащить.
← →
Rouse_ © (2006-12-21 14:42) [7]
function Newgethostbyname(name: PChar): PHostEnt; stdcall;
var Host: PHostEnt;
t: TInAddr;
begin
Result := Orig_gethostbyname(name);
Result^.h_name := пиши что вздумается...
end;
← →
n_Shadow (2006-12-21 17:16) [8]Пишу же, что нужно полностью заполнить структуру PHostEnt. Да и не могу я вызвать Orig_gethostbyname(name) т.к. у меня перехват это функции происходит, ссылка будет всё равно на Newgethostbyname. Result^.h_name это не проблема, проблема в h_addr_list. Нужно не имя хоста, а ип адрес любой вписать.
← →
n_Shadow (2006-12-21 17:16) [9]Пишу же, что нужно полностью заполнить структуру PHostEnt. Да и не могу я вызвать Orig_gethostbyname(name) т.к. у меня перехват это функции происходит, ссылка будет всё равно на Newgethostbyname. Result^.h_name это не проблема, проблема в h_addr_list. Нужно не имя хоста, а ип адрес любой вписать.
← →
novill © (2006-12-21 17:27) [10]> [9] n_Shadow (21.12.06 17:16)
а как бы ты заполнял такую структуру?
hostent
{
char FAR* h_name;
char FAR FAR** h_aliases;
short h_addrtype;
short h_length;
char FAR FAR** h_addr_list;
} hostent;
← →
novill © (2006-12-21 17:36) [11]можно например так
Host.h_addr_list^:=Pchar("127.0.0.1");
← →
n_Shadow (2006-12-21 18:45) [12]
> можно например так Host.h_addr_list^:=Pchar("127.0.0.1");
Не, так не получится.
function Newgethostbyname(name: PChar): PHostEnt; stdcall;
var Host: PHostEnt;
t: TInAddr;
begin
t.S_addr:=inet_addr(PChar("127.0.0.1"));
Host:=gethostbyaddr(@t, SizeOf(in_addr), AF_INET);
Host.h_addr_list^:=PChar("192.168.1.110");
result:=Host;
end;
Результат: ип адрес 49.57.50.46! И это если учесть, что хост это я. А если его нет? Нужно полностью структуру заполнить, если этого не сделать, следовательно ошибка будет. Ип адрес просто так Host.h_addr_list^:=PChar("192.168.1.110"); не получится туда загнать.
← →
n_Shadow (2006-12-21 21:53) [13]Всем спасибо за помощь, я всё сделал!
← →
novill © (2006-12-22 09:24) [14]> [13] n_Shadow (21.12.06 21:53)
Ну покажи как сделал-то. А то "так не получится", "так не получится"...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c