MAC address

From Noah.org
Revision as of 19:34, 15 November 2012 by Root (talk | contribs) (→‎locally administered address)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search


MAC address

Organizationally Unique Identifier, or OUI

The first three bytes of a MAC address are the Organizationally Unique Identifier, or OUI. These addresses are assigned by the IEEE Registration Authority. You pay about $2000 for a reserved block.

locally administered address

A locally administered MAC address is similar to a LAN IP address (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16). You can make up your own locally administered address and can be sure that it will not collide with any hardware on your network that use a factory burned-in MAC address. Locally administered addresses are useful when creating virtual machines or virtual network interfaces.

The second bit of the first byte of a MAC address determines the type of OUI. If the bit is 0 then it is an OUI globally assigned by the IEEE; if the bit is 1 then it is a locally administered MAC address.

Create a OUI by whatever scheme you like, then logically OR it with 02:00:00:00:00:00, and then logically AND it with fe:ff:ff:ff:ff:ff, and you will have a locally administered address. The first OR pattern sets bit 2 of the first byte; the second AND pattern clears bit 1 of the first byte (unicast, not multicast).

The following MAC address pattern satisfies the OUI requirements:

4e:4f:41:48:00:00

change MAC address

The following sets eth0 interface to use a locally administered address:

ifconfig eth0 hw ether 02:00:00:00:00:01

or using iproute2 commands you would use the following:

ip link set dev eth0 address 02:00:00:00:00:01

Arduino MAC and IP address hog

This is a DHCP tester made for use with an Arduino and Ethernet Shield.

/*
  MAC and IP address hog
  
  This sketch repeatedly requests MAC addresses from DHCP.
  A new MAC address is given for each request.
  Circuit:
  * Ethernet shield attached to pins 10, 11, 12, 13
 
  created 2012-07-25
  by Noah Spurrier
 */

#include <SPI.h>
#include <Ethernet.h>


// MAC address template.
// Note that this is a "locally administered MAC address".
// Note that the following is true: "0x4e|0x02 == 0x4e"
byte mac[] = { 0x4e, 0x4f, 0x41, 0x48, 0x0, 0x0 };

void setup() {
  // Open serial port.
  Serial.begin(9600);
  // Wait for serial port to connect. Needed for Leonardo only.
  while (!Serial) ;

  delay (1000); 
  Serial.println();
  Serial.println("Begin hogging MAC:IP address leases on DHCP.");
  for (mac[4] = 0; mac[4] <= 254; mac[4]++){
    for (mac[5] = 0; mac[5] <= 254; mac[5]++){ 
      Serial.print("MAC: ");
      for (byte thisByte = 0; thisByte < 6; thisByte++) {
        // print the value of each byte of the MAC address:
        Serial.print(mac[thisByte], HEX);
        if (thisByte < 5) Serial.print(":");
      }
      Serial.print(", ");
      Serial.print("IP: ");
      // start new Ethernet connection. See http://arduino.cc/it/Reference/Ethernet
      if (Ethernet.begin(mac) == 0) {
        Serial.print("ERROR: Failed to get IP address from DHCP.");
        delay(1000);
      }
      else {
        for (byte thisByte = 0; thisByte < 4; thisByte++) {
          // print the value of each byte of the IP address:
          Serial.print(Ethernet.localIP()[thisByte], DEC);
          if (thisByte < 3) Serial.print("."); 
        }
      }
      Serial.println();
      delay(3000);
    }
  }
}

void loop() {

}