Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Alle PC-Namen eines Netzwerkes erhalten (https://www.delphipraxis.net/6213-alle-pc-namen-eines-netzwerkes-erhalten.html)

Christian Seehase 7. Sep 2003 13:13

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Matze,

so, fertig. Frisch überpoliert ;-)

Wie sich das Programm jetzt auf (grössere) Netzwerke auswirkt weiss ich natürlich, mangels Testmöglichkeit nicht, aber abbrechen kann man immer (zur Not mit ESC)

Schau's Dir mal an.

Der prinzipielle Ablauf
  1. Ermitteln aller IP-Adress/Subnetmask Kombinationen des Rechners
    (z.B. 192.168.1.20 / 255.255.255.0)
  2. Ping auf alle daraus resultierenden möglichen Adressen (192.168.1.0 bis 192.168.1.255)
  3. War der Ping erfolgreich (Timeout ist einstellbar bis hinunter zu 100ms, 500ms sollten i.d.R. aber nicht unterschritten werden), wird versucht den Rechnernamen zu ermitteln

Sollten mehrere IP-Adressen vorhanden sein, kannst Du auch die Bereiche auswählen.

Sollte bei einem Rechner, von dem Du genau weisst, dass er vorhanden ist, und einen Namen hat die Meldung kommen, dass der Name nicht ermittelt werden konnte kannst Du abbrechen, dann funktioniert die Methode nicht.

Grundsätzlich müsste sich das Programm verhalten wie ein Ping -a

Matze 8. Sep 2003 12:02

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Vielen Dank Christian! :D

Am Dienstag werde ich es ausprobieren, wenn ich Zeit hab. Dann sag ich Bescheid, ob's geklappt hat!

Matze 8. Sep 2003 16:35

Re: Alle PC-Namen eines Netzwerkes erhalten
 
@Christian: Kann ich das auch so einstellen, dass ich eine IP eingebe und er dann von dieser aus hochzählt??

Christian Seehase 9. Sep 2003 00:52

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

das hab' ich jetzt nicht vorgesehen, aber schau's Dir mal an.
Sollte nicht so schwer nachzurüsten sein.

Matze 17. Sep 2003 16:50

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Hi Chris!

Da bin ich wieder, ich hatte endlich die Möglichkeit, dein Programm zu testen und ich muss sagen: Super! :thumb:

Es zeigt mir alle Rechner an!

Wirklich klasse! Vielen Dank nochmal! :hello:

Christian Seehase 17. Sep 2003 16:52

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

prima, freut mich :bounce1:

Und, was hat Dein Lehrer gesagt? ;-)

Matze 17. Sep 2003 16:58

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Der war echt erstaunt! Auf die Idee ist er gar nicht gekommen. Er hatte gemeint, das wär ja schon fast Hacker-mäßig! :mrgreen:

Christian Seehase 17. Sep 2003 17:00

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

:mrgreen:

Dabei hab' ich ja im Prinzip nur gemacht, was ein Ping -a auch macht ;-)

Schade, dass Du da nichts mit Admin Rechten machen kannst.
Dann könnte man ihm mal von einem anderen Rechner aus zeigen, welche versteckten Freigaben auf seinem Rechner sind ;-)

Matze 17. Sep 2003 17:03

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Ja, das wäre auch echt cool! ;)

Kann ich das irgendwie so umprogrammieren, dass es mir in einer weiteren ListBox, die angemeldeten (eingeloggten) User anzeigt?

Das hier: http://www.swissdelphicenter.ch/de/showcode.php?id=1578
geht bei mir irgendwie nicht. :(

Christian Seehase 17. Sep 2003 17:16

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

eine Idee hätte ich noch dafür.
Probier ich mal aus.

Matze 17. Sep 2003 17:17

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Das wäre echt cool! Aber falls du keine Zeit hast, dann musst du es natürlich nicht machen. ;)

Christian Seehase 17. Sep 2003 17:33

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

probier mal, ob das hier bei euch funktioniert.

Delphi-Quellcode:
type
  NET_API_STATUS = DWORD;
  PWKSTA_USER_INFO_0 = ^WKSTA_USER_INFO_0;
  WKSTA_USER_INFO_0 = packed record
    wkui0_username : PWChar;
  end;

