AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Indy und Ping

Ein Thema von JPSelter · begonnen am 24. Apr 2007 · letzter Beitrag vom 2. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#1

Indy und Ping

  Alt 24. Apr 2007, 08:39
Kann die ICMP Komponente von Indy mehr als nur pingen? Ich würde gerne hier im LAN eine IP in einen Rechnernamen auflösen. Geht das irgendwie?
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Indy und Ping

  Alt 24. Apr 2007, 10:01
Das Geht normal auch mit WinApi mitteln ohne Indy

hatte mal sowas zum holen der eigenen IP verwendet

Delphi-Quellcode:
function HoleIpAddresse: string;
var phoste: PHostEnt;
    Buffer: array [0..100] of char;
    WSAData: TWSADATA;
begin
    result := '';
    if WSAStartup($0101, WSAData) <> 0 then exit;
    GetHostName(Buffer,Sizeof(Buffer));
    phoste:=GetHostByName(buffer);
    if phoste = nil then
    result := '127.0.0.1
    else
    result := StrPas(inet_ntoa(PInAddr(phoste^.h_addr_list^)^));
    WSACleanup;
end;
Deine Stichworte wären da GetHostname und GetHostbyName...

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Indy und Ping

  Alt 24. Apr 2007, 10:53
GetHostname kennt er nicht, auch die Hilfe nicht. Es ist Delphi 7. Hmmmmmm...
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Indy und Ping

  Alt 24. Apr 2007, 11:10
hmm, ich habs in Delphi 4 verwendet, ist eine WinAPI.

hast du auch das winsöckchen(winsock) eingebunden, ohne läufts nicht.

Gruß Matthias

[EDIT] Mehr Infos darüber findest du in der "Platform SDK: Windows Sockets 2" im msdn mußt halt googeln, link hab ich nicht gespeichert [EDIT]
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Indy und Ping

  Alt 24. Apr 2007, 11:27
Ne, das könnte ich mal probieren... nach der Mittagspause. Mahlzeit!
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Indy und Ping

  Alt 24. Apr 2007, 13:14
Jetzt kennt er es, aber ich brauche ja etwas für eine andere IP
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: Indy und Ping

  Alt 24. Apr 2007, 13:54
Nur so nebenbei...

für was brauchst du das, du kannst dochmit sowohl IP als auch rechnerName einen anderen PC ansprechen.

Aber schön, deine WinAPI dazu heißt WNetEnumResource.

so als *zuggerl* wie man in Bayern sagt

Delphi-Quellcode:
type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array[0..100] of TNetResource;

function CreateNetResourceList(ResourceType: DWord;
                              NetResource: PNetResource;
                              out Entries: DWord;
                              out List: PNetResourceArray): Boolean;
var
  EnumHandle: THandle;
  BufSize: DWord;
  Res: DWord;
begin
  Result := False;
  List := Nil;
  Entries := 0;
  if WNetOpenEnum(RESOURCE_GLOBALNET,
                  ResourceType,
                  0,
                  NetResource,
                  EnumHandle) = NO_ERROR then begin
    try
      BufSize := $4000; // 16 kByte
      GetMem(List, BufSize);
      try
        repeat
          Entries := DWord(-1);
          FillChar(List^, BufSize, 0);
          Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
          if Res = ERROR_MORE_DATA then begin
            ReAllocMem(List, BufSize);
          end;
        until Res <> ERROR_MORE_DATA;

        Result := Res = NO_ERROR;
        if not Result then begin
          FreeMem(List);
          List := Nil;
          Entries := 0;
        end;
      except
        FreeMem(List);
        raise;
      end;
    finally
      WNetCloseEnum(EnumHandle);
    end;
  end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);

procedure ScanLevel(NetResource: PNetResource);
var
  Entries: DWord;
  NetResourceList: PNetResourceArray;
  i: Integer;
begin
  if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
    for i := 0 to Integer(Entries) - 1 do begin
      if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
        (NetResourceList[i].dwDisplayType = DisplayType) then begin
        List.AddObject(NetResourceList[i].lpRemoteName,
                      Pointer(NetResourceList[i].dwDisplayType));
      end;
      if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
        ScanLevel(@NetResourceList[i]);
    end;
  finally
    FreeMem(NetResourceList);
  end;
end;

begin
  ScanLevel(Nil);
end;
Aufruf im Programm dann z.B.

ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, irgendeinelistbox.Items); schon hast du alle rechnernamen im Netzwerk.

viel Spass damit
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Indy und Ping

  Alt 24. Apr 2007, 15:10
Das werd ich mir mal zu Gemüte führen, danke! Meine Software soll mir bei der Administration in der Firma helfen und dieser Programmteil scannt das Netzwerk durch, welche PCs online und offline sind. Und da ich auswendig nicht weiß, welche IP zu welchem Rechnernamen gehört, soll der Rechnername automatisch geholt werden. So zumindest die Theorie
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Indy und Ping

  Alt 2. Mai 2007, 12:56
So, habe endlich mal Zeit gehabt und es erfolgreich getestet. Nur eine Änderung müsste ich haben, die in da nicht rauslesen kann: Wie finde ich den Rechnernamen für genau EINE IP Adresse heraus?
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#10

Re: Indy und Ping

  Alt 2. Mai 2007, 13:00
Dann wäre das nicht GetHostByName, sondern GetHostByAddr:

Delphi-Quellcode:
function IPAddrToName(AIPAddr: string): string;
var SockAddrIn: TSockAddrIn;
    HostEnt: PHostEnt;
    WSAData: TWSAData;
begin
   WSAStartup($101, WSAData);
   try
      SockAddrIn.sin_addr.s_addr := inet_addr(PChar(AIPAddr));
      HostEnt := GetHostByAddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
      if Assigned(HostEnt)
       then Result := StrPas(Hostent^.h_name)
        else Result := '';
   finally
      WSACleanup;
   end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz