mac2ipv6.php 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/php
  2. <?php
  3. function _mac2ipv6($in,$prefix="fe80::") {
  4. // Wenn der Input eine MAC-Adresse ist, diese als Array in $mac speichern.
  5. if (!preg_match('/^([0-9a-fA-F]{0,2})[:.\/|-]([0-9a-fA-F]{0,2})[:.\/|-]([0-9a-fA-F]{0,2})[:.\/|-]([0-9a-fA-F]{0,2})[:.\/|-]([0-9a-fA-F]{0,2})[:.\/|-]([0-9a-fA-F]{0,2})$/',$in,$mac))
  6. if (!preg_match('/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/',$in,$mac))
  7. unset($mac);
  8. // Ggf. Rückgabe der IPv6-Adresse
  9. if (isset($mac)) {
  10. unset($mac[0]);
  11. return $prefix . preg_replace('/^:/','', preg_replace('/:$/',':0',
  12. ltrim(
  13. str_pad(dechex(hexdec($mac[1])^2), 2, "0", STR_PAD_LEFT) .
  14. str_pad($mac[2], 2, "0", STR_PAD_LEFT)
  15. , "0") .
  16. ':' .
  17. ltrim(
  18. str_pad($mac[3], 2, "0", STR_PAD_LEFT)
  19. , "0") .
  20. 'ff:fe' .
  21. str_pad($mac[4], 2, "0", STR_PAD_LEFT) .
  22. ':' .
  23. ltrim(
  24. str_pad($mac[5], 2, "0", STR_PAD_LEFT) .
  25. str_pad($mac[6], 2, "0", STR_PAD_LEFT)
  26. , "0")));
  27. }
  28. // Wenn der Input eine aus einer MAC-Adresse generierte IPv6-Adresse ist, diese als Array in $ipv6 speichern.
  29. if (!preg_match('/([0-9a-zA-Z]{1,4}):([0-9a-zA-Z]{1,4}):([0-9a-zA-Z]{1,4}):([0-9a-zA-Z]{1,4})$/',preg_replace('/::/',':0:',preg_replace('/::$/',':0',$in)),$ipv6)) unset($ipv6);
  30. // Ggf. Rückgabe der MAC-Adresse
  31. if (isset($ipv6)) {
  32. unset($ipv6[0]);
  33. foreach ($ipv6 as $i => $x) $ipv6[$i] = str_pad($x, 4, "0", STR_PAD_LEFT);
  34. return
  35. str_pad(dechex(hexdec(substr($ipv6[1],0,2))^2), 2, "0", STR_PAD_LEFT) . ':' .
  36. substr($ipv6[1],2,4) . ':' .
  37. substr($ipv6[2],0,2) . ':' .
  38. substr($ipv6[3],2,4) . ':' .
  39. substr($ipv6[4],0,2) . ':' .
  40. substr($ipv6[4],2,4);
  41. }
  42. return false;
  43. }
  44. if (isset($argv[1]) && $res = _mac2ipv6($argv[1],(isset($argv[2])?$argv[2]:"fe80::"))) echo "\nDie umgewandelte Adresse lautet:\n ".$res."\n\n";
  45. else echo "\nDiese Adresse wurde nicht erkannt.\nBitte geben Sie eine gültige MAC-Adresse oder eine aus einer MAC-Adresse generierte IPv6-Adresse ein.\n\n";
  46. ?>