function NetWkstaUserEnum(
    const servername  : PWChar;
    const level       : DWord;
    const bufptr      : Pointer;
    const prefmaxlen  : DWord;
    const entriesread : PDWord;
    const totalentries : PDWord;
    const resumehandle : PDWord
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';

function NetApiBufferFree(
    const Buffer : Pointer
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';

const
  NERR_Success        = 0;
  MAX_PREFERRED_LENGTH = DWORD(-1);

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var
  pwuiWork      : PWKSTA_USER_INFO_0;
  pwuiRead      : PWKSTA_USER_INFO_0;
  dwEntriesRead : DWORD;
  dwTotalEntries : DWORD;
  i             : integer;
  dwResult      : DWORD;
  pwsServer     : PWideChar;

begin
  pwsServer := '';
  dwResult := NetWkstaUserEnum(pwsServer,0,@pwuiRead,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil);
  if dwResult <> NERR_SUCCESS then begin
    ShowMessage(SysErrorMessage(dwResult)+#13#10+IntToStr(dwResult));
  end;
  try
    pwuiWork := pwuiRead;
    for i := 1 to dwEntriesRead do begin
      ShowMessage(pwuiWork.wkui0_username);
      inc(pwuiWork);
    end;
  finally
    NetApiBufferFree(pwuiRead);
  end;
end;

Matze 17. Sep 2003 17:38

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Vielen Dank. Du bist aber schnell! :thumb:
Ich sag dir in den nächsten Tagen Bescheid.

Christian Seehase 17. Sep 2003 17:39

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

für weiteres in dieser Richtung, wäre es dann aber angebracht einen neuen Thread zu eröffnen, denn das hat mit den Rechnern im Netz absolut nichts mehr zu tun. ;-)

Matze 17. Sep 2003 17:44

Re: Alle PC-Namen eines Netzwerkes erhalten
 
OK, Moment, wird gemacht...

Sniper-GFX 9. Okt 2003 19:52

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Hi!
Das Programm ist geil!

Saubere Leistung!

Mfg
Sniper-GFX

Assarbad 9. Okt 2003 23:51

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Benutzer kannst du nur als Admin zuverlässig auflisten. Bzw als jemadn, der Rechte in der Remote-Registry hat (zB mein LoggedOn2 macht das so).

Christians Methode ist weit von zuverlässig entfernt. Leider hat sich MS damit wohl eher so einen Scherz erlaubt. Scheint ne Art Fake-API zu sein. Jedenfalls erreicht man das gleiche, wenn man bestimmte Shares auf einem Fremdrechner auflistet (nämlich die Sessions eines Benutzers).

Leider sind die Sessions manchmal Zombies und manchmal sind User eingeloggt, aber NetEnum... listet nix. Ergo ... Mist :-/

BTW: Wenn das obige hackermäßig war, was ist denn dann TRACERT ... ROFL.

Christian Seehase 10. Okt 2003 11:33

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Assarbad,

es ging hierbei vermutlich nicht um die Zeilen hier weiter oben auf der Seite, sondern um das Attachement von der vorigen ;-)
Die Nummer mit der Registry hab' ich schon lange auf dem Zettel. Mal sehen, wann ich endlich mal dazu komme.
Für eine erfolreiche Ausführung von RegConnectRegistry brauchst Du allerdings auch entsprechende Zugriffsrechte auf den Remote Rechner. Als "normaler" User gibt's da nur ein Access Denied.

Das NetWkstaUserEnum nicht so das gelbe vom Ei ist, ist mit Sicherheit richtig, wie ich inzwischen feststellen musste, denn auch "NET SEND username" benutzt diese Funktion nicht :?
(allerdings auch nicht die Registry-Methode)

Zitat:

Zitat von Assarbad
Wenn das obige hackermäßig war, was ist denn dann TRACERT ... ROFL.

Mal ehrlich: Was können die Lehrer dafür, die manchmal arg ins rudern kommen, um auch nur einen kleinen Vorsprung vor der Masse ihrer Schüler zu haben. Ich bin zwar schon zu lange da raus um es aus eigener Anschauung wissen zu können, aber das jemand Informatik auf Lehramt studiert wäre mir neu.

Assarbad 10. Okt 2003 11:50

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Zitat:

Für eine erfolreiche Ausführung von RegConnectRegistry brauchst Du allerdings auch entsprechende Zugriffsrechte auf den Remote Rechner.
Stimmt. Aber das sollte eigentlich auch genauso sein. Differenzieren kann man im Übrigen nicht zwischen interaktivem und anderen Benutzern. Eventuell mit nem API-Hook auf WINLOGON.EXE, aber das ist dann wieder stark versionsabhängig.

Ich bin dafür, ein Forum aufzumachen, in dem Info-Lehrer, welche in Delphi unterrichten müssen (mit Alterskontrolle) von Nicht-Schülern supported werden ;) ... laßt den Kampf beginnen :-D

