#!/usr/bin/perl use strict; use warnings; use Getopt::Long; use Data::Dumper; my ($count, $base); &Getopt::Long::GetOptions( 'count=i' => \$count, 'base=i' => \$base ); my @delimiter = ('.', ':', '-', ' '); my $z = 1; # $z == 1 means zero padding my %mac; for (my $i=0; $i<$count; $i++) { my $mac = ''; my $delimiter = $delimiter[int(rand(4))]; for (my $j=0; $j<6; $j++) { # 6 octets for (my $k=0; $k<2; $k++) { my $random = sprintf('%x', int(rand(16))); if (($k == 0) && ($random eq '0') && ($z == 0)) { next; # Zero padding is turned off } $mac .= $random; } unless ($j == 5) { # Avoid trailing delimiter $mac .= $delimiter; } } $mac{$mac} = {base => $base, bit_group => 16, delimiter => $delimiter, zero_padding => $z}; $z = int(rand(2)); } my $dump = Data::Dumper->new([\%mac], ['mac']); print $dump->Dump();