Nous connaissons tous les sites whatismyip, ifconfig.me, etc ; qui permettent d’obtenir son adresse IP publique.
Il est intéressant d’avoir cette information également dans un script.
Cela peut se faire via la commande curl sur un des sites suivants :
- http://ifconfig.me/ip
- http://icanhazip.com
$ curl http://ifconfig.me/ip
Dans la suite de mon article, je vais l’utiliser pour un script python Centreon/Nagios avec la gestion d’erreur et la possibilité de tester différents sites si l’un d’eux est indisponible. Cela permet de tester sa connexion en plus du simple « ping ».
Concrètement cela peut servir dans ce type de cas :
- Vous disposez de plusieurs IP de sortie : on peut vérifier que l’on sort avec la bonne IP, très utilise en cas l’erreur de natting dans le firewall.
- Vous disposez de 2 lignes internet avec chacune une adresse IP différente pour avoir un failover et vous voulez détecter un basculement
Attention que ces tests ont des dépendances avec un service DNS à monitorer également dans Centreon ou Nagios 😉
Vérifier son IP via un script de check whatismyip
Voici comment utiliser le script de vérification d’adresse IP publique de sortie. On va lui donner un nom basique : check_public_ip.py
On peut soit renseigner l’adresse IP attendue dans le script, soit le passer en argument de cette façon :
$ python check_public_ip.py 1.2.3.4
Quand tout se passe correctement, vous obtenez ceci :
CheckPublicIP: OK - public ip from site 'http://icanhazip.com' : '1.2.3.4'
Si vous avez basculé sur votre ligne secondaire ou tout autre évènement qui utilise une IP différente que celle voulue :
CheckPublicIP: Warning - not on the right public IP '1.2.3.4' ! Maybe you are on your failover Gateway - public IP: '6.7.8.9'
Si vous avez un gros souci internet :
CheckPublicIP: Critical - Internet connection seems to have a problem!
Les returnCodes type Nagios / Centreon sont gérés bien-entendu 😉
Voici le script
#!/usr/bin/python # Auteur : Belgotux # Site : www.monlinux.net # Adresse : # Version : 1.0 # Date : 10-03-2015 # Licence : GPLv3 # Description : check the public IP address of the connection for Nagios/Centreon from urllib import urlopen import re,sys #INSERT HERE YOUR IP HERE IF YOU NOT USE ARGUMENTS myip = "1.2.3.4" #inactif right now http://curlmyip.com sites_list = ('http://curlmyip.com','http://icanhazip.com','http://ifconfig.me/ip','http://myip.monlinux.net/') # Return codes expected by Nagios/Centreon OK = 0 WARNING = 1 CRITICAL = 2 ip='None' #MAIN if (len(sys.argv)==2): myip = sys.argv[1] if (len(sys.argv)>2): print "Only put one argument (or not) : the expected IP" raise SystemExit, 4 for site in sites_list: try: ip = urlopen(site).read() p=re.match('([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(\d{1,3}\.){3}\d{1,3}', ip) if p: break except IOError: continue if ip == myip+'\n': print "CheckPublicIP: OK - public ip from site %r : %r" % (site,str(ip)[:-1]) raise SystemExit, OK elif re.match('([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(\d{1,3}\.){3}\d{1,3}', ip): print 'CheckPublicIP: Warning - not on the right public IP %r ! Maybe you are on your failover Gateway - public IP: %r' % (myip,str(ip)[:-1]) raise SystemExit, WARNING else: print "CheckPublicIP: Critical - Internet connection seems to have a problem!" raise SystemExit, CRITICAL
Disposer de son propre système whatismyip
Si vous voulez disposer de votre propre serveur de vérification d’IP publique, rien de plus simple : il vous suffit d’avoir un mini hébergement web sous la main!
Il faut simplement renvoyer l’adresse IP suivie d’un retour à la ligne avec ce simple bout de code :
<? echo $_SERVER['REMOTE_ADDR']; echo "\n"; ?>
Enjoy!
Laisser un commentaire