![]() |
Ping
Hallo,
ich habe eine dringende Bitte: Ich muss am Montag zwei Stunden lang meinen Mitschülern im Informatikunterricht objektorientiertes Programmieren erklären. Die erste Stunde mache ich Definitionen, Diagramme und wichtige Methoden und die zweite Stunde möchte ich eben mit ihnen zusammen ein Programm erarbeiten, dass einen Ping über die icmp.dll durchführt. Ich habe bereits einen Button selber gemacht (wegen Klassen und so). Die Ping-Prozedur ist eigentlich nebensächlich, aber ich muss eben noch irgendetwas mit diesem Button machen und außerdem interessiert mich der Ping sowieso. Meinen letzter Thread wurde vom Moderator geschlossen, weil er mir vorwarf hierdraus ein Hausaufgabenforum zu machen, aber darum geht es eben nicht: Ich habe schon alles andere vorbereitet und es geht ja eigentlich nur ums Klassen-Programmieren. Die Ping-Prozedur ist ein interessanter Zusatz und delphipraxis.de wird natürlich auch als Quelle angegeben. Desweiteren ist unser Schulnetzwerk sehr schlecht geschützt und ich möchte versuchen das unserem Informatiklehrer zu zeigen, indem ich in dem Programm dann übergroße Pings auf den Server loslasse und er sie durchlassen wird :wink: (natürlich nur, wenn er mir das gestattet). An den Moderator: Bitte schließen sie meinen Thread nicht! Diese Prozedur ist nur ein geringer Zusatz, der im Rahmen eines Vortrages über Klassen nebensächlich ist und nur für mich und für uns als Schüler interessant ist. Ich wäre euch total dankbar, wenn sich bis morgen Abend :pale: einer findet, der sich die Mühe machen würde den folgenden Quelltext zu kommentieren!
Delphi-Quellcode:
Vielen Dank schon mal im Vorraus für die Hilfe!!!
unit Unit2;
interface uses Windows, SysUtils, Classes; type TSunB = packed record s_b1, s_b2, s_b3, s_b4: byte; end; TSunW = packed record s_w1, s_w2: word; end; PIPAddr = ^TIPAddr; TIPAddr = record case integer of 0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: longword); end; IPAddr = TIPAddr; function IcmpCreateFile : THandle; stdcall; external 'icmp.dll'; function IcmpCloseHandle (icmpHandle : THandle) : boolean; stdcall; external 'icmp.dll' function IcmpSendEcho (IcmpHandle : THandle; DestinationAddress : IPAddr; RequestData : Pointer; RequestSize : Smallint; RequestOptions : pointer; ReplyBuffer : Pointer; ReplySize : DWORD; Timeout : DWORD) : DWORD; stdcall; external 'icmp.dll'; function Ping(InetAddress : string) : boolean; implementation uses WinSock; procedure TranslateStringToTInAddr(AIP: string; var AInAddr); var phe: PHostEnt; pac: PChar; GInitData: TWSAData; begin WSAStartup($101, GInitData); try phe := GetHostByName(PChar(AIP)); if Assigned(phe) then begin pac := phe^.h_addr_list^; if Assigned(pac) then begin with TIPAddr(AInAddr).S_un_b do begin s_b1 := Byte(pac[0]); s_b2 := Byte(pac[1]); s_b3 := Byte(pac[2]); s_b4 := Byte(pac[3]); end; end else begin raise Exception.Create('Error getting IP from HostName'); end; end else begin raise Exception.Create('Error getting HostName'); end; except FillChar(AInAddr, SizeOf(AInAddr), #0); end; WSACleanup; end; function Ping(InetAddress : string) : boolean; var Handle : THandle; InAddr : IPAddr; DW : DWORD; rep : array[1..128] of byte; begin result := false; Handle := IcmpCreateFile; if Handle = INVALID_HANDLE_VALUE then Exit; TranslateStringToTInAddr(InetAddress, InAddr); DW := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, 0); Result := (DW <> 0); IcmpCloseHandle(Handle); end; end. Viele Grüße vom LAWn-M0W3R |
Re: Ping
Wenn der Code sowieso nebensächlich ist, dann ist es auch nicht wichtig zu wissen, wie er intern funktioniert.
BTW: ![]() |
Re: Ping
Im Sinne des Vortragsziels OOP und Klassen ist er nicht notwendig, aber ich will den Code einbringen um, zum einen, den Lehrer zu beeindrucken und das Schulnetzwerk zu testen und, zum anderen, weil ich ihn selber verstehen will und so eben gleich noch etwas dazulerne. Übrigens, vielen Dank für deine Nachricht!
LAWn-M0W3R |
Re: Ping
Ähhh. Hab ich grad was nicht mitbekommen?
Wir haben den ersten Thread nicht umsonst zu gemacht. :warn: Wenn Du genau wissen willst, wie der Code funktioniert, dann schnapp Dir Google (oder Google CodeSearch) und such nach den einzelnen Aufrufen. Die API-Calls wirst Du nebenbei auch im MSDN finden. Und da es nicht angehen kann, dass wir einen Thread schliessen und der dann beliebig nochmal aufgemacht wird wirst Du wohl verstehen, dass wir den hier auch zumachen müssen. Sonst könnte jeder kommen und hierauf verweisen und sagen 'Der durfte doch auch'. Also deswegen: --- LOCKED --- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz