Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.08;
Скачать: CL | DM;

Вниз

Определить IP-адрес компьютера   Найти похожие ветки 

 
mixamixa   (2003-03-14 07:24) [0]

Как определить IP-адрес компьютера по имени компьютера?


 
CAMOBAP ©   (2003-03-14 08:27) [1]

Компонент есть Ping на FPiette
Кидаешь на форму Ping, 2 эдита, кнопку и RichEdit.

procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.Lines.Add("Посик """ + Edit1.Text + """");
Ping1.Size:=StrToInt(Edit2.Text);
Ping1.DnsLookup(Edit1.Text);

end;

procedure TForm1.Ping1DnsLookupDone(Sender: TObject; Error: Word);
begin
//Если произошла ошибка то …
if Error <> 0 then
begin
//Вывести сообщение об ошибки.
RichEdit1.Lines.Add("Хост не найден """ + Edit1.Text + """");
//Выход.
Exit;
end;

//Если ошибок небыло, то выводим в RichEdit1 результат поиска.
RichEdit1.Lines.Add("Хост """ + Edit1.Text + """ - " + Ping1.DnsResult);

//Устанавливаем свойство Address компонента Ping в
//адрес найденный в базе DNS
Ping1.Address := Ping1.DnsResult;
//Запускаем Ping
Ping1.Ping;
end;

procedure TForm1.Ping1EchoReply(Sender, Icmp: TObject; Error: Integer);
begin
if Error = 0 then
RichEdit1.Lines.Add("Немогу выполнить операцию ping: "+Ping1.ErrorString)
else
RichEdit1.Lines.Add("Получено " + IntToStr(Ping1.Reply.DataSize)+
" байт от "+Ping1.HostIP+" за " + IntToStr(Ping1.Reply.RTT)+
" милисекунд");
end;

procedure TForm1.Ping1EchoRequest(Sender, Icmp: TObject);
begin
RichEdit1.Lines.Add("Посылка " + IntToStr(Ping1.Size) +
" байтов на " + Ping1.HostName);

end;

В первом едите пишешь имя компьютера, во втором размер пакета и нажимаешь кнопку.

Где взял этот код не помню, но где-то взял:)


 
dim- ©   (2003-03-14 08:36) [2]

Где-то нашел, работает.

unit GetIp;

interface
Uses Windows,WinSock, SysUtils;
Function GetIpPC(name:string):string;

implementation
type
ip_option_information = packed record // Информация заголовка IP (Наполнение
// этой структуры и формат полей описан в RFC791.
Ttl : byte; // Время жизни (используется traceroute-ом)
Tos : byte; // Тип обслуживания, обычно 0
Flags : byte; // Флаги заголовка IP, обычно 0
OptionsSize : byte; // Размер данных в заголовке, обычно 0, максимум 40
OptionsData : Pointer; // Указатель на данные
end;

icmp_echo_reply = packed record
Address : u_long; // Адрес отвечающего
Status : u_long; // IP_STATUS (см. ниже)
RTTime : u_long; // Время между эхо-запросом и эхо-ответом
// в миллисекундах
DataSize : u_short; // Размер возвращенных данных
Reserved : u_short; // Зарезервировано
Data : Pointer; // Указатель на возвращенные данные
Options : ip_option_information; // Информация из заголовка IP
end;

PIPINFO = ^ip_option_information;
PVOID = Pointer;

function IcmpCreateFile() : THandle; stdcall; external "ICMP.DLL" name "IcmpCreateFile";
function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external "ICMP.DLL" name "IcmpCloseHandle";
function IcmpSendEcho(
IcmpHandle : THandle; // handle, возвращенный IcmpCreateFile()
DestAddress : u_long; // Адрес получателя (в сетевом порядке)
RequestData : PVOID; // Указатель на посылаемые данные
RequestSize : Word; // Размер посылаемых данных
RequestOptns : PIPINFO; // Указатель на посылаемую структуру
// ip_option_information (может быть nil)
ReplyBuffer : PVOID; // Указатель на буфер, содержащий ответы.
ReplySize : DWORD; // Размер буфера ответов
Timeout : DWORD // Время ожидания ответа в миллисекундах
) : DWORD; stdcall; external "ICMP.DLL" name "IcmpSendEcho";


Function GetIpPC(name:string):string;
var
hIP : THandle;
pingBuffer : array [0..31] of Char;
pIpe : ^icmp_echo_reply;
pHostEn : PHostEnt;
wVersionRequested : WORD;
lwsaData : WSAData;
error : DWORD;
destAddress : In_Addr;
begin

// Создаем handle
hIP := IcmpCreateFile();

GetMem( pIpe,sizeof(icmp_echo_reply) + sizeof(pingBuffer));
pIpe.Data := @pingBuffer;
pIpe.DataSize := sizeof(pingBuffer);

wVersionRequested := MakeWord(1,1);
error := WSAStartup(wVersionRequested,lwsaData);
if (error <> 0) then
begin
result:="Ошибка";
Exit;
end;

pHostEn := gethostbyname(PChar(name));
error := GetLastError();
if (error <> 0) then
begin
result:="Ошибка";
Exit;
end;

destAddress := PInAddr(pHostEn^.h_addr_list^)^;

IcmpSendEcho(hIP,
destAddress.S_addr,
@pingBuffer,
sizeof(pingBuffer),
Nil,
pIpe,
sizeof(icmp_echo_reply) + sizeof(pingBuffer),5000);

error := GetLastError();
if (error <> 0) then
begin
result:="Ошибка";
Exit;
end;

result:=IntToStr(LoByte(LoWord(pIpe^.Address)))+"."+
IntToStr(HiByte(LoWord(pIpe^.Address)))+"."+
IntToStr(LoByte(HiWord(pIpe^.Address)))+"."+
IntToStr(HiByte(HiWord(pIpe^.Address)));
IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);
end;

end.


 
CAMOBAP ©   (2003-03-14 08:36) [3]

http://www.rtfm.be/fpiette/indexuk.htm
Тама есть этот компонент, бесплатный.
Извиняюсь сразу забыл сказать.



Страницы: 1 вся ветка

Текущий архив: 2003.05.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
9-22897
JB
2002-11-29 07:32
2003.05.08
3D Max и игры


14-23351
anpv
2003-04-20 14:07
2003.05.08
MySQL


3-22984
Tundra
2003-04-17 15:03
2003.05.08
Вопрос по Oracle - кто нибудь подскажите ?


3-22998
mic_2000
2003-04-17 11:30
2003.05.08
Массивы и хранимые процедуры в IB6


8-23247
linco
2003-01-30 08:55
2003.05.08
Перемещаемая линия?