Christian Seehase 10. Okt 2003 12:02

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Assarbad,

Zitat:

Zitat von Assarbad
Differenzieren kann man im Übrigen nicht zwischen interaktivem und anderen Benutzern.

Vielleicht mache ich ja einen Denkfehler, aber wenn ich prüfe, welche NTUSER.DAT gesperrt ist, unter Berücksichtigung von Spezialaccounts (z.B. SMS-Service Account für Installationen), dann müsste ich eigentlich den Profilpfad des Users haben, der gerade angemeldet ist (oder eben auch keiner).

Zitat:

Zitat von Assarbad
Ich bin dafür, ein Forum aufzumachen, in dem Info-Lehrer, welche in Delphi unterrichten müssen (mit Alterskontrolle) von Nicht-Schülern supported werden

Solchen Support hab' ich sogar schon mal gegeben, und ich bleibe bei der Aussage, dass die Lehrer eigentlich nicht einmal was dafür können, wenn sie diesen Support brauchen.

Assarbad 10. Okt 2003 16:37

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Zitat:

Vielleicht mache ich ja einen Denkfehler, aber wenn ich prüfe, welche NTUSER.DAT gesperrt ist, unter Berücksichtigung von Spezialaccounts (z.B. SMS-Service Account für Installationen), dann müsste ich eigentlich den Profilpfad des Users haben, der gerade angemeldet ist (oder eben auch keiner).
Du irrst dich tatsächlich. Abgesehen von den Spezialaccounts, die zumal garnicht detektiert werden können (man kann nämlich einen beliebigen Account für solche Zwecke einspannen), können auch mehrere Benutzer interaktiv oder eben auch einfach nur eingeloggt sein.

Ein Beispiel wäre RunAs, was ab Windows 2000 im System dabei ist, aber auch schon bei früheren Versionen funktioniert ... oder auch die schnelle Benutzerumschaltung von XP (und Nachfolgern). Ich als Admin logge mich zB manchmal auf einem anderen Rechner ein, um dort etwas zu machen (das ist dann - insofern nicht in einer Domain - auch ein lokaler Logon). Das alles kannst du nicht unterscheiden, da man solche Programme wie RunAs nämlich anweisen kann das komplette Profil (i.e. NTUSER.DAT oder NTUSER.MAN) zu laden ... also Pustekuchen auch mit dieser Methode. Finde dich mal ganz ehrlich damit ab, es geht nicht ;)

alleinherrscher 8. Aug 2006 20:53

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Sorry, dass ich ein SOOOOOOOOOO altes Thema nochmal aufgreife, aber hat jemand diese Routine schonmal unter Delphi 2005 getestet die spuckt bei mir genau das hier aus: NIX!

Jemand evtl ne Idee worans liegen kann?

LG Alleinherrscher

TKC 8. Aug 2006 22:46

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Korrigiere mal den Quellcode an folgender Stelle


Delphi-Quellcode:
  PIP_MASK_STRING = ^PIP_MASK_STRING; // IPTYPES.H
nach

Delphi-Quellcode:
  PIP_MASK_STRING = ^IP_MASK_STRING; // IPTYPES.H

stockholm 26. Nov 2008 12:03

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Ich entschuldige mich ebenfalls, wobei es nunmal hier rein passt ;)

Der genannte Fehler ist zwar i.O. bis 2009, aber ab hier gibt es ja diesen Unicode Kram..

Fehler tritt hier auf:

Delphi-Quellcode:
        dwSubnetMask   := htonl(inet_addr(PChar(aAddresses[i].sSubnetMask)));
        dwIPAddressFrom := htonl(inet_addr(PChar(aAddresses[i].sIpAddress)));
[DCC Fehler] MAIN.pas(214): E2010 Inkompatible Typen: 'Char' und 'AnsiChar'

und:

[DCC Warnung] MAIN.pas(224): W1057 Implizite String-Umwandlung von 'AnsiChar' zu 'string'

Edit:
Gelöst...

pChar => pAnsiChar

Dennoch danke.


Trotzdem zeigt das Programm unter XP SP2 / Delphi 2009 Professional keine IPs des eigenen Rechners an, es kann also nix gestartet werden...

Johannes.Leupold 17. Mai 2011 20:25

AW: Alle PC-Namen eines Netzwerkes erhalten
 
Danke sehr, der Code funktioniert bei mir super!

Das hat mir sehr weitergeholfen. :spin2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz