📄 mac2hex.pl
字号:
#! /usr/bin/perl## Convert Ethernet (MAC) address (dot notation) to "ether.inc"#sub usage { print STDERR "usage: $ego [-v] [-binutils] ddd.ddd.ddd.ddd.ddd.ddd\n"; print STDERR " $ego [-v] [-binutils] hh:hh:hh:hh:hh:hh\n"; print STDERR " $ego [-v] [-binutils] \@file\n"; print STDERR " $ego [-v] [-binutils] - < file\n"; exit 1;}$ego = $0;$ego =~ s/.*[\/\\]//;$define = 0;$bat = 0;$equ = 0;$verbose = 0;while ($ARGV[0] =~ /^-/ && $ARGV[0] ne '-') { $opt = shift; if ($opt eq '-define') { $define = 1; } elsif ($opt eq '-bat') { $bat = 1; } elsif ($opt eq '-equ') { $equ = 1; } elsif ($opt eq '-binutils') { $binutils = 1; } elsif ($opt eq '-v') { $verbose = 1; } else { &usage; }}$mac = shift;&usage if ($mac eq '');exit(1) if (($mac = &getmac($mac)) eq '');(@a) = split(/\./,$mac) ;$mac = sprintf("%d.%d.%d.%d.%d.%d", $a[0], $a[1], $a[2], $a[3], $a[4], $a[5]);if ($define) { printf("#define STATIC_MAC_MSB 0%02X%02Xh\t/* MAC address $ip */\n", $a[0], $a[1]); printf("#define STATIC_MAC_NSB 0%02X%02Xh\n", $a[2], $a[3]); printf("#define STATIC_MAC_LSB 0%02X%02Xh\n", $a[4], $a[5]);} elsif ($bat) { print "set MAC=$mac\n";} elsif ($equ) { if ($binutils) { printf(".global\tMAC_MSB, MAC_NSB, MAC_LSB\n"); printf(".equ\tMAC_MSB, 0x%02X%02X\t; MAC address $ip\n", $a[0], $a[1]); printf(".equ\tMAC_NSB, 0x%02X%02X\n", $a[2], $a[3]); printf(".equ\tMAC_LSB, 0x%02X%02X\n", $a[4], $a[5]); } else { printf("public\tMAC_MSB, MAC_NSB, MAC_LSB\n"); printf("MAC_MSB\tequ\t0%02X%02Xh\t; MAC address $ip\n", $a[0], $a[1]); printf("MAC_NSB\tequ\t0%02X%02Xh\n", $a[2], $a[3]); printf("MAC_LSB\tequ\t0%02X%02Xh\n", $a[4], $a[5]); }} else { if ($binutils) { printf("\t.word\t0x%02X%02X\t; Ethernet address $mac\n", $a[0], $a[1]); printf("\t.word\t0x%02X%02X\n", $a[2], $a[3]); printf("\t.word\t0x%02X%02X\n", $a[4], $a[5]); } else { printf("\tdw\t0%02X%02Xh\t; Ethernet address $mac\n", $a[0], $a[1]); printf("\tdw\t0%02X%02Xh\n", $a[2], $a[3]); printf("\tdw\t0%02X%02Xh\n", $a[4], $a[5]); }}if ($verbose) { print STDERR sprintf("$mac (%x:%x:%x:%x:%x:%x)\n",$a[0],$a[1],$a[2],$a[3],$a[4],$a[5]);}## Resolve MAC address#sub getmac { local($f) = @_; local($s); $mac = ''; if ($f =~ /^[@]/ || $f eq '-') { if ($f ne '-') { $f =~ s/^[@]//; if (!open(MAC, "<$f")) { print STDERR "Can't open MAC address file \"$f\"!\n"; return ''; } } while(1) { if ($f ne '-') { last if (!($s = <MAC>)); } else { last if (!($s = <>)); } ##print STDERR "$s"; $s =~ s/[\s\r\n]+$//; $s =~ s/\s*[#].*$//; next if ($s eq ''); if ($s =~ /^\s*([0-9]+[.][0-9]+[.][0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)$/i) { $mac = $s; } if ($s =~ /^\s*([0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+)$/i) { $mac = $s; } } } else { $mac = $f; } if ($mac eq '') { print STDERR "Can't find Ethernet address of the form ddd.ddd.ddd.ddd.ddd.ddd or hh:hh:hh:hh:hh:hh!\n"; } else { ##print STDERR "MAC/NM=$mac\n"; if ($mac =~ /^\d+[.]\d+[.]\d+[.]\d+[.]\d+[.]\d+$/) { return $mac; } elsif ($mac =~ /^\s*([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)$/i) { $mac = sprintf("%d.%d.%d.%d.%d.%d",hex($1),hex($2),hex($3),hex($4),hex($5),hex($6)); return $mac; } else { print STDERR "Ethernet address ($mac) not of the form ddd.ddd.ddd.ddd.ddd.ddd or hh:hh:hh:hh:hh:hh!\n"; } } return ('', ''); # error return}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -