Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Alle im Netzwerk befindlichen Clients scannen (https://www.delphipraxis.net/171639-alle-im-netzwerk-befindlichen-clients-scannen.html)

MuTzE.Y85 17. Nov 2012 10:30

AW: Alle im Netzwerk befindlichen Clients scannen
 
Windows 7 HP 64

Sir Rufo 17. Nov 2012 10:36

AW: Alle im Netzwerk befindlichen Clients scannen
 
Zitat:

Zitat von MuTzE.Y85 (Beitrag 1191611)
Also übertragen möchte ich nix. Es geht wirklich nur darum zu wissen, wann ein PC im Netzwerk ist.
Zur Erklärung. Ich hab hier nur eine 1000er Leitung und wenn jemand anderes im Internet ist, wenn ich zocken will, dann bekomm ich arge Probleme mit dem Ping ;)
Daher würde ich gerne vorher wissen, ob jemand online ist, dann brauch ich das Spiel gar nicht erst zu starten.

Genau dafür bieten einige Router (z.B. FritzBox) die Möglichkeit der Priorisierung an. Dann kann es dir egal sein, wer wie noch im Internet aktiv ist.

MuTzE.Y85 17. Nov 2012 10:55

AW: Alle im Netzwerk befindlichen Clients scannen
 
Redest du von Traffic-Shaping?
Das ist aktiviert...

Sobald jemand anderes auch nur eine Seite aufruft, geht mein Ping auf bis zu 1800 ms hoch. Da geht gar nix mehr.

borstenei 17. Nov 2012 10:56

AW: Alle im Netzwerk befindlichen Clients scannen
 
Hi pinge mit dieser Funktion:
Delphi-Quellcode:

uses
  Windows, SysUtils, Variants, Classes, Graphics, Controls,
  ExtCtrls, ComCtrls, winsock, StdCtrls, wininet;


function Ping(IP:string; TimeOut:Cardinal):Boolean;
   var hICMP : DWORD;
       pierWork : PICMP_ECHO_REPLY;
       dwSize : DWORD;
       Class1,Class2,Class3,Class4 : String;
       i,j : Byte;
 begin
   Result:=False;
   j:=1;
   for i:=1 to Length(IP) do begin
     if IP[i]<>'.' then begin
       case j of
         1: Class1:=Class1+IP[i];
         2: Class2:=Class2+IP[i];
         3: Class3:=Class3+IP[i];
         4: Class4:=Class4+IP[i];
       end;
     end else
       Inc(j);
   end;
   hICMP := IcmpCreateFile;
   if hICMP = INVALID_HANDLE_VALUE then exit;
   try
    dwSize := SizeOf(ICMP_ECHO_REPLY)+8;
     pierWork := AllocMem(dwSize);
     try
       if IcmpSendEcho(hICMP,MAKELONG(MAKEWORD(StrToInt(Class1), StrToInt(Class2)),MAKEWORD(StrToInt(Class3), StrToInt(Class4))),nil,0,nil,pierWork,dwSize,TimeOut) = 0 then
         Result:=False
       else
         Result:=True;
     finally
      FreeMem(pierWork,dwSize);
    end;
  finally
    IcmpCloseHandle(hIcmp);
  end;
end;
ist hier aus dem Forum.

Sir Rufo 17. Nov 2012 11:05

AW: Alle im Netzwerk befindlichen Clients scannen
 
Zitat:

Zitat von MuTzE.Y85 (Beitrag 1191653)
Redest du von Traffic-Shaping?
Das ist aktiviert...

Sobald jemand anderes auch nur eine Seite aufruft, geht mein Ping auf bis zu 1800 ms hoch. Da geht gar nix mehr.

Und du hast die Verbindung von deinem Rechner zu dem Server bei Echtzeitanwendungen eingetragen?

MuTzE.Y85 17. Nov 2012 12:53

AW: Alle im Netzwerk befindlichen Clients scannen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1191655)
Zitat:

Zitat von MuTzE.Y85 (Beitrag 1191653)
Redest du von Traffic-Shaping?
Das ist aktiviert...

Sobald jemand anderes auch nur eine Seite aufruft, geht mein Ping auf bis zu 1800 ms hoch. Da geht gar nix mehr.

Und du hast die Verbindung von deinem Rechner zu dem Server bei Echtzeitanwendungen eingetragen?

Sowas hab ich glaub ich nicht. Wüsste jedenfalls nicht wo.
In meinem D-Link Router kann ich allen Scheiß einstellen, aber der hat ja nunmal kein Modem, darum ist die Fritzbox davor.

Das gehört zwar hier nicht her, aber ich habe auch cFosSpeed. Würde das funktionieren wenn ich das auch auf dem anderen Rechner installiere?
Weil ja 2 IP-Kreise bei mir vorhanden sind.

Sir Rufo 17. Nov 2012 13:04

AW: Alle im Netzwerk befindlichen Clients scannen
 
Die Fritzbox kann das und die Priorisierung sollte auch der letzte Übergabepunkt im eigenen Netz übernehmen.

MuTzE.Y85 17. Nov 2012 13:16

AW: Alle im Netzwerk befindlichen Clients scannen
 
Ich glaube meine ist zu alt. Hab ne 3170.

Zitat:

Folgende AVM-Geräte unterstützen die Priorisierung:

FRITZ!Box Fon WLAN 7112; FRITZ!Box Fon WLAN 7141; FRITZ!Box Fon WLAN 7170; FRITZ!Box Fon WLAN 7170 SL; FRITZ!Box Fon WLAN 7170 SL (Annex A) Edition A; FRITZ!Box Fon WLAN 7170 (Annex A) Edition A/CH; FRITZ!Box Fon WLAN 7170 (Annex B) Edition A/CH; FRITZ!Box Fon WLAN 7240; FRITZ!Box Fon WLAN 7270; FRITZ!Box Fon WLAN 7270 Edition A/CH; FRITZ!Box WLAN 3270; FRITZ!Fon 7150; FRITZ!Box Fon WLAN 7570 VDSL; FRITZ!Box Fon WLAN 7390

borstenei, wie ermittelst du die rechner namen?
Kann ich die exe vom tool mal haben?

borstenei 17. Nov 2012 14:14

AW: Alle im Netzwerk befindlichen Clients scannen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Macadresse und Computername mit diesen Funktionen
Delphi-Quellcode:
function GetComputerName(IPAddr: String): string;
 var
   SockAddrIn: TSockAddrIn;
   HostEnt: PHostEnt;
   WSAData: TWSAData;
 begin
   WSAStartup($101, WSAData);
   SockAddrIn.sin_addr.s_addr := inet_addr(PAnsiChar(AnsiString(IPAddr))); // <-- IP-Addr nach AnsiString wandeln
   HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
   if HostEnt <> nil then
     Result := string(StrPas(Hostent^.h_name)) // <- Hostname nach String wandeln
   else
     Result := '';
 end;


function GetMacAddr(const IPv4: String): String;
   const
     SrcIP: in_addr = (S_addr: 0);
   var
     DestIP: in_addr;
     MacAddr: array[0..5] of Byte;
     MacAddrLen, RC: DWORD;
     i: Integer;
 begin
   Result := '';
   DestIP.S_addr := inet_addr(PAnsiChar(AnsiString(IPv4)));
   MacAddrLen := Length(MacAddr);
   // msdn.microsoft.com/e...aa366358(VS.85).aspx
   RC := SendARP(DestIP,SrcIP,@MacAddr,MacAddrLen);
   case RC of
     NO_ERROR:
       begin
         if (MacAddrLen = 6) then
           for i := 0 to 5 do begin
             if (i > 0) then
               Result := Result +'-';
             Result := Result +IntToHex(MacAddr[i],2);
           end
         else
           Result := 'Error: MacAddrLen='+IntToStr(MacAddrLen);
       end;
     ERROR_GEN_FAILURE:
       Result := 'ERROR_GEN_FAILURE';
     ERROR_INVALID_PARAMETER:
       Result := 'ERROR_INVALID_PARAMETER';
     ERROR_INVALID_USER_BUFFER:
       Result := 'ERROR_INVALID_USER_BUFFER';
     ERROR_BAD_NET_NAME:
       Result := 'ERROR_BAD_NET_NAME';
     ERROR_BUFFER_OVERFLOW:
       Result := 'ERROR_BUFFER_OVERFLOW';
     else
       Result := 'Error: RC='+IntToStr(RC);
   end;
 end;

ich würde gern den alles hier mal anhängen..nur leider gehört mein code nicht in die Rubrik "Da kann man was lernen".:(
ich hänge die Exe mal an , die Netzwerksache tut es ja auch ohne Receiver.

MuTzE.Y85 17. Nov 2012 15:02

AW: Alle im Netzwerk befindlichen Clients scannen
 
Gibts doch gar nicht :-D

Ich habe die gleiche Funktion verwendet und es hat nie geklappt.

Jetzt habe ich endlich den Fehler:
Code:
function GetComputerName(IPAddr: String): string;
 var
   SockAddrIn: TSockAddrIn;
   HostEnt: PHostEnt;
   WSAData: TWSAData;
 begin
   WSAStartup($101, WSAData);
   SockAddrIn.sin_addr.s_addr := inet_addr(PAnsiChar([B]AnsiString[/B](IPAddr))); // <-- IP-Addr nach AnsiString wandeln
   HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
   if HostEnt <> nil then
     Result := string(StrPas(Hostent^.h_name)) // <- Hostname nach String wandeln
   else
     Result := '';
 end;
Das AnsiString hat mir gefehlt. Ich danke dir!
WIe lange dauert bei dir eigentlich das durchpingen? Ich hab die TimeOut-Zeit auf 50 ms und das dauert schon ne weile.

Dein Tool kann ich nicht öffnen. Mir fehlt XML 4.0


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.
Seite 4 von 5   « Erste     234 5      

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