Jak dodac do memo wszystkie nazwy komputerow z sieci i ich ip w takiej formie?
Komputer1<:>Ip1
Komputer2<:>Ip2
Komputer3<:>Ip3
...
Prosilbym o jakis przyklad kodu, nigdzie nic na ten temat nie znalazlem. Z gory dziekuje za odpowiedz.
zaznajom się z WNetEnumResource ale łatwiej jest zrobić żeby skanowało wszystkie IP od np 192.168.1.1 do 192.168.1.100 i zapisywało jakie komputery im są przypisane. Do zamiany IP na nazwę komputera (hosta - ale dla lokalnych komputerów to to samo) słuzy polecenie gethostbyaddr
procedurka z jednego programiku:
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;
begin
ShowMessage('Gość o IP 192.168.1.1 ma nazwę '+IPAddrToName('192.168.1.1'));
end;
Wszystko fajnie, ip pobiera, ale jest taka sprawa, ze np. w niektorych sieciach ip jest od 192.168.2.1 do 192.168.2.100, ale nie o to chodzi. Ta procedura ktora dales zawiesza program, jezeli taki ip nie istnieje, czy da sie moze jakos sprawdzic czy taki ip istnieje w sieci?
jasne pingujesz IP przy pomocy komponentów Indy.
daj na formę TIdIcmpClient i daj nazwę "klient" i skorzystaj z procki
function TForm1.pinguj(ip:string):boolean;
begin
klient.Host:=ip;
klient.TTL:=1;
klient.ReceiveTimeout:=50;
klient.Ping;
if klient.ReplyStatus.ReplyStatusType=rsEcho then Result:=true else Result:=false;
end;
przykład: pinguj('192.168.2.2');
ale jest taka sprawa, ze np. w niektorych sieciach ip jest od 192.168.2.1
wiem u mnie w sieci też jest z dwójką tylko podałem 1 bo wiem że tak jest w większości sieci.
PS. próba zpingowania 127.0.0.1 trochę potrwa a nic nie poda
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.