AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ping

Ein Thema von LAWn-M0W3R · begonnen am 18. Nov 2006 · letzter Beitrag vom 18. Nov 2006
Thema geschlossen
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#1

Ping

  Alt 18. Nov 2006, 21:07
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 (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 einer findet, der sich die Mühe machen würde den folgenden Quelltext zu kommentieren!
Delphi-Quellcode:
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.
Vielen Dank schon mal im Vorraus für die Hilfe!!!

Viele Grüße vom LAWn-M0W3R
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Ping

  Alt 18. Nov 2006, 21:11
Wenn der Code sowieso nebensächlich ist, dann ist es auch nicht wichtig zu wissen, wie er intern funktioniert.

BTW: http://www.delphipraxis.net/internal...=641188#641188
Michael
Ein Teil meines Codes würde euch verunsichern.
 
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#3

Re: Ping

  Alt 18. Nov 2006, 21:29
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
 
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#4

Re: Ping

  Alt 18. Nov 2006, 21:31
Ähhh. Hab ich grad was nicht mitbekommen?

Wir haben den ersten Thread nicht umsonst zu gemacht.

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 ---
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
 
Thema geschlossen


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.
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