![]() |
Alle im Netzwerk befindlichen Clients scannen
Hallo,
ich habe ein kleines Problem und das bekomme ich irgendwie nicht gelöst. Ich habe ein kleines Programm geschrieben, dass via FTP Dateien vom Host an einen Client überträgt. Das funktioniert auch alles wunderbar. Ich dachte mir nur, dass es für den Laien einfacher ist, anstatt seine eigene IP eingeben zu müssen, er Quasi den richtigen Client (seines Netzwerk) per Maus anklickt und die IP in mein Programm übernommen wird. Ich habe auch diverse Netzwerkscanner gefunden. Diese finden allerdings nur Windows-Rechner. Ich brauche quasi ein Script, was mir alle im LAN befindlichen Geräte (Ipad, Receiver, Xbox usw.) anzeigt, am besten auch mit dem Gerätenamen, um dann die Ergebnisse weiterzuverarbeiten. Ich erwarte natürlich kein fertiges Script von Euch, aber vielleicht einen Hinweis, womit man sowas umsetzen kann... Danke. |
AW: Alle im Netzwerk befindlichen Clients scannen
Und der Client wartet auch fröhlich darauf per FTP Daten zu bekommen?
Ich dachte immer der Client fordert per FTP Daten von einem Server an und bekommt diese dadurch geschickt? |
AW: Alle im Netzwerk befindlichen Clients scannen
Um mein kleines Programm kurz zu erkären:
Der Client soll ja von dem Scanner erfasst werden, wenn er an ist. Wurde er jetzt vom Scanner z.B. mit der IP 192.168.2.201 erkannt, so soll der User auf den Eintrag klicken können und mein Programm übernimmt die IP. Dann drücke ich auf senden, mein Programm wählt sich via FTP in den Client ein und schiebt die Datei auf diesen. so gesehen ist der Client jederzeit Empangsbereit. Und der Programmteil läuft ja auch einwandfrei. Ich suche halt nur nach einer Lösung, dass das ganze Idiotensicher wird und auch der absolute Volllaie die neue Konfiguration seines Receivers aufspielen kann, ohne das ich ihm umständlich erklären muss, wie er an die IP seines Receivers kommt. |
AW: Alle im Netzwerk befindlichen Clients scannen
Dann interessiert es dich aber nicht, ob das Device läuft, sondern ob das Device Daten per FTP empfangen kann.
Also musst du nur nach den Rechnern suchen, die einen bestimmten Port geöffnet haben. z.B. mit TIdIcmpClient oder auch TIdTelnet |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
* Clients senden per UDP ihren Namen und IP Adresse ins Netz * das Programm das den Clients Daten senden will, empfängt diese Nachrichten und weiss damit welche Clients es im Netz ansprechen kann, und kann deren Namen und IP Adressen in einer Liste darstellen Das Problem besteht aber weiterhin, wie der Client den Transfer anstösst. Denn FTP Übertragungen werden vom Client gestartet. Der Client muss also eine Verbindung zum Server aufbauen, über die der Server ihm mitteilt, sobald eine Datei für einen FTP Transfer bereit ist. Daher kann man das IP Multicast auch weglassen und einfach im Server einen weiteren Port (Telnet zum Beispiel) öffnen, auf den sich der Client verbindet. Der Server kann dann über den Socket eine Nachricht an den Client senden, um den Transfer anzustossen. Zitat:
|
AW: Alle im Netzwerk befindlichen Clients scannen
So kann man es natürlich auch ausdrücken.
Ich brauche quasi alle im Netzwerk befindlichen Geräte aufgelistet, die Port 21 offen haben. |
AW: Alle im Netzwerk befindlichen Clients scannen
Ich glaube, ich habe mich umständlich ausgedrückt:
Mein Programm wählt sich in den Server ein(Habe den Server fälschlicherweise als Client bezeichnet!). |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
![]() ![]() |
AW: Alle im Netzwerk befindlichen Clients scannen
Diese Multicast-Sache verstehe ich nicht so ganz.
Aber vielleicht habe ich mich auch total unglücklich ausgedrückt. Ich versuche den Sachverhalt nochmal neu zu äußern: Im LAN gibt es einen Linux-FTP, an dem sich ganz normal via FTP eingewählt werden kann. Es könnten aber auch zwei oder mehrere dieser Server im Netz sein. Dazu kommen ja noch die Handelsüblichen Geräte (Tablet, Xbox usw...). Ich möchte gerne ein Programm haben, der dass gesamte LAN abscannt und mir erreichbare IP-Adressen anzeigt. Alternativ einen Scanner, der mir explizit Port 21-Geräte anzeigt. Wenn der Scan durchgelaufen ist und ich z.B. 8 Geräte angezeigt bekomme, möchte ich dann per Mausklick die IP des gesuchten Gerätes übernehmen und damit weiterarbeiten. |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
Der Client, der eine Liste aller FTP Server sehen möchte, lauscht für kurze Zeit (zum Beispiel für die Dauer von drei Sekunden) auf einem UDP Port. Empfängt er während dieser Zeit den UDP Broadcast eines noch unbekannten FTP Servers, trägt er dessen IP Adresse in die Auswahlliste ein. Nach drei Sekunden stoppt der Client dann den UDP Empfang und präsentiert die Auswahlliste der gefundenen FTP Server. Anstatt an allen Servern einzeln "anzuklopfen" und zu fragen "kannst Du FTP?", wartet der Client einfach entspannt auf die eintreffenden Nachrichten: * "Hier, Ich bin ein FTP Server mit der IP 1.2.3.4!" * "Hallo, hier ist ein FTP Server mit IP 2.3.4.5" ... Konkret habe ich das Auffinden von Apache ActiveMQ Brokern (Message Queue Server) über IP Multicast hier beschrieben: ![]() Auf diesem Weg kann der Client einen Server finden, zu dem er sich anschliessend auf Port 616163 verbinden will. |
AW: Alle im Netzwerk befindlichen Clients scannen
Aber was ich denn immer noch nicht verstehe, ist die Tatsache, dass in diesem Fall doch der Server "Hallo" rufen muss, der Client selbiges "hören".
Ich habe aber keinen Einfluss auf den FTP-Server. Ich denke, dass der Client alle IPs/Ports scannen muss. Oder bin ich jetzt total schwer von Begriff? Geht dein Demo überhaupt mit Delphi7 Enterprise? |
AW: Alle im Netzwerk befindlichen Clients scannen
@mjustin
ich gehe davon aus dass beliebige FTP-Server in Reichweite aufgefunden werden sollen, nicht selbst aufgesetzte welche eine Multicast versenden könnten. So wird nicht übrig bleiben als einen kleinen Portscanner zu schreiben. |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
|
AW: Alle im Netzwerk befindlichen Clients scannen
@Bummi:
Genauso sieht es aus. Ich habe keinen Einfluss auf den Server. Ich weis nur, das Irgendwo im Adresspool sich einer befindet. Und dessen IP Adresse möchte ich gerne Erfahren. Name & Passwort kenne ich schon, deshalb genügt mir die IP um mich automatisch zu verbinden und die Datei hochzuladen. |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
Und ja, Delphi 7 kann auch UDP per Indy empfangen (die aktuellen Indy Komponenten funktionieren noch mit Delphi 5). |
AW: Alle im Netzwerk befindlichen Clients scannen
Ich danke Euch schon jetzt für Eure Unterstützung!!!
|
AW: Alle im Netzwerk befindlichen Clients scannen
Ich glaube, das ist das was ich suche.
Ich möchte folgendes: Ich will ein Tool schreiben, dass mir anzeigt, wann ein anderer Rechner im Heimnetzwerk online ist. Also auf jedem Rechner ist eine Anwendung im Autostart und vermittelt dann seinen "Online-Status". Auf meinem Rechner erkennt dann das andere/gleiche Programm, wann ein Rechner online ist. Das müsste doch über diesen Multicast realisierbar sein oder? Im Router kann ich Freigaben erteilen falls notwendig. |
AW: Alle im Netzwerk befindlichen Clients scannen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe hier noch einen 12 Jahre alten Code von mir rumliegen, der auch nicht genau macht was Du brauchst, er scannt einen Rechner mit mehreren Threads über von-bis Port, aber das ist ja schnell umgeschrieben.
|
AW: Alle im Netzwerk befindlichen Clients scannen
Liste der Anhänge anzeigen (Anzahl: 2)
Du möchtest auf einen Receiver zugreifen? Ich habe das mal so gelöst..
Erst die eigende IP ermitteln dann alle IP's in dem Bereich anpingen...wenn vorhanden RechnerName ermitteln und MACAdresse...alles in eine TreeView. Die Routine ermittelt mir alle Geräte in meinem Netzwerk vom iPhone,Receiver(VU+),Fernseher...usw. Jetzt kann die IP auf Wunsch direkt an den FTP Client übergeben werden und los gehts... |
AW: Alle im Netzwerk befindlichen Clients scannen
@Bummi
Wenn ich das richtig verstehe, nehme ich einen ServerSocket für anderen Rechner und öffne den. Und mit dem ClientSocket versuche ich im Intervall eine Verbindung aufzubauen und wenn das gelingt, ist der Server online? ^^ @borstenei 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. Da könnte deine Methode sogar reichen, dann kann ich auch Handys und Co ermitteln. |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
IP Multicast wäre allerdnings deutlich wartungsfreundlicher, da es keine solche Konfigurationsdatei braucht. |
AW: Alle im Netzwerk befindlichen Clients scannen
Die Adressen werden über DHCP vergeben.
Ich versuche mal die Methode von borstel. Wobei das mit dem Multicast schon nicht schlecht wäre. Da ich sowas noch nicht gemacht habe, wäre das ganz interessant. |
AW: Alle im Netzwerk befindlichen Clients scannen
Hoppala, es wird doch schwieriger :(
Ich hab ja was ganz wichtiges vergessen. Ich habe 2 Router im Netzwerk. Eine Fritzbox da sind alle dran, und dann einen D-Link wo ich alleine dran bin. Der IP-Kreis der Fritzbox ist 192.168.1.x und meiner vom D-Link ist 192.168.0.x Unabhängig davon, dass ich den IP-Kreis kenne, wie würde ich da ran kommen? |
AW: Alle im Netzwerk befindlichen Clients scannen
ins blaue geraten Netzwerkmaske und eigene IP für z.B. per WMI abgefragte aktive Netzwerkdevices ...
|
AW: Alle im Netzwerk befindlichen Clients scannen
Hostname kann ich auch nicht ermitteln :gruebel:
Ist immer leer. Ich habe es über IdIcmpClient probiert, sowie über die WinSock Funktion. Geht beides nicht. Mhhh. |
AW: Alle im Netzwerk befindlichen Clients scannen
@borstenei:
Dein Tool sieht ja schon mal sehr Professionell aus. Ich glaube in Teilstücken würde es genau meinen Bedarf abdecken. Den Adresspool herausbekommen habe ich schon hinbekommen. Womit bzw. wie pingst du jetzt alle im Netzwerk an? (Indy?) |
AW: Alle im Netzwerk befindlichen Clients scannen
Pingen kannst du damit:
![]() Indy würde ich lassen, da brauchste 1. Adminrechte und 2. kackt mir das immer mit dem Fehler #10040 ab. |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
Zum 10040 wird ein sehr einfacher Workaround hier beschrieben: ![]()
Delphi-Quellcode:
MyIdIcmpClient.PacketSize := 24;
p.s. eine Lösung mit der man auch in mehreren Threads pingen kann wird hier beschrieben: ![]() |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
Ich pinge sogar mit 16 und es klappt nicht. |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
|
AW: Alle im Netzwerk befindlichen Clients scannen
Windows 7 HP 64
|
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
|
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. |
AW: Alle im Netzwerk befindlichen Clients scannen
Hi pinge mit dieser Funktion:
Delphi-Quellcode:
ist hier aus dem Forum.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; |
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
|
AW: Alle im Netzwerk befindlichen Clients scannen
Zitat:
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. |
AW: Alle im Netzwerk befindlichen Clients scannen
Die Fritzbox kann das und die Priorisierung sollte auch der letzte Übergabepunkt im eigenen Netz übernehmen.
|
AW: Alle im Netzwerk befindlichen Clients scannen
Ich glaube meine ist zu alt. Hab ne 3170.
Zitat:
borstenei, wie ermittelst du die rechner namen? Kann ich die exe vom tool mal haben? |
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. |
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:
Das AnsiString hat mir gefehlt. Ich danke dir!
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; 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 21:10 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