Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Die Variable ServerIP herausfinden!(Scannen) (https://www.delphipraxis.net/4811-die-variable-serverip-herausfinden-scannen.html)

Captnemo 15. Mai 2003 14:34

Bevor ich mich jetzt dran mache:

wie lautet denn deine IP-Adresse auf der du das getestet?

In deiner ersten Mail steht 192.168.2.x

in deiner letzten steht 192.168.0.x; Hast du womöglich mit meiner IP getestet?

Das bei der Timerlösung die letzte nicht mehr in Listbox2 auftaucht, ist logisch.

Setzt mal das i:=i+1 hinter die if-abfrage, dann wird die letzt auch getestet.

ATwardz 15. Mai 2003 18:51

Oh bin ich blöd, ja die Variante ohne Timer funkst jetzt!

Bei der mit Timer, sagt er das er die adress nit ändern kann während der Socket aktiv ist, weil er client1.close nit annimmt bzw. weil er den timer nit abschaltet!

[/delphi]

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Client1.host:='192.168.2.'+inttostr(i);
Try
Client1.Open;
If Client1.Socket.Connected then
Begin
Listbox1.Items.Add(Client1.Host);
client1.Close;
end
else
Begin
Listbox2.Items.Add(Client1.Host);
end;
finally
Client1.Close;
If i=105 then Timer1.Enabled:=false;
i:=i+1;
end;
end;

[delphi]

Das ist aber eigentlich egal weil die andere Variante, die die schöner ist funktioniert und dafür bin ich sehr dankbar!

Echt vielen Dank weil sonst wäre ich glaube ich nie dahinter gestiegen!

:D Thx

@wardz

ATwardz 15. Mai 2003 21:36

Ach ja ein Problem gibt es noch, was ich mir fast schon gedacht habe!

Da die IP ja x.x.x.x vier Stellen hat und ich also drei weitere Forschleifen davor geschaltet habe, wird der Pc überlastet.

Er sagt mir das der Puffer voll ist

Genau gesagt!

Windows socket error:Ein Socketvorgang konnte nicht ausgeführt werden, da dem System Pufferspeicher fehlte oder eine Warteschlange voll war
(10055), on API'connect'

Wie kann ich nach einer bestimmten Zeit den Speicher wieder freigeben!

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
i,c,b,a: Integer;
begin
  ListBox1.Clear;
  ListBox2.Clear;
  For a:=1 to 255 do
  Begin
   For b:=1 to 255 do
   Begin
     For c:=1 to 255 do
     Begin
       For i:=1 to 255 do
       begin
         Client1.host:='192.'+inttostr(b)+'.'+inttostr(c)+'.'+inttostr(i);
         Try
           Client1.Open;
           Application.ProcessMessages;
         if Client1.Socket.Connected then
         Begin
           ListBox1.Items.Add(Client1.Host);
           exit;
         end
         else
           //ListBox2.Items.Add(Client1.Host);
           Client1.Close;
         except
           beep;
         end;
       end;
       if Client1.Socket.Connected then
       Begin
         exit;
       end;
     end;
   end;
 end;
end;
Oder kann ich vielleicht 4 verschieden Proceduren anlegen, weil ja nach dem schliessen der Procedure der speicher wieder freigegeben wird?


Ich weiss das der scan bei mehr als 4 Millaren möglichkeiten vermutlich nie fertig wird aber ich wollte eine Eingrenzung später möglich machen!

Die Fehlermeldung kommt auch schon bei einem Spektrum von 192.168.1.1 bis 192.168.3.1 also ja nur 765 Möglichkeiten!

Gibs da vielleicht ne Möglichkeit?

Danke!

Captnemo 15. Mai 2003 23:29

Was machst du denn damit? Für ein Chatprogramm schon etwas merkwürdig. Sieht mir eher wie ein Suchprog für offene Ports aus. Aber naja.

Du bist dir schon im Klaren, das wenn du die suche startest (im Internet), das du dann erstmal eine Kanne Kaffee kochen und dann auch trinken kannst, bis das fertig ist. :mrgreen:

Aber gut, zurück zu deinem Problem. Ich schau mir das mal an. Mal sehen, was ich rauskriege.

ATwardz 16. Mai 2003 09:19

Mein Chatprogramm hat
Server-soll bei mir laufen
Client-soll bei diversen nutzern laufen!

Ip-scanner soll nun also meine IP für die Clients rausfinden, da ich ja keine static IP habe!

Kanne Kaffe is gut, ich habe ausgerechtet, das ich rund ein dreiviertel jahr brauche um alle IP's zu testen! :?

Naja ich weiss aber auch,das mein Provider unserem Router die IP's
von
213.146.1.1
bis
213.146.255.255

vergibt,was den Scan ja auf 255*255=65025 reduziert, jedoch kommt die Speicherüberlastung schon nach ungefähr 500 gescannten IP's!

Wenn ich das nu auf die Reihe bekomme, ist mein server immer erreichtbar
Eine Andere Möglichkeit wäre mein in eine Website zu integrieren,
jedoch weiss ich nit ob das so ohne Probleme geht, da ich bis jetzt nur
einfache Programme integriert habe wie Taschenrechner oder Counter!
Die sind ja nicht ständig aktiv, sondern werden von einem Betrachter der Website geöffnet!
Noch ein grund ist das es vielleicht Konflikte mit dem Port geben könnte, aber wie gesagt habe mich noch nicht damit befasst!

Danke im Vorraus!

@wardz :coder:

Captnemo 16. Mai 2003 09:28

Ich denke in deinem Fall kannst du das nur über UDP realisieren.

UPD ist ein Verbindungsloses Protokoll. D.h. du schickts einfach an jede IP ein UDP-Packet, nix wildes nur irgendein zeichen. Wenn dein Server dann so ein Zeichen empfängt, dann kann er ja per TCP eine Verbingung aufbauen, die IP hast du ja dann.
Nach Verbindungsaufbau hat der Client dann auch die Server-IP.

Wär das ne Idee ?

ATwardz 16. Mai 2003 12:49

UDP
 
Ja egentlich schon aber dann muss ich auf die TCP Komponente
umsteigen oder?

Wenn ja dann werde ich wohl das erstma in angriff nehmen und mein Programm umschreiben!

Thx :coder:

ATwardz 16. Mai 2003 17:19

Oder geht das nit auch vielleicht wenn ich den Clientsocket nach jeder 255 for-schleife freisetze und dann neu erzeuge? Habe ich vesucht aber ich glaube der übernimmt dann den Fehlercode 0 nit!

Delphi-Quellcode:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
a,b: Integer;
begin
  If client1.Active=false then
  Begin
    ListBox1.Clear;
    For b:=1 to 255 do
    Begin
     client1:=Tclientsocket.Create(self);
     client1.Close;
     client1.Port:=25555;
     client1.Socket.
     For a:=1 to 255 do
     begin
      Client1.host:='192.168.'+inttostr(b)+'.'+inttostr(a);
      Try
       Client1.Open;
       Application.ProcessMessages;
       if Client1.Socket.Connected then
       Begin
        ListBox1.Items.Add(Client1.Host);
        exit;
       end;
         client1.Close;
      except
        beep;
      end;
     end;
    end;
  end;
end;
Der schreit dann asynchron socket... aber das versteh ich nit!
Theoretisch müsste das doch geht, weiter der Speicher dann freigegeben wird wenn man das Objekt freisetzt oder?

Danke

@wardz

Captnemo 16. Mai 2003 21:43

Du folgendes erzeugt:

Code:
client1:=Tclientsocket.Create(self);
aber, wo ist das client1.free ? :?:

ATwardz 16. Mai 2003 23:58

War vor dem Create vom Socket also:

Delphi-Quellcode:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
a,b: Integer;
begin
  If client1.Active=false then
  Begin
    ListBox1.Clear;
    For b:=1 to 255 do
    Begin
     client1.Free;
     client1:=Tclientsocket.Create(self);
     client1.Close;
     client1.Port:=25555;
     For a:=1 to 255 do
     begin
      Client1.host:='192.168.'+inttostr(b)+'.'+inttostr(a);
      Try
       Client1.Open;
       Application.ProcessMessages;
       if Client1.Socket.Connected then
       Begin
        ListBox1.Items.Add(Client1.Host);
        exit;
       end;
         client1.Close;
      except
        beep;
      end;
     end;
    end;
  end;
end;
Komisch is nur das der Fehler unregelmässig auftritt!
Mi F7 habe ich mehr mals probiert und bin bis 255 durch gelaufen wenn ich es langsam gemacht habe, wenn ich F7 gedrückt hielt, hin er sicht ca nach 10 Ip's auf!?

Vielleicht ist die Schleife zu schnell für das freigeben des Sockets?

???


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.
Seite 2 von 3     12 3      

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