--- /dev/null
+--- libpcap-0.4a6.orig/nametoaddr.c
++++ libpcap-0.4a6/nametoaddr.c
+@@ -283,7 +283,7 @@
+ e = ep = (u_char *)malloc(6);
+
+ while (*s) {
+- if (*s == ':')
++ if (*s == ':' || *s == '.')
+ s += 1;
+ d = xdtoi(*s++);
+ if (isxdigit(*s)) {
+--- libpcap-0.4a6.orig/scanner.l
++++ libpcap-0.4a6/scanner.l
+@@ -76,6 +76,7 @@
+
+ N ([0-9]+|(0X|0x)[0-9A-Fa-f]+)
+ B ([0-9A-Fa-f][0-9A-Fa-f]?)
++X [0-9A-Fa-f]
+
+ %a 3000
+
+@@ -134,12 +135,16 @@
+ {N} { yylval.i = stoi((char *)yytext); return NUM; }
+ ({N}\.{N})|({N}\.{N}\.{N})|({N}\.{N}\.{N}\.{N}) {
+ yylval.s = sdup((char *)yytext); return HID; }
+-{B}:{B}:{B}:{B}:{B}:{B} { yylval.e = pcap_ether_aton((char *)yytext);
++({B}:{B}:{B}:{B}:{B}:{B})|({B}\.{B}\.{B}\.{B}\.{B}\.{B}) {
++ yylval.e = pcap_ether_aton((char *)yytext);
+ return EID; }
+ {B}:+({B}:+)+ { bpf_error("bogus ethernet address %s", yytext); }
++{X}{12} { yylval.e = pcap_ether_aton((char *)yytext);
++ return EID; }
+ [A-Za-z0-9][-_.A-Za-z0-9]*[.A-Za-z0-9] {
+ yylval.s = sdup((char *)yytext); return ID; }
+ "\\"[^ !()\n\t]+ { yylval.s = sdup((char *)yytext + 1); return ID; }
++
+ [^ \[\]\t\n\-_.A-Za-z0-9!<>()&|=]+i {
+ bpf_error("illegal token: %s\n", yytext); }
+ . { bpf_error("illegal char '%c'", *yytext); }