Skip to content

andrewlkho/ulagen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

ulagen.py is a short python script to generate an IPv6 unique local address as per the pseudo-random algorithm defined in RFC 4193. Run it without any arguments. For example:

% ulagen
Prefix:       fdf3:5237:bf63::/48
First subnet: fdf3:5237:bf63::/64
Last subnet:  fdf3:5237:bf63:ffff::/64

It can be called with arguments so you can generate subnet addresses from within shell scripts and other environments in a format suitable for use with the shell script eval command. --subnet can be specified multiple times. The format for --subnet is:

[NAME=]SUFFIX[/LEN]

where NAME is the name of the variable to output (for use with eval), SUFFIX is the suffix to append to the generated prefix, either expressed as decimal (this will be converted to hexadecimal) or hexadecimal (with a 0x prefix), and LEN is the optional subnet prefix length in bits (decimal).

By default, LEN is assumed to be 64.

NAME, if not explicitly defined will default to be net_XXXX_YY where XXXX is the subnet suffix expressed in hexadecimal, and YY is the subnet prefix length in decimal.

The /XX length can be omitted from the output by giving the --no-length command line argument.

To just spit out the ULA subnet:

% ulagen --subnet 0/48
net_0000_48=fdf3:5237:bf63::/48

Omit the /48 prefix length:

% ulagen --no-length --subnet 0/48
net_0000_48=fdf3:5237:bf63::

Custom variable name:

% ulagen --subnet mynetwork=0
mynetwork=fdf3:5237:bf63::/64

Multiple subnets:

% ulagen --subnet dmz=0 --subnet priv1=1 \
         --subnet priv2=2 --subnet priv10=10 --subnet vpns=0x80/56
dmz=fdf3:5237:bf63::/64
priv1=fdf3:5237:bf63:1::/64
priv2=fdf3:5237:bf63:2::/64
priv10=fdf3:5237:bf63:a::/64
vpns=fdf3:5237:bf63:8000::/56

You can also import the module into your own scripts, e.g. to re-implement the original ulagen.py:

import ulagen

prefix=ulagen.gen_prefix()
print ('Prefix:       ' + gen_subnet(prefix, 0x0000, 48))
print ('First subnet: ' + gen_subnet(prefix, 0x0000))
print ('Last subnet:  ' + gen_subnet(prefix, 0xffff))

For detail, have a look at the main() function in ulagen.py.

About

Generate an IPv6 ULA

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages