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!