Recuperer ip par dns et ping en milisecondes [Résolu]

Signaler
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013
-
 Olivier -
Bonjour à tous, j'essaie actuellement de récupérer une adresse ip par un dns et récuperer le ping en ms.
Pour le ping cela a été chose facile mais concernant l'adresse ip je me vois obliger de demander votre aide.

Dans mon application, j'utilise un :

-timer (timerping) réglé à 1000 ms.
-une listbox (listboxping) qui contiendra les informations (ping, dns, ip)
-une textbox (textboxping) pour tapper l'adresse internet (dns)
-deux boutons pour lancer et arrêter le procéder.

Voici mon code :

         Dim DNS As String = TextBoxPing.Text
         Dim IP As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(DNS)
         'Exemple : textboxping.text = www.google.com
         ListBoxPing.Items.Add("Ping from " & TextBoxPing.Text & " (IP:" & IP.ToString & ")" & " = " & GetPing(TextBoxPing.Text) & " ms")


Mon problème c'est que je n'arrive pas à afficher l'addresse ip, l'application me donne cette ligne :

Ping from www.google.com (IP:System.net.IPAddress[]) 31 ms


Quelqu'un aurait une solution s'il vous plait ? :-)

5 réponses

Messages postés
14790
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
155
Bonjour,

Un nom DNS peut cacher plusieurs adresses IP.
Si tu ne veux que les ips V4, vérifie si le type est System.Net.IpAddress, pour IpV6 : System.Net.IpAddressV6 (je crois).

Ensuite, un .ToString pour récupérer au format texte.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
36
En effet NHenry a raison,

Comme tu le montre toi même dans ton code le paramètre retourné par GetHostAddresses est un tableau.

Dim IP As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(DNS)

le plus approprié est donc :

Dim IPs As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(DNS)
For Each IP As System.Net.IPAddress in IPs
    ListBoxPing.Items.Add("Ping from " & TextBoxPing.Text & " (IP:" & IP.ToString & ")" & _
    " = " & GetPing(TextBoxPing.Text) & " ms")
Next

ou encore
Dim IPs As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(DNS)
If IP.length > 0 Then
    ListBoxPing.Items.Add("Ping from " & TextBoxPing.Text & " (IP:" & IP(0).ToString & ")" & _
    " = " & GetPing(TextBoxPing.Text) & " ms")
End If

NHenry la classe IPAddress gère nativement les IPv6 il me semble.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

En effet, merci beaucoup à vous deux, vos réponses m'ont beaucoup aidé.
Bonjour,

Avec près de 7 ans de décalage, j'aimerais avoir une information ...
Je travaille sur Visual Studio 2015 et 2017 et la fonction GetPing n'est pas reconnue ...
Est-ce normal ? Par quoi faut-il la remplacer ?
Par avance merci de votre attention
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
Bonjour
A mon avis GetPing est une fonction que l'auteur a créée pour savoir le temps en millisecondes pour la réponse au Ping ( c'est le temps entre le Timer.Start et le Timer.Stop pour mesurer le temps du Ping ).
Ce n'est pas une fonction standard de visual Studio !
Bonjour vb95,

Merci de ta réponse.
Existe t'il une fonction permettant de récupérer cette information ?
Je dois faire un ping sur un ensemble d'adresses IP et calculer le delta entre le timer.start et timer.stop ... est-ce vraiment fiable ?
Par avanc merci
Je viens de trouver un bout de code permettant de faire ce que je recherchais :
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim sw As New Stopwatch

        If My.Computer.Network.Ping("192.168.1.240") Then

            sw.Start()
            My.Computer.Network.Ping("192.168.1.240")
            sw.Stop()
            Button3.Text = "elapsed time: " & (sw.ElapsedMilliseconds) & "ms"
        Else
            MsgBox("request timeout")
            Button3.Text = " Elapsed Time Not Available"
        End If
    End Sub


Il ne reste qu'à placer un bouton Button3 sur une form, coller ce code, vérifier l'adresse IP et tester !!

Voici le lien où je l'ai trouvé :
https://codes-sources.commentcamarche.net/forum/affich-10043106-ping-imprecis

Merci à tous