![]() |
Subnetzmaske/ Server finden
Hallo!
Da ich hier neu bin, hoffe ich hier richtig zu sein. :? Ich bräuchte die IP- Adresse aller Rechner im Netzwerk. Das hat folgenden Zweck: Auf einem der Rechner habe ich einen Server (Chat) laufen. Per UDP- Broadcasts könnte ich schnell feststellen, auf welchem und mich danach bequem beim Server anmelden. Wie gesagt, dazu bräuchte ich die IP- Adressen. Eigentlich wollte ich das mit dem Networkcalculator von Indy zu machen, aber der braucht die eigene IP- Adresse (was kein Problem wäre) und die Subnetzmaske. Kann man letzteres irgendwie rausbekommen? Oder geht das ganze einfacher? mfg, EConvertError |
Re: Subnetzmaske/ Server finden
Wenn du die Subnetzmaske nicht benutzt, kannst du ganz einfach 255.255.255.255 nehmen.
|
Re: Subnetzmaske/ Server finden
Moin EConvertError,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Daten der lokalen Netzwerkkarte herausbekommen kannst Du u.a. mit ![]() ![]() |
Re: Subnetzmaske/ Server finden
Hallo!
Vielen Dank für eure Hilfe! @Chewie: Dein Vorschlag hat bei mir leider nicht funktioniert. Nur als ich auch die Networkmask eingegeben habe (die ich ja dann später nicht weiß) ging es. @Christian Seehase: Ich werde das mit dem "GetAdaptersInfo" gleich einmal probieren. Weißt du zufällig ob das auch unter Win98 SE funktioniert? Falls dabei ein Problem auftritt werde ich mich wieder melden (da ich mich hier noch nicht so auskenne: Sollte das in einem neuen Thread geschehen, oder eher hier?). mfg, EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
das sollte auch unter 98 funktionieren. Ab diesem Betriebssystem ist die Funktion zumindest dokumentiert. Zitat:
|
Re: Subnetzmaske/ Server finden
@EConvertError
denke du müsstest auf jeden Fall die Subnetmask auslesen, denn der Server kann sich ja nur in deinem Subnet befinden, denn ansonsten funktioniert die Kommunikation nicht. Und um die mögliche Anzahl an IP Adressen heraus zu bekommen brauchst Du die Subnetmask. Oder habe ich das falsch verstanden? |
Re: Subnetzmaske/ Server finden
1.*.*.*-127.*.*.* = Klasse A = 255.0.0.0
128.*.*.*-191.*.*.* = Klasse B = 255.255.0.0 192.*.*.*-223.*.*.* = Klasse C = 255.255.255.0 Wenn irgend ein user das allerdings willkürlich eingestellt hat hilft nur noch registry auslesen |
Re: Subnetzmaske/ Server finden
Zitat:
Ich würde die Subnetmask und die eigene IP Adresse auslesen. wenn Du die binär miteinander verknüpfst, dann bekommst Du genau raus welche IP Adressen zu dem Subnet gehören, und kannst die ja dann alle abfragen. Dürften weit weniger als 16 Millionen sein :-D |
Re: Subnetzmaske/ Server finden
Moin Zusammen,
zu dem Thema hab' ich in diesem Thread ![]() mal ein Programm als Attachement angefügt (nur die Sourcen). Müsste auf einer der letzten Seiten sein. |
Re: Subnetzmaske/ Server finden
Vielen Dank für eure Hilfe!
Zitat:
Ich werde jetzt mal die Vorschläge von Christian Seehase ausprobieren und hoffen, dass es geht... mfg, Andy |
Re: Subnetzmaske/ Server finden
Moin Andy,
Zitat:
|
Re: Subnetzmaske/ Server finden
Hallo nochmal!
Ich komme mir ein wenig blöd vor, weil ich noch einmal frage, aber: Das mit dem AdaptersInfo hat bei mir nicht ganz funktioniert. Wahrscheinlich liegt es an meinem eigenem Unwissen. Denn ich habe es nicht geschafft, die Subnetzmaske auszulesen, bzw. habe ich nur die eigene IP Adresse und irgendeine Maske (der Wert war 0.0.0.0, also definitiv nicht meine Subnetzmaske) herauslesen können. WNetEnumResource ist, glaube ich, in meinem Fall nicht das Richtige, weil da doch nur die Rechner angezeigt werden, die auch in der Netzwerkumgebung sind. Oder täusche ich mich da? Vielleicht könntet ihr mir noch einmal helfen? Vielen Dank schon im voraus, EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
wie hast Du's denn gemacht. Ein bisschen Source wäre ganz hilfreich. |
Re: Subnetzmaske/ Server finden
Ich habe mir den Code von hier genommen:
![]() Diese beiden habe ich herauslesen können:
Delphi-Quellcode:
Der Rest war mir nicht wirklich klar (ich bitte um Entschuldigung, aber mir der API habe ich bis jetzt eher weniger gemacht).
IpAddress : IP_ADDRESS_STRING;
IpMask : IP_MASK_STRING; Wie gesagt; ich bräuchte die Subnetzmaske (IpMask wars nicht). mfg EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
Zitat:
Hier mal die Repeat Until Schleife aus dem Beispiel (die zu ändernden Stellen rot)
Code:
repeat
iasWork := pAdapterWork.[color=red]IpAddressList[/color]; while iasWork.Next <> nil do begin cobGateway.Items.Add(trim(iasWork.[color=red]IpMask[/color].acString)); iasWork := iasWork.Next^; end; cobGateway.Items.Add(trim(iasWork.[color=red]IpMask[/color].acString)); pAdapterWork := pAdapterWork.Next; until pAdapterWork = nil; Zitat:
Da sind die meisten Dinge genau dokumentiert. Was jetzt nicht heissen soll, dass Du nicht mehr fragen sollst. Vor allem, wer den Umgang mit dem PSDK nicht gewohnt ist wird manchmal (oft?) Schwierigkeiten haben das passende zu finden. In diesem Falle kannst Du ja mal sehen, ob Du mit der Dokumentation zu den hier verwendeten Datentypen klarkommst. |
Re: Subnetzmaske/ Server finden
Vielen Dank, dass ihr mir immer noch zur Seite steht!
Also ich habe jetzt einmal all das rot Markierte umgeändert, jedoch kommt bei mir eine Fehlermeldung: Inkompatible Typen: 'IP_ADDR_STRING' und 'PIP_ADAPTER_INFO' ...und das in der folgender Zeile:
Delphi-Quellcode:
Bin schon total verzweifelt! :wall:
iasWork := pAdapterWork.IpAddressList;
mfg, EConvertError PS: Beim MSDN hatte ich auch kein Glück. |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
hier noch mal das Original komplett
Code:
const
MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // arb. MAX_ADAPTER_NAME_LENGTH = 256; // arb. MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb. type PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING; IP_ADDRESS_STRING = packed record acString : array [1..16] of Char; end; PIP_MASK_STRING = ^PIP_MASK_STRING; IP_MASK_STRING = IP_ADDRESS_STRING; PIP_ADDR_STRING = ^IP_ADDR_STRING; IP_ADDR_STRING = packed record Next : PIP_ADDR_STRING; IpAddress : IP_ADDRESS_STRING; IpMask : IP_MASK_STRING; Context : DWORD; end; time_t = int64; PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO; IP_ADAPTER_INFO = packed record Next : PIP_ADAPTER_INFO; ComboIndex : DWORD; AdapterName : array [1..MAX_ADAPTER_NAME_LENGTH+4] of Char ; Description : array [1..MAX_ADAPTER_DESCRIPTION_LENGTH+4] of Char; AddressLength : UINT; Address : array [1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte; Index : DWORD; dwType : UINT; DhcpEnabled : UINT; CurrentIpAddress : PIP_ADDR_STRING; IpAddressList : IP_ADDR_STRING; GatewayList : IP_ADDR_STRING; DhcpServer : IP_ADDR_STRING; HaveWins : Boolean; PrimaryWinsServer : IP_ADDR_STRING; SecondaryWinsServer : IP_ADDR_STRING; LeaseObtained : time_t; LeaseExpires : time_t; end; function GetAdaptersInfo(const pAdapterInfo : PIP_ADAPTER_INFO;const pOutBufLen : PULONG) : DWORD; stdcall; external 'IPHLPAPI.DLL' name 'GetAdaptersInfo'; implementation {$R *.DFM} procedure TForm1.FormShow(Sender: TObject); var dwResult : DWORD; dwLen : DWORD; pAdapterWork : PIP_ADAPTER_INFO; pAdapterList : PIP_ADAPTER_INFO; iasWork : IP_ADDR_STRING; begin pAdapterList := nil; dwLen := 0; dwResult := GetAdaptersInfo(pAdapterList,@dwLen); if dwResult = ERROR_BUFFER_OVERFLOW then begin pAdapterList := AllocMem(dwLen); try dwResult := GetAdaptersInfo(pAdapterList,@dwLen); if dwResult = ERROR_SUCCESS then begin pAdapterWork := pAdapterList; cobGateway.Clear; repeat ShowMessage(trim(pAdapterWork.Description)); iasWork := pAdapterWork.GatewayList; [color=red]// auf GatewayList durch IpAddressList austauschen[/color] while iasWork.Next <> nil do begin cobGateway.Items.Add(trim(iasWork.IpAddress.acString)); [color=red]// und hier IpAddress durch IpMask[/color] iasWork := iasWork.Next^; end; cobGateway.Items.Add(trim(iasWork.IpAddress.acString)); [color=red]// hier auch IpAddress durch IpMask tauschen[/color] pAdapterWork := pAdapterWork.Next; until pAdapterWork = nil; if cobGateway.Items.Count > 0 then begin cobGateway.ItemIndex := 0; end; end; finally FreeMem(pAdapterList,dwLen); end; end; end; |
Re: Subnetzmaske/ Server finden
Vielen Dank, Chris!
Es funktioniert! Danke noch mal, EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
prima, aber könntest Du mal sagen, warum es vorher nicht ging. Da war doch kein Unterschied. :gruebel: |
Re: Subnetzmaske/ Server finden
Hi!
Ehrlich gesagt habe ich keine Ahnung. :?: Zitat:
Angesichts der Mathematik- Schularbeit übermorgen werde ich die genaue Überprüfung der beiden Versionen verschieben, und mich einfach nur freuen dass es funktioniert. Danke noch mal, EConvertError |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr. |
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