Entwickler-Ecke
Internet / Netzwerk - Prüfen, ob ein Port offen ist
achterburg - So 26.10.03 19:36
Titel: Prüfen, ob ein Port offen ist
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 - 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
BungeeBug - 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 - 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:
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; end; end; end; |
das ist die procedure, umalle Rechner im Netz zu finden^^
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 ICMP: TidIcmpClient; begin ICMP:= TidICMPClient.Create(nil); ICMP.ReceiveTimeout:=300; result:= False; ICMP.Host:= host; ICMP.Ping; result:= ICMP.ReplyStatus.ReplyStatusType <> rsTimeOut; ICMP.Free; end;
function TForm7.getIPs: Tstrings; type TaPInAddr = array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: array[0..63] of 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 - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!