Im Netzwerk angemeldete Computer.
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
@Michael, gesucht werden die IPs aller am Netzwerk angemeldeten Geräte. Dazu soll die MAC und der Name des Gerätes ermittelt werden.
Ultra Ping und LuckiePing pingen die IPs. Bei LuckiePing ist der Quelltext dabei. Wie Anpry IP Scanner arbeitet habe ich nicht nachgesehen. Zu Advenced IP Scanner steht nichts in der Beschreibung.
Ultra Ping und LuckiePing pingen die IPs. Bei LuckiePing ist der Quelltext dabei. Wie Anpry IP Scanner arbeitet habe ich nicht nachgesehen. Zu Advenced IP Scanner steht nichts in der Beschreibung.
Gruß Garfield
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Wenn ich Wireshark richtig lese, macht Advanced IP Scanner:
Wenn eine IP gefunden wurde gibt es eine Anfrage über NBNS Name query NBSTAT.
- Broadcast - ARP - Who has {IP}? für jede IP
- jede IP - ICMP - Echo (Ping)
- jede IP - TCP - Port 80
- jede IP - TCP - Port 21
- jede IP - TCP - Port 445
- jede IP - TCP - Port 4899
Wenn eine IP gefunden wurde gibt es eine Anfrage über NBNS Name query NBSTAT.
Gruß Garfield
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Im Netzwerk angemeldete Computer.
Wie schon detailliert ausgeführt gibt es keine "Anmeldung am Netzwerk" (ohne genaue Erklärung was denn da gemeint ist).Garfield hat geschrieben:@Michael, gesucht werden die IPs aller am Netzwerk angemeldeten Geräte. Dazu soll die MAC und der Name des Gerätes ermittelt werden. .
-Michael
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Im Netzwerk angemeldete Computer.
Was ist "jede IP" alle 2 hoch 32 (beziehungsweise noch viel mehr bei ipv6)Garfield hat geschrieben:... für jede IP ...
Dann werden auch alle im Internet erreichbaren "Geräte" angesprochen, da ist ARP und ICMP aber normalerweise gesperrt.
-Michael
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Ach Michael, irgendwie kommst Du mir gegen den Strich gebürstet oder auch nur ein wenig genervt vor.
Anscheinend sind meine Kenntnisse zu schlecht. Ich dachte, jeder Rechner müsste sich anmelden und würde dann eine IP zugeteilt bekommen. Konkret meine ich alle Rechner welche im Heimnetzwerk erreichbar sind. Diese sind nach meiner Kenntnis im selben Subnetz, im Beispiel auf den Bildern 192.168.0. Was mit jeder IP gemeint ist, kann man für dieses Beispiel auf den beiden Bildern sehen. Da ist der Bereich von 192.168.0.1 bis 192.168.0.254 angegeben.
Der konkrete Hintergrund ist folgender: In einem Heimnetzwerk soll ein bestimmtes Gerät ausgewählt werden. Damit der Anwender dieses Gerät auswählen kann, sollen ihm alle verfügbaren Geräte angezeigt werden.
Und wenn ich schon ein Programm für jemand anderen schreibe, sollte es auch ordentlich funktionieren.

