废话不多讲,直接上代码吧!
代码如下:
404_5@PHP @H_404_5@class MacAddr @H_404_5@{ @H_404_5@ public $returnArray = array(); @H_404_5@ public $macAddr; function __contruct($os_type=null){ @H_404_5@ if(is_null($os_type)) $os_type = PHP_OS; @H_404_5@ switch (strtolower($os_type)){ @H_404_5@ case "linux": @H_404_5@ $this->forLinux(); @H_404_5@ break; @H_404_5@ case "solaris": @H_404_5@ break; @H_404_5@ case "unix": @H_404_5@ break; @H_404_5@ case "aix": @H_404_5@ break; @H_404_5@ default: @H_404_5@ $this->forWindows(); @H_404_5@ break; @H_404_5@ } @H_404_5@ $temp_array = array(); @H_404_5@ foreach($this->returnArray as $value ){ @H_404_5@ if(preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array)){ @H_404_5@ $this->macAddr = $temp_array[0]; @H_404_5@ break; @H_404_5@ } @H_404_5@ } @H_404_5@ unset($temp_array); @H_404_5@ return $this->macAddr; @H_404_5@ } function forWindows(){ @H_404_5@ @exec("ipconfig /all",$this->returnArray); @H_404_5@ if($this->returnArray) @H_404_5@ return $this->returnArray; @H_404_5@ else{ @H_404_5@ $ipconfig = $_SERVER["WINDIR"]."system32ipconfig.exe"; @H_404_5@ if (is_file($ipconfig)) @H_404_5@ @exec($ipconfig." /all",$this->returnArray); @H_404_5@ else @H_404_5@ @exec($_SERVER["WINDIR"]."systemipconfig.exe /all",$this->returnArray); @H_404_5@ return $this->returnArray; @H_404_5@ } @H_404_5@ } function forLinux(){ @H_404_5@ @exec("ifconfig -a",$this->returnArray); @H_404_5@ return $this->returnArray; @H_404_5@ } @H_404_5@} $mac = new MacAddr(PHP_OS); @H_404_5@echo $mac->macAddr; @H_404_5@echo "
"; // 获取客户端 @H_404_5@// linux @H_404_5@$command = "arp -a {$_SERVER['REMOTE_ADDR']}"; @H_404_5@echo $command; @H_404_5@echo "
"; @H_404_5@$result=`{$command}`; // windows @H_404_5@$command = "nbtstat -a {$_SERVER['REMOTE_ADDR']}"; @H_404_5@echo $command; @H_404_5@echo "
"; @H_404_5@$result=`{$command}`; @H_404_5@print_r($result); @H_404_5@?>@H_404_5@
"; // 获取客户端 @H_404_5@// linux @H_404_5@$command = "arp -a {$_SERVER['REMOTE_ADDR']}"; @H_404_5@echo $command; @H_404_5@echo "
"; @H_404_5@$result=`{$command}`; // windows @H_404_5@$command = "nbtstat -a {$_SERVER['REMOTE_ADDR']}"; @H_404_5@echo $command; @H_404_5@echo "
"; @H_404_5@$result=`{$command}`; @H_404_5@print_r($result); @H_404_5@?>@H_404_5@
获取服务端的逻辑没什么大问题,可能会存在权限问题。@H_404_5@获取客户端的时候,可能会比较慢,arp/nbstat命令执行会比较慢。
代码如下:
只适用于IE浏览器,而且会有告警提示,挺遗憾的。