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

C++Builder Discussion :

Vérifier l’existence d'une adresse IP sous le réseau


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 46
    Par défaut Vérifier l’existence d'une adresse IP sous le réseau
    Bonjour à tous,

    J'essaye de coder une fonction pour savoir si une adresse IP donnée existe ou non dans mon réseau j'ai utiliser cette ligne code et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ret=system("ping 192.1.1.80");
    Mais cette commande m'ouvre l'invite de commande DOS ce qui me gêne y'a -il une autre manière de le faire!!

    Cordialement,

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 082
    Par défaut
    si tu veux faire un Ping discret via CMD, tu peux faire un ShellExecute avec SW_HIDE ou CreateProcess comme dans le sujet Delphi : Redirection des entrées/sorties du process (ping), ce code inspiré de la MSDN - Comment faire pour le déploiement de processus de console avec des poignées standard redirigées


    Maintenant, tu peux utiliser l'ICMP : Comment connaître le type d'un élément dans un réseau IP ? code issu de la MSDN IcmpSendEcho, l'exemple fourni par la MSDN étant en C++ devrait être facile à reprendre !

    Il existe aussi le MIB - Management Information Base pour obtenir des informations avancées
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 46
    Par défaut
    Bonjour, Merci pour votre réponse Shail
    J'ai essayé donc l'ICMP voila le code ci-dessous:
    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
    #include <vcl.h>
    #pragma hdrstop
     
    #include "PingTest.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
     
     
    TForm1 *Form1;
     
    // les entetes ICMP.DLL 
    extern "C"
    {
    #include "ipexport.h""
    #include "icmpapi.h"
    }
     
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    // An array of error message strings.
    String ErrorStrings[] = {
    	"Error Base",
    	"Buffer too small.",
    	"Destination net unreachable.",
    	"Destination host unreachable.",
    	"Destination protocol unreachable.",
    	"Destination port unreachable.",
    	"Out of resources.",
    	"Bad option.",
    	"Hardware error.",
    	"Packet too large.",
    	"Request timed out.",
    	"Bad request.",
    	"Bad route.",
    	"TTL expired in transit.",
    	"TTL expired REASSEM.",
    	"Param problem.",
    	"Source quench.",
    	"Option too large.",
    	"Bad destination.",
    	"Address deleted.",
    	"Spec MNU change.",
    	"MTU change.",
    	"Unload"
    };
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // Obtain an ICMP handle.
    	HANDLE hIcmp = IcmpCreateFile();
    	if (!hIcmp) {
    		ShowMessage("Error getting ICMP handle");
    		return;
    	}
    	// Clear the Memo of any previous text.
    	Memo1->Lines->Clear();
    	Memo1->Lines->Add("Pinging " + Edit1->Text);
    	// Parse the IP address in the Edit.
    	String S = Edit1->Text;
    	int addr1 = Trim(S.SubString(1, 3)).ToInt();
    	int addr2 = Trim(S.SubString(5, 3)).ToInt();
    	int addr3 = Trim(S.SubString(9, 3)).ToInt();
    	int addr4 = Trim(S.SubString(13, 3)).ToInt();
    	// Make an int out of the IP address.
    	int addr = MAKELONG(
    		MAKEWORD(addr1, addr2),
    		MAKEWORD(addr3, addr4));
    	// Allocate a buffer for the reply info.
    	int size = sizeof(icmp_echo_reply) + 8;
    	char* buff = new char[size];
    	// Show the user we'll be busy for a while.
    	Screen->Cursor = crHourGlass;
    	// Send the echo request three times to
    	// emulate what the PING program does.
    	for (int i=0;i<3;i++) {
    		Application->ProcessMessages();
    		// Call IcmpSendEcho().
    		DWORD res = IcmpSendEcho(hIcmp,
    			addr, 0, 0, 0, buff, size, 1500);
    		if (!res) {
    			Memo1->Lines->Add("Request timed out.");
    			continue;
    		}
    		// Prepare to report the status.
    		icmp_echo_reply reply;
    		memcpy(&reply, buff, sizeof(reply));
    		// If the status is non-zero then show the
    		// corresponding error message from the
    		// ErrorStrings array to the user.
    		if (reply.Status > 0)
    			Memo1->Lines->Add(
    				ErrorStrings[reply.Status - 11000]);
    		else {
    			// Build a string to report the results.
    			String rtt = reply.RoundTripTime;
    			String ttl = reply.Options.Ttl;
    			String S = "Reply from " + Edit1->Text +
    			" time=" + rtt +"ms TTL=" + ttl + "ms";
    			// Add it to the memo.
    			Memo1->Lines->Add(S);
    		}
    		// Pause a second and then loop.
    		Sleep(1000);
    	}
    	// Close the ICMP handle.
    	IcmpCloseHandle(hIcmp);
    	// Restore the cursor.
    	Screen->Cursor = crArrow;
    }
    mais j'ai les erreurs suivants que j'ai pas pu y remédier
    [ILINK32 Erreur] Error: 'IcmpCreateFile' externe non résolu, référencé depuis D:\TEST OF PING\DEBUG\PINGTEST.OBJ
    [ILINK32 Erreur] Error: 'IcmpSendEcho' externe non résolu, référencé depuis D:\TEST OF PING\DEBUG\PINGTEST.OBJ
    [ILINK32 Erreur] Error: 'IcmpCloseHandle' externe non résolu, référencé depuis D:\TEST OF PING\DEBUG\PINGTEST.OBJ
    Merci bien pour votre aide

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 082
    Par défaut
    Tu as du faire un liaison statique de la DLL, inclut le fichier LIB, je pense qu'il s'appele "iphlpapi.lib", c'est le nom de la DLL contenant IcmpSendEcho et c'est confirmé par la MSDN avec les pragma suivant, je ne sais pas trop ce que cela signife !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma comment(lib, "iphlpapi.lib")
    #pragma comment(lib, "ws2_32.lib")
    En C++Buider 6 et C++Builder 2007, il est dans "..\lib\psdk"
    En C++Builder XE2, il est dans "..\lib\win32\release\psdk"

    En général, je ne pratique pas la liaison statique surtout si la DLL est peu utilisé dans le programme, habitué au couple LoadLibrary\GetProcAddress
    Si l'ajout du fichier LIB ne résoud pas ton problème, je ne pourrais pas t'aider plus !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 46
    Par défaut
    Bonjour,

    Merci infiniment Shail j'ai inclus les lib et ça marche enfin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/03/2012, 16h15
  2. Réponses: 5
    Dernier message: 12/01/2012, 16h47
  3. Réponses: 6
    Dernier message: 18/03/2009, 17h25
  4. Vérifier plus largement une adresse email dans un formulaire
    Par DJ Caësar 9114 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2009, 16h20
  5. Comment fixer une adresse IP sous fedora ?
    Par kamusal dans le forum RedHat / CentOS / Fedora
    Réponses: 3
    Dernier message: 20/12/2008, 23h43

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