PHP > Tip&Tech > [php] 맥주소(mac address) 추출 및 검증 소스
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
그누보드
Tip&Tech
  HOME > PHP > Tip&Tech
 
작성일 : 17-07-26 17:29
[php] 맥주소(mac address) 추출 및 검증 소스
 글쓴이 : 덩벙이 (211.♡.155.10)
조회 : 195   추천 : 0   비추천 : 0  

윈도우, 리눅스에서 사용가능한 맥주소 추출 및 검증하는 소스입니다. 상수 USERLOG_DIRNAME 는 맥주소가 저장되는 폴더이름을 작성하는데, 윈도우나 리눅스에서 shell_exec 를 사용할 수 없을 때 서버에 맥주소를 저장하기 위한 폴더입니다.


이 소스가 위치하는 곳에 logs 폴더를 만들고, 퍼미션 권한을 707 또는 747, 777 중 하나로 변경해서 사용하면 됩니다. 만약 다른 폴더에 저장하고자 한다면 상대경로나 절대경로를 허용하므로 ../logs 또는 /home/www/logs 로 하면 됩니다. 파일에 저장되는 정보는 "ip주소 맥주소" 입니다.


맥주소를 저장하기 위해서는 다음과 같이 세션에 저장합니다.


 $mac = new macAddress(time);
 $_SESSION['macaddr'] = $mac->put_Macaddr();

맥주소로 검증을 하기 위해서는 다음의 코드를 사용합니다.


 $mac = new macAddress(time);

 if(!$mac->get_Macaddr($_SESSION['macaddr']))
 {
    exit('검증된 사용자가 아닙니다.');
 }


time 의 기본값은 30 이며 맥주소 유지시간 분으로 적용합니다.


<?php   
/* 맥 주소 저장 경로 */   
if(!defined("USERLOG_DIRNAME")) {   
  
define("USERLOG_DIRNAME""logs");   
}   
/* Uniqid Key */   
if(!defined("USERLOG_UNIQID_KEY")) {   
  
define("USERLOG_UNIQID_KEY""SHIFTKEY");   
}   

/*   
* Mac Address Class   
*   
* define("USERLOG_DIRNAME", 로그파일 저장경로);   
* $mac = new macAddress(time);   
* time => 맥주소 유지시간, 30 => 30분   
* Mac Address 검증   
* $mac->get_Macaddr(macAddress);   
* Mac Address 저장   
* $mac->put_Macaddr();   
*   
* ex) Mac Address 저장   
* $_SESSION['macaddr'] = $mac->put_Macaddr();   
*   
* ex) Mac Address 검증   
* if(!$mac->get_Macaddr($_SESSION['macaddr'])){   
*   exit('검증된 사용자가 아닙니다.');   
* }   
*   
*/   
class macAddress{   
  var 
$ip;   
  var 
$macAddr;   
  var 
$floating;   
  var 
$dirname;   
  var 
$current;   
  var 
$timer;   

  function 
macAddress($valid_time=30){   
    if(!
is_numeric($valid_time) || ($valid_time 30)){   
      
$valid_time 30;   
    }   
    
$this->timer $valid_time 60;   
    
$this->current time();   


    
$this->dirname USERLOG_DIRNAME '/clientAddress.txt';   
    
$this->macAddr md5(USERLOG_UNIQID_KEY $this->realityMac());   
  }   

  function 
get_Macaddr($usemac){   
    if(!
is_set($usemac)){   
      return 
false;   
    }   

    if(
$this->floating){   
      if(
$this->macAddr === $usemac){   
        return 
true;   
      }   
      return 
false;   
    }else{   
      if(
$this->Mac_LogFile($usemac)){   
        return 
true;   
      }   
      return 
false;   
    }   
  }   

  function 
put_Macaddr(){   
    if(!
$this->floating){   
      
$data false;   
      
$fput $this->current $this->timer ' ' $this->ip ' ' $this->macAddr "\n";   
      if(
$this->is_file($this->dirname)){   
        
$data file_get_contents($this->dirname);   
      }   
      
file_put_contents($this->dirname$data $fput);   

      return 
$this->macAddr;   
    }   
    return 
false;   
  }   