Anscheinend sind meine Kenntnisse zu schlecht. Ich dachte, jeder Rechner müsste sich anmelden und würde dann eine IP zugeteilt bekommen. Konkret meine ich alle Rechner welche im Heimnetzwerk erreichbar sind. Diese sind nach meiner Kenntnis im selben Subnetz, im Beispiel auf den Bildern 192.168.0. Was mit jeder IP gemeint ist, kann man für dieses Beispiel auf den beiden Bildern sehen. Da ist der Bereich von 192.168.0.1 bis 192.168.0.254 angegeben.
Der konkrete Hintergrund ist folgender: In einem Heimnetzwerk soll ein bestimmtes Gerät ausgewählt werden. Damit der Anwender dieses Gerät auswählen kann, sollen ihm alle verfügbaren Geräte angezeigt werden.
Und wenn ich schon ein Programm für jemand anderen schreibe, sollte es auch ordentlich funktionieren.
Gruß Garfield
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Synapse verwendet in der Function TPINGSend.InternalPingIpHlp die Funktionen Icmp6SendEcho2 und IcmpSendEcho2, allerdings ohne Callbackfunktion. Und in TPINGSend.InternalPing wird ein TICMPBlockSocket verwendet.
Gruß Garfield
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Im Netzwerk angemeldete Computer.
Ein Netzwerk kann nicht nur aus einem Subnetz bestehen. Solang seine SW nur bei dir funktionieren soll/muss kannst du ja mit Halbwissen vogrhen. Wenn andere deine SW einsetzen sollen wärs schon gut wenn du dich in die Materie etwas einliest.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Im Netzwerk angemeldete Computer.
Wie oben schon beschrieben stimmt das so nicht.Garfield hat geschrieben:Ich dachte, jeder Rechner müsste sich anmelden und würde dann eine IP zugeteilt bekommen. Konkret meine ich alle Rechner welche im Heimnetzwerk erreichbar sind. .
Was Du beschreibst ist "DHCP". Hierzu gibt es einen "DHCP-Server" der z.B. auf einem DSL-Router installiert sein kann. Er kann aber auch auf einem Linux-Server aktiviert werden. Er kann aber auch nicht vorhanden oder deaktiviert sein. Um DHCP zu nutzen machen die Rechner (beim starten und in regelmäßigen Abständen) einen "DHCP-Braoadcast". Ein aktiver DHCP-Server teilt ihnen daraufhin eine IP-Adresse zu. Er merkt sich dazu die MAC-Adresse des Rechners und die zugeteilte IP, damit er sie nicht doppelt vergibt und bei einer erneuten Anfrage desselben Rechners dieselbe IP nennt.
Es gibt aber kein zwingend aktiviertes Standard-Protokoll, um auf diese Liste zuzugreifen. Da die Rechner bei DHCP auch ihren "Netzwerk-Namen" bekanntgeben, kann der DHCP-Server auch diesen speichern. In einem "anständigen" Netzwerk gibt es auch (mindestens) einen lokalen DNS-Server der auf Anfrage Zuordnungen zwischen Netzwerk-Namen und IP-Adressen bekannt gibt. Der DNS-Server kann dann diese Zuordnung für die "lokalen" Rechner vom DHCP-Server bekommen (wenn beides auf einem Linux-Rechner läuft).
Aber ein lokaler "Rechner" muss nicht unbedingt DHCP verwenden. Er kann auch eine IP-Adresse fest eingestellt haben. Der DHCP-Server sieht ihn dann gar nicht.
Außerdem kann ein Rechner auch mehrere Netzwerk-Anschlüsse haben und die haben dann jeweils eine IP-Adresse (fest oder per DHCP).
Außerdem kann einen Netzwerk auch aus mehreren "Strängen" bestehen die durch Router verbunden sind. Dann kann für jeden Netzwerk-Strang ein DHCP-Server aktiv sein. So gesehen ist das ganze Internet ein "Netzwerk". Wo will man also "suchen" ? Zumindest muss die Such-Routine also die Netzwerk-IP Adresse (und Maske) für jedes Subnetz gesagt bekommen.
Heute bestehen ja auch Heim-Netze oft aus einem Drahtgebundenen und einem WLAN "Netzwerk". Oft können Rechner alternativ mit einem von beiden oder auch gleichzeitig an beiden (siehe "mehrere Netzwerk_Anschlüsse) verbunden sein.
-Michael
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Scheint alles nicht so einfach zu sein.

An meiner Fritzbox sind über LAN ein Drucker und zwei Rechner verbunden, über WLAN zwei Laptop und mehrere Smartphones/Tablettes.mschnell hat geschrieben:Heute bestehen ja auch Heim-Netze oft aus einem Drahtgebundenen und einem WLAN "Netzwerk". Oft können Rechner alternativ mit einem von beiden oder auch gleichzeitig an beiden (siehe "mehrere Netzwerk_Anschlüsse) verbunden sein.
Die Fritzbox zeigt im Heimnetzwerk meinen Netzwerkdrucker an. Alle Geräte sind mit Namen und der Art wie sie verbunden sind (Lan oder WLAN), angegeben. Da der Drucker HTTP unterstützt ist der Name ein Link der auf die IP verweist.mschnell hat geschrieben:Geräte mit fest eingestellten IP-Adressen sieht die Fritz-Box auch nicht.
Gruß Garfield
- W126
- Lazarusforum e. V.
- Beiträge: 57
- Registriert: Mo 27. Jul 2015, 11:19
- OS, Lazarus, FPC: Linux
- CPU-Target: Xeon Silver x64
- Wohnort: Hofheim am Taunus
Re: Im Netzwerk angemeldete Computer.
mschnell hat geschrieben:Was ist "jede IP" alle 2 hoch 32 (beziehungsweise noch viel mehr bei ipv6)Garfield hat geschrieben:... für jede IP ...
Dann werden auch alle im Internet erreichbaren "Geräte" angesprochen, da ist ARP und ICMP aber normalerweise gesperrt.
-Michael
Ja, wenn Du willst und die Zeit hast geht Advanced IP Scanner alle diese IPs durch. Bei uns geht er jeden Monat den Bereich 192.168.x.x komplett durch.
- W126
- Lazarusforum e. V.
- Beiträge: 57
- Registriert: Mo 27. Jul 2015, 11:19
- OS, Lazarus, FPC: Linux
- CPU-Target: Xeon Silver x64
- Wohnort: Hofheim am Taunus
Re: Im Netzwerk angemeldete Computer.
Die Firtzbox scheint dieses Problem etwas anders anzugehen. Geräte die sich keine IP vom DHCP holen (anmeldenGarfield hat geschrieben:Scheint alles nicht so einfach zu sein.![]()
An meiner Fritzbox sind über LAN ein Drucker und zwei Rechner verbunden, über WLAN zwei Laptop und mehrere Smartphones/Tablettes.mschnell hat geschrieben:Heute bestehen ja auch Heim-Netze oft aus einem Drahtgebundenen und einem WLAN "Netzwerk". Oft können Rechner alternativ mit einem von beiden oder auch gleichzeitig an beiden (siehe "mehrere Netzwerk_Anschlüsse) verbunden sein.
Die Fritzbox zeigt im Heimnetzwerk meinen Netzwerkdrucker an. Alle Geräte sind mit Namen und der Art wie sie verbunden sind (Lan oder WLAN), angegeben. Da der Drucker HTTP unterstützt ist der Name ein Link der auf die IP verweist.mschnell hat geschrieben:Geräte mit fest eingestellten IP-Adressen sieht die Fritz-Box auch nicht.

Dein Ansatz ist doch schon sehr gut!
Gruß Jörg
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Danke.W126 hat geschrieben:Dein Ansatz ist doch schon sehr gut!
Ich werde mich etwas mehr mit Netzwerken beschäftigen. Jetzt habe ich zwei Ding, welche ich ausprobieren will. Das sind GetIpAddrTable function und ResolveIpNetEntry2 function.
Gruß Garfield
- W126
- Lazarusforum e. V.
- Beiträge: 57
- Registriert: Mo 27. Jul 2015, 11:19
- OS, Lazarus, FPC: Linux
- CPU-Target: Xeon Silver x64
- Wohnort: Hofheim am Taunus
Re: Im Netzwerk angemeldete Computer.
Schau doch mal was Michael Puff programmiert hat (http://michael-puff.de/Programmierung/Delphi/Programme ). Ich hatte mich mit Netzwerk vor langer Zeit unter Delphi versucht. Bei ihm hatte ich ein paar Infos gefunden.
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Danke. Michael hat ein paar feine Sachen dabei. Sein LuckiePing hatte ich mir auch mal herunter geladen. Aber das funktionierte bei mir unter Win10 nicht. Networkinfo, Internetmonitor und Portscanner werde ich mir jetzt mal ansehen.
Jetzt habe ich GetIpAddrTable so drin:
Ich habe versucht, die DWORD in IP-String umzuwandeln:
Aber das passt nicht. Damit scheint etwas durcheinander zu kommen.
Und es scheinen nicht die IP-Adressen zu sein, welche ich suche. Obwohl sie es sein sollten. http://www.winsocketdotnetworkprogrammi ... on13g.html
Was ich nicht ganz versehe, von den Smartphones bekomme ich meist den Fehler 67 (Host nicht erreichbar), wenn sie in Benutzung sind bzw im Standby. Jetzt wurden sie über Nacht nicht benutzt, sind im Standby und ich bekam beim ersten Aufruf von allen die MAC angezeigt. Beim zweiten Aufruf schon nicht mehr.
Jetzt habe ich GetIpAddrTable so drin:
Code: Alles auswählen
type
_MIB_IPADDRROW = packed record
dwAddr : DWORD; // The IPv4 address in network byte order.
dwIndex : DWORD; // The index of the interface associated with this IPv4 address.
dwMask : DWORD; // The subnet mask for the IPv4 address in network byte order.
dwBCastAddr : DWORD; // The broadcast address in network byte order. A broadcast address is typically the IPv4 address with the host portion set to either all zeros or all ones.
dwReasmSize : DWORD; // The maximum re-assembly size for received datagrams.
unused1 : USHORT; // This member is reserved.
wType : USHORT; // The address type or state. This member can be a combination of the following values.
end;
PMIB_IPADDRROW = ^_MIB_IPADDRROW;
type
_MIB_IPADDRTABLE = packed record
dwNumEntries : DWORD;
table : Array of _MIB_IPADDRROW;
end;
PMIB_IPADDRTABLE = ^_MIB_IPADDRTABLE;
TMIB_IPAddrTable = _MIB_IPADDRTABLE;
type
TGetIpAddrTable = function (pIpAddrTable: PMIB_IPADDRTABLE; pdwSize: PULONG; bOrder: LongBool): DWORD; stdcall;
var
GetIpAddrTable : TGetIpAddrTable;
function IpAddrTable: IPAddrEntries;
{*******************************************************************************
* IP Tabelle holen.
}
var
pIPAddrTable : PMIB_IPADDRTABLE;
dwSize : DWORD;
dwRetVal : DWORD;
bOrder : LongBool;
In_Addr : IPAddr;
lpMsgBuf : LPVOID; // Fehlermeldung
i : Integer;
begin
// Init
pIPAddrTable := nil;
dwSize := 0;
dwRetVal := 0;
In_Addr.S_addr := 0;
// Speicher für die erste Antwort (Anzahl der Anträge und erste Tabelle) reservieren.
pIPAddrTable := AllocMem(SizeOf(_MIB_IPADDRTABLE));
if Assigned(pIPAddrTable)
then begin
// Größe des für die Antwort notwendigen Speichers ermitteln.
bOrder := False; // Antwort unsortiert.
if GetIpAddrTable(pIPAddrTable, @dwSize, bOrder) = ERROR_INSUFFICIENT_BUFFER
then begin
// Speicher für die Antwort auf die erforderliche Größe erweitern.
FreeMem(pIPAddrTable);
pIPAddrTable := AllocMem(dwSize);
//pIPAddrTable := ReAllocMem(pIPAddrTable, dwSize);
if Assigned(pIPAddrTable)
then begin
bOrder := False; // Antwort unsortiert.
dwRetVal := GetIpAddrTable(pIPAddrTable, @dwSize, bOrder);
if successful(dwRetVal)
then begin
// Tabelle übernehmen.
if pIPAddrTable^.dwNumEntries > 0
then begin
SetLength(Result, pIPAddrTable^.dwNumEntries);
for i := 0 to pIPAddrTable^.dwNumEntries - 1
do begin
Result[i].dwAddr := pIPAddrTable^.table[i].dwAddr; // The IPv4 address in network byte order.
Result[i].dwIndex := pIPAddrTable^.table[i].dwIndex; // The index of the interface associated with this IPv4 address.
Result[i].dwMask := pIPAddrTable^.table[i].dwMask; // The subnet mask for the IPv4 address in network byte order.
Result[i].dwBCastAddr := pIPAddrTable^.table[i].dwBCastAddr; // The broadcast address in network byte order. A broadcast address is typically the IPv4 address with the host portion set to either all zeros or all ones.
Result[i].dwReasmSize := pIPAddrTable^.table[i].dwReasmSize; // The maximum re-assembly size for received datagrams.
Result[i].unused1 := pIPAddrTable^.table[i].unused1; // This member is reserved.
Result[i].wType := pIPAddrTable^.table[i].wType; // The address type or state. This member can be a combination of the following values.
end;
end;
end;
if Assigned(pIPAddrTable)
then begin
Freemem(pIPAddrTable);
pIPAddrTable := nil;
end;
end;
end;
end;
end;
Code: Alles auswählen
function IPAddrToStr(const aIPAddr: DWORD): String;
{*******************************************************************************
* Eine IPAddr in einen String umwandeln.
}
begin
Result := Format('%d.%d.%d.%d', [aIPAddr and $FF000000 shr 24, aIPAddr and $FF0000 shr 16, aIPAddr and $FF00 shr 8, aIPAddr and $FF]);
end;
Und es scheinen nicht die IP-Adressen zu sein, welche ich suche. Obwohl sie es sein sollten. http://www.winsocketdotnetworkprogrammi ... on13g.html
Was ich nicht ganz versehe, von den Smartphones bekomme ich meist den Fehler 67 (Host nicht erreichbar), wenn sie in Benutzung sind bzw im Standby. Jetzt wurden sie über Nacht nicht benutzt, sind im Standby und ich bekam beim ersten Aufruf von allen die MAC angezeigt. Beim zweiten Aufruf schon nicht mehr.
Zuletzt geändert von Garfield am So 16. Okt 2016, 14:58, insgesamt 1-mal geändert.
Gruß Garfield
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Im Netzwerk angemeldete Computer.
Habe mir gerade GetMAC von Michael Puff angesehen. Das hat alle MAC und bis auf einen alle Gerätenamen geholt. Genauso wie die App Fing.
Nachtrag: War Glückstreffer. Danach gab es auch hier ab und zu den Fehler 67.
Nachtrag: War Glückstreffer. Danach gab es auch hier ab und zu den Fehler 67.
Gruß Garfield