Script qui détecte l'état d'une connexion internet
Bonjour,
J'ai fait un script pour tester l'état de la connexion d'internet par l'ip public tous les x temps. si pas de connexion, il l'inscrit dans un fichier txt, si la connexion est fonctionnelle, ne rien faire.
Ce script je l'ai j'ajouté dans mes services /etc/init.d/eci.sh .
L'avantage d'utiliser le stop et start et de stopper le service pour changer le temps entre chaque test de connexion et de le démarrer. Cela me permet d'écrire à mon FAI et de lui indiquer les dates et heures auquel je n'avais pas de connexion internet.
1er script
Mais il y a un problème qui se pose :
Il est vrai que si mon script détecté l'état de la connexion par lip public, le problème reste que si la box est débranchée ou redémarrée, le script va croire qu'il n'y a plus internet. Or il y aura toujours internet.
Donc j'ai modifié le script pour qu'il teste aussi l'adresse DNS de la box.
Donc si l'adresse privée est pas détecté affiche rien et pour le non affiche un message et test immédiatement après l'adresse dns de la box est affiche un message si oui ou non.
2ème script
Quand pensez vous ?
Mais je voudrais savoir si il est possible de faire mieux ?
Car il me faut un script fiable pour pouvoir y communiquer à mon FAI.
Merci.
J'ai fait un script pour tester l'état de la connexion d'internet par l'ip public tous les x temps. si pas de connexion, il l'inscrit dans un fichier txt, si la connexion est fonctionnelle, ne rien faire.
Ce script je l'ai j'ajouté dans mes services /etc/init.d/eci.sh .
L'avantage d'utiliser le stop et start et de stopper le service pour changer le temps entre chaque test de connexion et de le démarrer. Cela me permet d'écrire à mon FAI et de lui indiquer les dates et heures auquel je n'avais pas de connexion internet.
1er script
#!/bin/bash #---------- Configuration ----------# ip="78.xxx.xx.xxx" annee=$(date +%Y) # année temps=900 #Indiquer le temps en secondes # 5 minutes : 60 x 5 = 300 # 15 minutes : 60 x 15 = 900 # 30 minutes : 60 x 15 = 1800 # 45 minutes : 60 x 15 = 2700 # 1 heure : 60 x 15 = 3600 #---------- Script ----------# while [ 1 ]; do sleep $temps date=$(date +%d/%m/%Y) #jouur heure=$(date +%H:%M:%S) #heure ping -c 1 "$ip" > /dev/null if [ 'echo $?' -eq 0 ]; then #echo "$date $heure : Connexion internet accessible." echo "" else #echo "$date $heure : Pas de connexion internet disponible, contacter votre FAI." #echo "$date $heure : Operateur : $FAI, téléphone : $telephone, identifiant : $identifiant, code : $code" echo "$date $heure : Pas de connexion internet disponible." >> /home/serveur/Rapports/$annee-etat-connxion-internet.txt fi done;
Mais il y a un problème qui se pose :
Il est vrai que si mon script détecté l'état de la connexion par lip public, le problème reste que si la box est débranchée ou redémarrée, le script va croire qu'il n'y a plus internet. Or il y aura toujours internet.
Donc j'ai modifié le script pour qu'il teste aussi l'adresse DNS de la box.
Donc si l'adresse privée est pas détecté affiche rien et pour le non affiche un message et test immédiatement après l'adresse dns de la box est affiche un message si oui ou non.
2ème script
#!/bin/bash #---------- Configuration ----------# ip="78.xxx.xx.xxx" dns=192.168.0.251 annee=$(date +%Y) # année temps=60 # 5 minutes # 5 minutes : 60 x 5 = 300 # 15 minutes : 60 x 15 = 900 # 30 minutes : 60 x 15 = 1800 # 45 minutes : 60 x 15 = 2700 # 1 heure : 60 x 15 = 3600 #---------- Script ----------# while [ 1 ]; do #sleep $temps date=$(date +%d/%m/%Y) #jouur heure=$(date +%H:%M:%S) #heure while [ 1 ]; do sleep $temps ping -c 1 "$ip" > /dev/null if [ $? -eq 0 ]; then echo "La connexion internet est accessible" #net="La connexion internet est accessible sur l'ip $ip" else #echo "pas de connexion internet disponible !" net="Pas de connexion internet disponible sur l'ip $ip !" fi ping -c 1 "$dns" > /dev/null if [ $? -eq 0 ]; then #echo "La box est disponible sur le réseau" local=". La box est disponible sur le réseau a l'adresse dns $dns" else #echo "La box n'est pas disponible sur le réseau" local=". La box n'est pas disponible sur le réseau a l'adresse dns $dns" fi echo "$date $heure : $net $local" echo "$date $heure : $net $local." >> /home/serveur/Rapports/$annee-etat-connxion-internet.txt exit 0
Quand pensez vous ?
Mais je voudrais savoir si il est possible de faire mieux ?
Car il me faut un script fiable pour pouvoir y communiquer à mon FAI.
Merci.
A voir également:
- Script qui détecte l'état d'une connexion internet
- Gmail connexion - Guide
- Cle usb qui ne se detecte pas - Guide
- Script vidéo youtube - Guide
- D'où peut venir un problème de connexion internet sur un ordinateur ? - Guide
- Nous avons détecté une nouvelle connexion instagram - Forum Instagram
3 réponses
Le truc c'est que tu peux avoir un DNS attribué sans pour autant avoir de connectivité. En effet c'est le serveur DHCP de ta box qui te l'attribue, donc elle peut te dire "ton DNS est 192.168.1.1" sans pour autant que tu puisses faire une résolution DNS.
D'autant que là tu pingues une adresse de ton réseau local !
C'est pourquoi à ta place si le but est de tester la disponibilité du DNS, je ferai explicitement une résolution DNS (en admettant que tu utilises le DNS de ton FAI) par exemple avec la commande nslookup puis je contrôlerais sa valeur de retour (stockée dans $? en shell). En effet un ping n'est pas suffisant en soi (ne serait-ce que parce que la machine en question peut répondre au ping sans répondre à une requête DNS, par exemple si le serveur DNS est stoppé).
Après si l'idée c'est de tester ta connectivité grâce à ping, tu peux faire beaucoup plus simple et pinguer une destination arbitraire, par exemple 8.8.8.8 ou www.google.fr et regarder ce qu'elle retourne.
Bonne chance
D'autant que là tu pingues une adresse de ton réseau local !
C'est pourquoi à ta place si le but est de tester la disponibilité du DNS, je ferai explicitement une résolution DNS (en admettant que tu utilises le DNS de ton FAI) par exemple avec la commande nslookup puis je contrôlerais sa valeur de retour (stockée dans $? en shell). En effet un ping n'est pas suffisant en soi (ne serait-ce que parce que la machine en question peut répondre au ping sans répondre à une requête DNS, par exemple si le serveur DNS est stoppé).
Après si l'idée c'est de tester ta connectivité grâce à ping, tu peux faire beaucoup plus simple et pinguer une destination arbitraire, par exemple 8.8.8.8 ou www.google.fr et regarder ce qu'elle retourne.
Bonne chance
Un exemple :
Comme indiqué dans le man nslookup renvoie 0 si tout va bien. Supposons maintenant que je coupe mon DNS et que je relance cette commande :
Si on suppose que ce DNS est le DNS du FAI le fait que nslookup ne retourne pas 0 signifie que soit on n'est pas parvenu à router le DNS, soit cette machine ne répond pas au serveur DNS. Dans les deux cas une résolution DNS n'est plus possible.
Maintenant le fait de ne pas avoir de DNS ne signifie pas ne pas avoir de connectivité vers l'Internet. Par exemple, bien que mon DNS soit ici coupé, je peux tout à fait pinger des destinations Internet (par exemple 173.194.78.94) :
Ici on voit donc que la connectivité vers l'Internet est assurée et que la panne est au niveau des DNS. La question qui se pose c'est qu'est ce que ton script diagnostique et qu'est ce qu'on appelle la "disponibilité" d'un FAI. S'agit-il du fait qu'il peut router tes paquets, résoudre et router, etc...
Bonne chance
(mando@silk) (~) $ nslookup www.google.fr Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: www.google.fr Address: 173.194.78.94 (mando@silk) (~) $ echo $? 0
Comme indiqué dans le man nslookup renvoie 0 si tout va bien. Supposons maintenant que je coupe mon DNS et que je relance cette commande :
(mando@silk) (~) $ nslookup www.google.fr ;; connection timed out; no servers could be reached (mando@silk) (~) $ echo $? 1
Si on suppose que ce DNS est le DNS du FAI le fait que nslookup ne retourne pas 0 signifie que soit on n'est pas parvenu à router le DNS, soit cette machine ne répond pas au serveur DNS. Dans les deux cas une résolution DNS n'est plus possible.
Maintenant le fait de ne pas avoir de DNS ne signifie pas ne pas avoir de connectivité vers l'Internet. Par exemple, bien que mon DNS soit ici coupé, je peux tout à fait pinger des destinations Internet (par exemple 173.194.78.94) :
(mando@silk) (~) $ ping -c2 173.194.78.94 PING 173.194.78.94 (173.194.78.94) 56(84) bytes of data. 64 bytes from 173.194.78.94: icmp_req=1 ttl=44 time=29.7 ms 64 bytes from 173.194.78.94: icmp_req=2 ttl=44 time=29.7 ms --- 173.194.78.94 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 29.711/29.720/29.730/0.172 ms
Ici on voit donc que la connectivité vers l'Internet est assurée et que la panne est au niveau des DNS. La question qui se pose c'est qu'est ce que ton script diagnostique et qu'est ce qu'on appelle la "disponibilité" d'un FAI. S'agit-il du fait qu'il peut router tes paquets, résoudre et router, etc...
Bonne chance
Bonjour,
Je n'ai pas très bien compris, vous voulez dire comme ceci :
Résultat :
Quand vous dite "tester la disponibilité du DNS" vous voulez dire l' adresse dns de la box ou le dns 1 et dns2 du fai ?
Merci.
Je n'ai pas très bien compris, vous voulez dire comme ceci :
dns="192.168.0.254" #dns de la box nslookup -sil "$dns" > /dev/null if [ $? ]; then echo "$date $heure : La connexion internet est accessible" else echo "$date $heure : pas de connexion internet disponible !" fi
Résultat :
serveur@debian:~$ bash /home/serveur/bash/demarrage/etat-connexion-internet.sh Server: 212.27.40.240 Address: 212.27.40.240#53 ** server can't find 254.0.168.192.in-addr.arpa.: NXDOMAIN 25/04/2013 12:35:08 : La connexion internet est accessible serveur@debian:~$
Quand vous dite "tester la disponibilité du DNS" vous voulez dire l' adresse dns de la box ou le dns 1 et dns2 du fai ?
Merci.