public class MACAddress { private static final int MAC_LEN = 6; private byte[] data; public MACAddress(String addr) { this(parseMAC(addr)); } public MACAddress(byte[] addr) { if (addr.length != MAC_LEN) throw new IllegalArgumentException( "MAC address has wrong number of bytes: " + addr.length); this.data = new byte[MAC_LEN]; System.arraycopy(addr, 0, data, 0, MAC_LEN); } public byte[] getAddress() { byte[] ret = new byte[MAC_LEN]; System.arraycopy(data, 0, ret, 0, MAC_LEN); return ret; } /** * Parses a MAC address on the format 'XX:XX:XX:XX:XX:XX'. */ private static byte[] parseMAC(String mac) { String[] bytes = mac.split(":"); if (bytes.length != MAC_LEN) throw new IllegalArgumentException("Bad MAC address: '" + mac + "'"); byte[] data = new byte[MAC_LEN]; for (int i = 0; i < bytes.length; i++) { int b = Integer.parseInt(bytes[i], 16); if (b < 0 || b > 255) throw new IllegalArgumentException("Bad MAC address: '" + mac + "'"); data[i] = (byte)b; } return data; } private static StringBuffer appendHexByte(StringBuffer sb, byte b) { sb.append(Character.forDigit((b >> 4) & 0x0f, 16)); sb.append(Character.forDigit(b & 0x0f, 16)); return sb; } public String toString() { StringBuffer sb = new StringBuffer(); for (int i = 0; i < MAC_LEN; i++) { appendHexByte(sb, data[i]); if (i < MAC_LEN-1) sb.append(':'); } return sb.toString(); } }