Jak sprawdzić host na podstawie adresu IP
Śmobry..
Czasami przydać się może nam funkcja pobierająca Adres IP i zwracająca nam Adres DNS..
Do dzieła..
w sekcji uses dodajemy moduł WinSocks
Potem wklepujemy poniższą funkcję..
Potem wystarczy już tylko dać pod jakiś button ten kodzik:
Host1 to komponent Tedit
Żeby usprawnić nasz prościutki program można dodać kod do Edita, w który wpisujemy adres IP. Pozwoli nam to wpisywać tylko cyfry i kropki..
Dodatkowo można dodać procedurę, która nam poda adres IP na podstawie wpissanego DNSa...
A oto cały listing prościutkiego programu..
Potrzebne:
2 x TEdit
1 x TButton
2 x TLabel
Czasami przydać się może nam funkcja pobierająca Adres IP i zwracająca nam Adres DNS..
Do dzieła..
w sekcji uses dodajemy moduł WinSocks
Potem wklepujemy poniższą funkcję..
function IPAddrToName(IPAddr : String): String; var SockAddrIn: TSockAddrIn; HostEnt: PHostEnt; WSAData: TWSAData; begin WSAStartup($101, WSAData); SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr)); HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); if HostEnt<>nil then begin result:=StrPas(Hostent^.h_name) end else begin result:=''; end; end;
Potem wystarczy już tylko dać pod jakiś button ten kodzik:
Host1.text:= IPAddrToName(Edit1.Text);
Host1 to komponent Tedit
Żeby usprawnić nasz prościutki program można dodać kod do Edita, w który wpisujemy adres IP. Pozwoli nam to wpisywać tylko cyfry i kropki..
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', '.']) then Key := #0; end;
Dodatkowo można dodać procedurę, która nam poda adres IP na podstawie wpissanego DNSa...
procedure TForm1.HostNaIP(Sender: TObject); type pu_long = ^u_long; var WSAData : TWSAData; HostEnt : PHostEnt; InAddr : TInAddr; begin If WSAStartup($101, WSAData)<>0 Then Label2.Caption := 'Wystąpił błąd WSAStartup()' else begin HostEnt:=GetHostByName(JakisEdit.Text); InAddr.S_addr:=u_long(pu_long(HostEnt^.h_addr_list^)^); Label2.Caption :=inet_ntoa(InAddr); End; WSACleanup; end;
A oto cały listing prościutkiego programu..
Potrzebne:
2 x TEdit
1 x TButton
2 x TLabel
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls,winsock; type TForm1 = class(TForm) Edit1: TEdit; Host1: TMemo; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function IPAddrToName(IPAddr : String): String; var SockAddrIn: TSockAddrIn; HostEnt: PHostEnt; WSAData: TWSAData; begin WSAStartup($101, WSAData); SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr)); HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); if HostEnt<>nil then begin result:=StrPas(Hostent^.h_name) end else begin result:=''; end; end; procedure TForm1.Button1Click(Sender: TObject); begin //pobieranie DNSa Label1.Caption:= 'Czekaj...Trwa pobieranie danych'; Host1.text:= IPAddrToName(Edit1.Text); Label1.Caption := 'Pobieranie zakończone'; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', '.']) then Key := #0; //Kod determinujący wpisywanie tylko cyfr i kropek.. end; procedure TForm1.Edit1Click(Sender: TObject); begin Edit1.Clear; //jeżeli klikniemy w Edit na adres IP zostanie on wyczyszczony end; end.
2 komentarze
hehehe stary zle skopiowales moja podpowiedz z FAQ-a z jednej strony :P Chodzi mi o HostToIP, calosc wygalda tak:
uses Winsock;
...
procedure TForm1.HostNaIP(Sender: TObject);
type pu_long = ^u_long;
var WSAData : TWSAData;
HostEnt : PHostEnt;
InAddr : TInAddr;
begin
If WSAStartup($101, WSAData)<>0 Then
Label1.Caption := 'Wystąpił błąd!'
Else Begin
HostEnt:=GetHostByName('www.onet.pl');
InAddr.S_addr:=u_long(pu_long(HostEnt^.h_addr_list^)^);
Label1.Caption :=inet_ntoa(InAddr);
End;
WSACleanup;
end;
Chciałeś i masz