Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Wie bestehende LAN-Verbindungen (IP's) ermitteln? (https://www.delphipraxis.net/47866-wie-bestehende-lan-verbindungen-ips-ermitteln.html)

zecke 17. Jun 2005 03:05


Wie bestehende LAN-Verbindungen (IP's) ermitteln?
 
:hi:

ich wollte ein kleines tool erstellen, bei dem man prüft zu welchen IP's eine Netzwerkverbindung (LAN) besteht und diese dann in einer ListBox oder Memo ausgeben. Problem: Ich habe noch nie etwas in dieser Richtung getan (mit Delphi).

Bei meinen Recherchen bin ich auf TidICMPClient und IsNetWorkAlive gestoßen. TidICMPClient habe ich bereits getestet, und ich nehme an, dass die Ausgabe (Zahl) beim OnReply dem Port entspricht (welchem kA).

Wie und mit welchen Komponenten kann ich die oben beschriebene Idee am besten, unkompliziertesten, einfachsten UND schnellsten (kurz gesagt: am TOLLSTEN :mrgreen:) umsetzen:?:

bin für jede antwort dankbar! :)

svenwel.de 17. Jun 2005 03:54

Re: Wie bestehende LAN-Verbindungen (IP's) ermitteln?
 
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;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;
Mit Freundlichen grüßen von google.de und SwissDelphiCenter.ch :zwinker:

zecke 17. Jun 2005 14:02

Re: Wie bestehende LAN-Verbindungen (IP's) ermitteln?
 
-_- danke. werde es mal bei der LAN nachher testen. Also das läuft schon mal ohne Zicken zu machen :D

:thumb:

zecke 17. Jun 2005 20:58

Re: Wie bestehende LAN-Verbindungen (IP's) ermitteln?
 
:hi:

scheint zu funktionieren - danke!

problem nur, dass er den rechnernamen ausgibt, ich bräuchte noch die IP. kannst du mir verraten wie auch an diese komme. (deswegen in im topic des threads "(IP's)" :mrgreen:

aber der grundstein ist gesetzt, thx :thumb:

[edit]

kurz gesagt: ich möchte die IP anzeigen, mit welcher der eigene PC über LAN eine verbindung hat

[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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