  function 
checkMac($interface, &$matches){   
    if(!
is_set($interface)){   
      return 
false;   
    }   

    if(
preg_match("/(([a-f0-9]{2}[-|:]?){6})/i"$interface$matches)){   
      return 
true;   
    }   
    return 
false;   
  }   

  function 
realityMac(){   
    
$this->ip preg_replace("/[^0-9a-f.:]/i"""$this->getreal_ipaddr());   
    if(!
$this->ip){   
      
$this->ip '127.0.0.1';   
    }   

    if(
substr(PHP_OS01) == 'W'){   
      
$interface 'arp -a';   
    }else{   
      
$interface 'arp -a | grep ' $this->ip;   
    }   

    if(
$this->checkMac(shell_exec($interface), $matches)){   
      
$this->floating true;   
      return 
str_replace(":""-"$matches[0]);   
    }   

    
$this->floating false;   
    return 
$this->imagineMac();   
  }   

  function 
imagineMac(){   
    
$i 0;   
    
$macAddr = array();   
    
$imagine = array("0""1""2""3""4""5""6""7""8",
                     
"9""A""B""C""D""E""F");   

    while(
$i 6){   
      
$i++;   

      
shuffle($imagine);   
      
$macAddr[] = $imagine[0] . $imagine[1];   
    }   
    return 
implode(""$macAddr);   
  }   

  function 
Mac_LogFile($usemac){   
    if(!
$this->checkMac($usemac$matches)){   
      
$usemac $this->imagineMac();   
    }   

    if(
$this->is_file($this->dirname)){   
      
$raw = array();   
      
$certificationMac false;   
      foreach(
explode("\n"file_get_contents($this->dirname)) as $nlist){   
        if(!empty(
$nlist)){   
          list(
$get_date$get_Address) = explode(" "$nlist2


 
 

Total 2,770
번호 제   목 글쓴이 날짜 추천 비추천 조회
2770 PHP로 구현한 SEED128 + CBC + PKCS5 암호화 덩벙이 08-08 0 0 22
2769 세션 타임아웃 구현 덩벙이 06-22 0 0 23
2768 CURL 사용법 덩벙이 03-16 0 0 104
2767 이미지 파일에 문자 병합 (응용 도장이미지 만들기) 덩벙이 08-11 0 0 172
2766    이미지 파일에 문자 병합 (응용 도장이미지 만들기)2 덩벙이 08-11 0 0 173
2765 php GD 이미지 합치기와 텍스트 합치기 덩벙이 08-11 0 0 160
2764 xml 데이터 submit 하기 덩벙이 08-11 0 0 158
2763 php 세션 만료 (2) 덩벙이 08-09 0 0 172
2762 php 세션 (1) 덩벙이 08-09 0 0 194
2761 PHP 문자가 한글인지 확인 is hangul char() 덩벙이 07-28 0 0 169
2760    UTF-8 한글 덩벙이 07-28 0 0 164
2759    has_hangul() 한글을 포함하고 있는지 판별하는 함수 덩벙이 07-28 0 0 169
2758    PHP함수 chr, ord의 UTF-8 확장 커스텀 함수 utf8_chr() utf8_or… 덩벙이 07-28 0 0 165
2757 PHP 파일 다운로드 구현 (1) 덩벙이 07-28 0 0 182
2756    PHP 파일 다운로드 구현 2 (한글 파일명 지원) (2) 덩벙이 07-28 0 0 154
2755    •파일을 출력하는 PHP 함수 PHP readfile() 덩벙이 07-28 0 0 154
2754 Seed_crypto.php 덩벙이 07-26 0 0 153
2753 [php] 맥주소(mac address) 추출 및 검증 소스 덩벙이 07-26 0 0 196
2752 [php] 간단한 포트 스캐너 만들기 덩벙이 07-26 0 0 168
2751 [php] 소켓을 이용한 POST Request 덩벙이 07-26 0 0 235
 1  2  3  4  5  6  7  8  9  10    
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.