- 论坛徽章:
- 0
|
#!/usr/bin/perl
my $conf = "/tmp/ip.conf";
my $internal_ip;
my $internal_mask;
my $external_ip;
my $external_mask;
my $external_gateway;
open(FH,"<",$conf) or die $!;
while(<FH>
{
chomp;
next if(/^\s+$/);
my @line = split /\s+/,$_;
if(scalar @line != 2)
{
($external_ip,$external_mask,$external_gateway) = @line;
}
else
{
($internal_ip,$internal_mask) = @line;
}
}
print "|------------------Global Settings------------------|\n";
print "\t\$external_ip = $external_ip\n";
print "\t\$external_mask = $external_mask\n";
print "\t\$external_gateway = $external_gateway\n";
print "\t\$internal_ip = $internal_ip\n";
print "\t\$internal_mask = $internal_mask\n";
print "|---------------------------------------------------|\n";
#my @ifconfig = `/usr/bin/ifconfig -a`;
my @full_list;
my @running_list;
my $eth;
my %ip_hash;
my $g_internal_eth;
my $g_external_eth;
my $data = "data";
open(my $fp,"<",$data) or die $!;
while(<$fp>
{
chomp;
if(/(eth\d+|lo)/)
{
#print "|---$_---|\n";
$eth = $1;
push @full_list,$eth unless $eth eq 'lo';
}
if(/inet addr \d+.\d+.\d+.\d+).*Bcast/)
{
#print "$1\n";
$ip_hash{$eth} = $1;
}
if(/RUNNING/)
{
#print "<<--$_-->>\n";
push @running_list, $eth unless $eth eq 'lo';
}
}
close($fp);
foreach(@running_list)
{
#print "|--Running interface: $_-----|\n";
if(defined $ip_hash{$_})
{
$g_internal_eth = $_;
}
else
{
$g_external_eth = $_;
}
}
print "\$g_internal_eth = $g_internal_eth,\$g_external_eth = $g_external_eth\n";
#my @hw_list = `/usr/bin/ifconfig -a | grep HW`;
my @mac_list;
my %eth_hash;
my $hw_data = "hw.data";
open(my $hw_fp,"<",$hw_data) or die $!;
while(<$hw_fp>
#foreach(@hw_list)
{
if(/(eth\d+).*HWaddr\s+(\S+)\s*$/){
#print "$1,$2\n";
$eth_hash{$1}=$2;
push @mac_list,$2;
}
}
foreach (keys %eth_hash){
open FILE,">","/tmp/ifcfg-$_" or die $!;
print FILE "DEVICE=$_\n";
print FILE "BOOTPROTO=static\n";
print FILE "HWADDR=$eth_hash{$_}\n";
print FILE "ONBOOT=yes\n";
print FILE "TYPE=Ethernet\n";
if(scalar @running_list > 2)
{
foreach my $eth (@running_list)
{
if($_ eq $eth)
{
if(defined $ip_hash{$_})
{
print FILE "IPADDR=$ip_hash{$_}\n";
print FILE "NETMASK=255.255.255.0\n";
}
}
}
}
#@running_list = 2
else
{
foreach my $eth (@running_list)
{
if($_ eq $eth)
{
if(defined $ip_hash{$_})
{
print FILE "IPADDR=$ip_hash{$_}\n";
print FILE "NETMASK=255.255.255.0\n";
}
else
{
print FILE "IPADDR=$external_ip\n";
print FILE "NETMASK=$external_mask\n";
print FILE "GATEWAY=$external_gateway\n";
}
}
}
}
close FILE;
}
foreach(sort @mac_list)
{
#print "$_\n";
}
my @exclusive_list;
foreach(@full_list)
{
#print "$_.mac = $eth_hash{$_}\n";
my $tmp = $eth_hash{$_};
if($tmp =~ m/(\S+) \S+) \S+) \S+) \S+) \S+)/)
{
#print "$1-$2-$3-$4-$5-$6\n";
}
push @exclusive_list,$_ unless ($_ eq $g_internal_eth || $_ eq $g_external_eth);
}
my ($g_i_1,$g_i_2,$g_i_3,$g_i_4,$g_i_5,$g_i_6);
my ($g_e_1,$g_e_2,$g_e_3,$g_e_4,$g_e_5,$g_e_6);
$eth_hash{$g_internal_eth} =~ m/(\S+) \S+) \S+) \S+) \S+):(\S+)/;
{
($g_i_1,$g_i_2,$g_i_3,$g_i_4,$g_i_5,$g_i_6) = ($1,$2,$3,$4,$5,$6);
}
$eth_hash{$g_external_eth} =~ m/(\S+):(\S+):(\S+):(\S+):(\S+):(\S+)/;
{
($g_e_1,$g_e_2,$g_e_3,$g_e_4,$g_e_5,$g_e_6) = ($1,$2,$3,$4,$5,$6);
}
my $in_diff_ref;
my $ex_diff_ref;
foreach(@exclusive_list)
{
my $tmp = $eth_hash{$_};
if($tmp =~ m/(\S+):(\S+):(\S+):(\S+):(\S+):(\S+)/)
{
#print "$1-$2-$3-$4-$5-$6\n";
if(($1 eq $g_i_1) && ($2 eq $g_i_2) && ($3 eq $g_i_3) && ($4 eq $g_i_4) && ($5 eq $g_i_5))
{
$in_diff_ref->{$_} = ((hex($6) - hex($g_i_6)) > 0 ? (hex($6) - hex($g_i_6)) : (hex($g_i_6) - hex($6)));
print "$_.mac = $tmp,$g_internal_eth.mac = $eth_hash{$g_internal_eth},diff: $in_diff_ref->{$_}\n";
}
if(($1 eq $g_e_1) && ($2 eq $g_e_2) && ($3 eq $g_e_3) && ($4 eq $g_e_4) && ($5 eq $g_e_5))
{
$ex_diff_ref->{$_} = ((hex($6) - hex($g_e_6)) > 0 ? (hex($6) - hex($g_e_6)) : (hex($g_e_6) - hex($6)));
print "$_.mac = $tmp,$g_external_eth.mac = $eth_hash{$g_external_eth},diff: $ex_diff_ref->{$_}\n";
}
}
}
my $in_min;
my $g_internal_eth_2;
foreach(keys %$in_diff_ref)
{
if(!defined $in_min)
{
$in_min = $in_diff_ref->{$_};
$g_internal_eth_2 = $_;
}
if($in_diff_ref->{$_} < $in_min)
{
$in_min = $in_diff_ref->{$_};
$g_internal_eth_2 = $_;
}
}
my $ex_min;
my $g_external_eth_2;
foreach(keys %$ex_diff_ref)
{
if(!defined $ex_min)
{
$ex_min = $ex_diff_ref->{$_};
$g_external_eth_2 = $_;
}
if($ex_diff_ref->{$_} < $ex_min)
{
$ex_min = $ex_diff_ref->{$_};
$g_external_eth_2 = $_;
}
}
print "\t++++++++$g_internal_eth_2,$g_external_eth_2+++++++++++++\n";
[root@localhost bond]# cat /tmp/ip.conf
192.168.5.21 255.255.255.0
202.108.6.116 255.255.255.0 202.108.6.1
[root@localhost bond]# cat data
eth0 Link encap:Ethernet HWaddr F0:4D:A2:08:79:71
UP BROADCAST MULTICAST
eth1 Link encap:Ethernet HWaddr F0:4D:A2:08:79:73
UP BROADCAST MULTICAST
eth2 Link encap:Ethernet HWaddr 00:1B:21:64:16:F4
inet addr:192.168.5.190 Bcast:192.168.5.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST
eth3 Link encap:Ethernet HWaddr 00:1B:21:64:16:F5
UP BROADCAST MULTICAST
eth4 Link encap:Ethernet HWaddr 00:1B:21:64:16:F0
UP BROADCAST RUNNING MULTICAST
eth5 Link encap:Ethernet HWaddr 00:1B:21:64:16:F1
UP BROADCAST MULTICAST
eth6 Link encap:Ethernet HWaddr F0:4D:A2:08:79:75
UP BROADCAST MULTICAST
eth7 Link encap:Ethernet HWaddr F0:4D:A2:08:79:77
UP BROADCAST MULTICAST
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING
[root@localhost bond]# cat hw.data
eth0 Link encap:Ethernet HWaddr F0:4D:A2:08:79:71
eth1 Link encap:Ethernet HWaddr F0:4D:A2:08:79:73
eth2 Link encap:Ethernet HWaddr 00:1B:21:64:16:F4
eth3 Link encap:Ethernet HWaddr 00:1B:21:64:16:F5
eth4 Link encap:Ethernet HWaddr 00:1B:21:64:16:F0
eth5 Link encap:Ethernet HWaddr 00:1B:21:64:16:F1
eth6 Link encap:Ethernet HWaddr F0:4D:A2:08:79:75
eth7 Link encap:Ethernet HWaddr F0:4D:A2:08:79:77 |
|