Autor Beitrag
achterburg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: So 26.10.03 19:36 
Hallo, ihc bin gerade dabei, Netzwerkfunktionalität für ein kleines Spiel zu entwickeln. Dabei möchte ich, dass alle rechner im Netz abgesucht werden( wass schon geht) und bei dehnen getestet wird, ob ein bestimmter Port offen ist, so also kein professioneller Portscanner werden, sondern nur eine Abfrage, ob Port 999 offen ist. WEiss jmd den Befehl dafür?
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 26.10.03 21:12 
Ein Port ist offen, wenn eine Anwendung dranhängt. In der Regel reicht es, zu versuchen, eine IP-Connection auf diesen Port zu setzen. KIst er established so hängt was dran.
grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
BungeeBug
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: So 26.10.03 21:28 
Hi,

nimm auf keinen Fall Port 999. Alle Ports < 1024 sind reserviert und nicht für die "freie" Benutzung gedacht!
achterburg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: So 26.10.03 21:47 
also, port 999 werde ich dann mal ändern. Aber ich kann nciht einfach kucken, ober connecten kann, da ich eine Zählschleife als IP prüfer verwende. WEnn er nicht verbinden kann, fliegt er aus der Zählschleife raus. Und dann kann ich keine komplette liste, von allen Netzwerkclients machen, an die ich Daten schicken möchte. Mein Code:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm9.datensenden;
Var i,j:integer;
host:String;
Begin
j:=1;
host:=form7.getsubnet('192.168.0.1');
form1.IdTCPClient1.Port:=999;
for i := 1 to 254 DO
 Begin
  If form7.istda(host + inttoStr(i))
  THEN Begin
    form9.StringGrid1.Cells[0,j] :=host  + inttoStr(i);
    form1.IdTCPClient1.Host:=host + InttoStr(i);
    form1.IdTCPClient1.Connect;
    If form1.IdTCPClient1.Connected THEN
      form1.IdTCPClient1.WriteLn(form2.Edit1.Text + '|' + form7.Memo1.Lines.Strings[0]);
    form1.IdTCPClient1.Disconnect;
    form1.IdTCPClient1.Free;
    sleep(10);
    j:=j + 1;
//showmessage(InttoStr(i));
   end;
 end;
end;


das ist die procedure, umalle Rechner im Netz zu finden^^

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
function TForm7.istda(Host:String):boolean;
  var
//    MS: Integer;
    ICMP: TidIcmpClient;
  begin
    ICMP:= TidICMPClient.Create(nil);
    ICMP.ReceiveTimeout:=300;
    result:= False;
    ICMP.Host:= host;
    ICMP.Ping;
//    MS:=ICMP.ReplyStatus.MsRoundTripTime;
    result:= ICMP.ReplyStatus.ReplyStatusType <> rsTimeOut;
    ICMP.Free;
  end;

function TForm7.getIPs: Tstrings;
type
  TaPInAddr = array[0..10of PInAddr; 
  PaPInAddr = ^TaPInAddr; 
var 
  phe: PHostEnt;  
  pptr: PaPInAddr; 
  Buffer: array[0..63of Char;  
  I: Integer;
  GInitData: TWSAData;
begin 
  WSAStartup($101, GInitData);  
  Result := TstringList.Create;
  Result.Clear;
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  I    := 0;
  while pPtr^[I] <> nil do
  begin
    Result.Add(inet_ntoa(pptr^[I]^));
    Inc(I);  
  end;  
  WSACleanup;
end;

function TForm7.getsubnet(IP :string):string;
var i,j:integer;
text1 :string;
begin
text1:='';
for i := 1 to Length(IP) Do
  text1:=IP[i] + text1;
j:=1;
For j := 1 to 3 DO
   Begin
    If (text1[1] <> '.'THEN
    delete(text1,1,1);
   end;
for i := 1 to Length(text1) Do
result:=text1[i] + result;

end;

procedure TForm7.BitBtn3Click(Sender: TObject);
begin
form9.Show;

form9.datensenden;
end;

end.


das ist ein ausschnitt ausder anderen unit, hier wird zum einen das Subnet festgestellt, zum anderen die Ip und außerdem die Procedure datensenden aufgerufen
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 26.10.03 23:00 
setz das Connect doch einfach in einen try..except-Block, dann hast Du keine Probleme, dass die entstehende Exception Dir Deine Schleife verlässt ;-)
achterburg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: So 26.10.03 23:21 
DELUXE, es funktioniert. Wenn mir jetzt noch jemand sagen kann, wie ihc das scannen mit mehreren Threads machen kann, weil ja ein pingen an 254 Rechner auch so seine Zeitbraucht, ist alles perfekt!

Abererstmal vielen Dank nochmal