IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Recherche des adresses IP sur un reseaux avec DELPHI 5


Sujet :

Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    btp
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : btp
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Recherche des adresses IP sur un reseaux avec DELPHI 5
    Bonjour tout le monde;
    Je suis à la recherche d`un code qui me permettra de faire un Ping de l'ensemble des adresses IP d'un réseau.
    Étant débutant sur Delphi, je ne sais pas comment m'y prendre. Ce code en dessus me semble bon, mais je suis bloqué sur le premier boucle for (for n := 0 to Length(PingThreads) - 1 do). Qui pourra m'aider par conséquence afin avancer ce code ou en l'occurrence me proposer un autre code qui fonctionne bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        Button1: TButton;
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
      TYPE
      PingThreads = class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;
     
    var
      Form1: TForm1;
     
      implementation
     
     
    {$R *.DFM}
     
     
     
    procedure PingThreads.Execute;
      var
    n: integer;
    begin
      for n := 0 to Length(PingThreads) - 1 do
    PostThreadMessage(PingThreads[n], WM_QUIT, 0, 0); // terminate all threads
    PingThreads := nil; 
     
    and this will execute the threaded ping to scan all ips from 127.0.0.0 to 127.0.0.255:
    var
    i:integer;
    begin
    listbox1.clear;
    for i:=0 to 255 do begin
    with TPingThread.Create(True) do
    begin
    SetLength(PingThreads, Length(PingThreads) + 1);
    PingThreads[Length(PingThreads) - 1] := ThreadId;
    FreeOnTerminate := True;
    OnTerminate := PingThreadTerminate;
    Addr := '127.0.0.'+inttostr(i);
    Resume;
    end;
    end;
     
    //   Here's the code for a threaded ping
    type
    TPingThread = class(TThread)
    private
    FPing: TPing;
    procedure FPingDnsLookupDone(Sender: TObject; Error: Word);
    procedure FPingEchoReply(Sender, Icmp: TObject; Error: Integer);
    public
    Addr: string;
    PingResult: string;
    procedure Execute; override;
    end;
     
    //------------------------------------------------------------------------------
    // TPingThread
    //------------------------------------------------------------------------------
    procedure TPingThread.Execute;
    var
    Msg: TagMsg;
    begin
     
    FPing := TPing.Create(nil); // create in thread context
    FPing.OnDnsLookupDone := FPingDnsLookupDone;
    FPing.DnsLookup(Addr);
     
    while not Terminated do
    begin
    //if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin
     
    GetMessage(Msg, 0, 0, 0); // create a message queue
    if Msg.message = WM_QUIT then
    Terminate;
    TranslateMessage(Msg);
    DispatchMessage(Msg);
    end;
     
    FPing.Destroy;
    end;
     
    //------------------------------------------------------------------------------
    procedure TPingThread.FPingDnsLookupDone(Sender: TObject; Error: Word);
    begin
    if Error <> 0 then
    begin
    PingResult := 'Unknown host ''' + Addr + '''';
    Terminate;
    Exit;
    end;
     
    with Sender as TPing do
    begin
    Address := DnsResult;
    OnEchoReply := FPingEchoReply;
    Ping;
    end;
    end;
     
    //------------------------------------------------------------------------------
    procedure TPingThread.FPingEchoReply(Sender, Icmp: TObject; Error: Integer);
    begin
    with Sender as TPing do
    if Error = 0 then
    PingResult := 'Cannot ping host (' + HostIP + ') : ' + ErrorString
    else begin
    form1.listbox1.items.add(HostIP);
    PingResult := 'Received ' + IntToStr(Reply.DataSize) + ' bytes from ' + HostIP + ' in ' + IntToStr(Reply.RTT) + ' ms';
    end;
    Terminate;
    end;
     
    //------------------------------------------------------------------------------
    // TForm1
    //------------------------------------------------------------------------------
    procedure TForm1.PingThreadTerminate(Sender: TObject);
    begin
    if not Application.Terminated then
    with Sender as TPingThread do
    Memo1.Lines.Add(PingResult);
    end;
     
    //------------------------------------------------------------------------------
    procedure TForm1.PingBtnClick(Sender: TObject);
    begin
    with TPingThread.Create(True) do
    begin
    SetLength(PingThreads, Length(PingThreads) + 1);
    PingThreads[Length(PingThreads) - 1] := ThreadId;
    FreeOnTerminate := True;
    OnTerminate := PingThreadTerminate;
    Addr := Edit1.Text;
    Resume;
    end;
      end;
    end.
     
    end.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    je n'ai pas regardé le code, mais les adresses du réseau ne sont certainement pas 127.0.0.1 à 127.0.0.255 !

    il faut retrouver l'adresse IP du PC (ou ses adresses IP s'il en a plusieurs) et la masque de sous réseau correspondant.

    exemple: 192.168.1.10 / 255.255.255.0, dès lors le réseau c'est 192.168.1.x avec x de 1 à 254

    dans la majorité des cas ça va fonctionner (même si ce n'est pas forcément ce réseau là), mais on pourrait aussi être sur un réseau de classe B avec un masque 255.255.0.0 et dans ce cas le réseau peut comprendre 65534 adresses et non plus seulement 254.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. [PHP 5.2] Localiser des adresses postales sur une carte
    Par arthuro45 dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2010, 15h29
  2. Réponses: 10
    Dernier message: 18/01/2010, 18h51
  3. Je recherche de l'aide sur une requête avec dates
    Par Alain CARDINI dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/05/2008, 22h11
  4. Code source pour rechercher des fichiers Mp3 sur le disque
    Par specta61 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2007, 19h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo