help parsing ipv6 addresses and subnets

Discussion in 'Python' started by Prabhu Gurumurthy, Nov 8, 2007.

  1. Hello list,

    I would like to parse IPv6 addresses and subnet using re module in
    python. I am able to either parse the ipv6 address or ipv6 network but
    not both using single line. any help appreciated. BTW is there a
    metacharacter for hex digits.


    #!/usr/bin/env python2.5
    # $Id: $

    import re, os, Queue, sys
    from optparse import OptionParser

    # for debug purposes only
    import pdb

    argc = len(sys.argv)
    (dirname, program) = os.path.split(sys.argv[0])

    def error(Message):
    if Message:
    global program
    print "%s: %s" %(program, Message)

    def cisco_parse(FileName):
    if FileName:
    fh = None
    if os.path.exists(FileName):
    fh = open(FileName, "r")
    except IOError, message:
    count = 0
    flag = True
    while flag:
    lines =
    except StopIteration:
    flag = False
    line = lines.strip()
    rehex = "[A-Fa-f0-9]"
    # to parse ipv6 address
    format = \
    "((%s{1,4}:?:){1,7}%s{1,4})" %(rehex, rehex)
    # to parse ipv6 subnet
    # format = \
    # "((%s{1,4}:?:){1,7}%s{1,4}(?=:):/\d{1,3})))"
    %(rehex, rehex)
    reip6 = re.compile(format)
    match =
    if match is not None:
    tupleLen = len(match.groups())
    if tupleLen == 2:
    print count, match.groups()[0]
    elif tupleLen == 3:
    print count, match.groups()[0] + match.groups()[2]
    count += 1

    fh = None

    def ParseCmdLine():
    parser = OptionParser(usage="%prog [options]", version="%prog 1.0")
    parser.add_option("-f", "--filename",
    help="cisco config to read", dest="file")

    (options, args) = parser.parse_args()

    fileName = None
    if options.file:
    fileName = options.file

    if fileName:

    if __name__ == "__main__":
    if argc <= 1:
    error("too few arguments, use -h or --help to view all options")
    Prabhu Gurumurthy, Nov 8, 2007
    1. Advertisements

  2. Thorsten Kampe, Nov 8, 2007
    1. Advertisements

  3. Prabhu Gurumurthy

    Hyuga Guest

    And even if you do end up doing the IPv6 parsing yourself (which you
    shouldn't), regular expressions would be the wrong approach--there's
    no way an RE can deal with replacing a :: with the correct number of
    zeroes, among other complications.

    Hyuga, Nov 8, 2007
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.