Simple comparateur ipv4 en python

Contenu du snippet

Comparaison de deux adresses IPv4 pour determiner si elles sont sur le meme sous reseau. Le script effectue les verifications de base niveau syntaxe.
Niveau pedagogique ce script est de niveau debutant, il montre la creation et l'utilisation simple d'une classe en python ainsi que de son constructeur.
A retenir, la forme ternaire tres pythonesque "a == b AND action_si_vrai OR action_si_faux"

Source / Exemple :


# 21/10/2009 -- Erebos
#
# Simple script permettant de verifier que 2 adresses IP
# sont surlle meme sous-reseau.

import sys

class netaddr():
    def __init__(self,s):
        t=s.split('.')
        if len(t) != 4:
            print "adresse IP non valide ! " + s
            sys.exit()
        for val in t:
            try :
                if (int(val) <= 255):
                    continue
            except:
                print "adresse IP non valide ! " + s
                sys.exit()               
        self.a = int((s.split('.'))[0])
        self.b = int((s.split('.'))[1])
        self.c = int((s.split('.'))[2])
        self.d = int((s.split('.'))[3])
        
def main(addr1,addr2,netmask):
    
    addr1 == addr2 and sys.exit("[Abandon] les adresses IP sont identiques !")
    a1 = netaddr(addr1)
    a2 = netaddr(addr2)
    mask = netaddr(netmask)

    a1rx=str(a1.a & mask.a) +'.'+str(a1.b & mask.b) +'.'+str(a1.c & mask.c) +'.'+str(a1.d & mask.d)
    a2rx=str(a2.a & mask.a) +'.'+str(a2.b & mask.b) +'.'+str(a2.c & mask.c) +'.'+str(a2.d & mask.d)
    
    addr1 == a1rx and sys.exit("[Abandon] Adresse ip " + addr1+" est une adresse de reseau !")
    addr2 == a2rx and sys.exit("[Abandon] Adresse ip " + addr2+" est une adresse de reseau !")
    
    print '-----------------------------------------'
    print "Adresse 1: "+addr1 +" reseau: "+a1rx+" masque: "+netmask
    print "Adresse 2: "+addr2 +" reseau: "+a2rx+" masque: "+netmask
    print a1rx==a2rx and 'Masque identique, ils communiquent :-)' or 'Masque different, ils ne communiquent PAS !!'
    print '-----------------------------------------'

def usage():
    print " addr1 addr2 masque sous la forme d'une adresse IPv4 : x.x.x.x"

if __name__ == "__main__":
    if len(sys.argv) != 4:
        usage()
        sys.exit()
    main(sys.argv[1],sys.argv[2],sys.argv[3])

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.