1.导入第三方类库:

<?php
/**
* FILE_NAME : Macaddr.php
* linux平台获取服务器mac地址
* @filesource
*/
class Macaddr { private static $return_array = array(); //返回带有MAC地址的字串数组
private static $mac_addr; //MAC 地址 public function __construct() {
echo 1;
} /**
* 获取当前机器的MAC地址
*/
public static function getMac() {
$os_type = PHP_OS;
switch ( strtolower($os_type) ) {
case "linux":
self::forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
self::forWindows();
break;
} $temp_array = array();
foreach (self::$return_array as $row) {
foreach ($row as $value) {
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) ) {
self::$mac_addr = $temp_array[0];
break;
}
}
if (!empty(self::$mac_addr)) {
break;
}
}
unset($temp_array); return self::$mac_addr;
} private static function forWindows(){
@exec("ipconfig /all", $macInfo);
if ( $macInfo ) {
self::$return_array[] = $macInfo;
} else {
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) ) {
@exec($ipconfig." /all", $macInfo);
}else {
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $macInfo);
} self::$return_array[] = $macInfo;
}
return self::$return_array;
} private static function forLinux(){
@exec("/sbin/ifconfig", $macInfo);
if ( $macInfo ) {
self::$return_array[] = $macInfo;
} else {
$file_arr = array('ifcfg-eth0', 'ifcfg-eth1', 'ifcfg-eth2', 'ifcfg-eth3', 'ifcfg-em1', 'ifcfg-em2', 'ifcfg-em3', 'ifcfg-em4');
foreach ($file_arr as $file) {
if (file_exists('/etc/sysconfig/network-scripts/'.$file)) {
self::$return_array[] = file('/etc/sysconfig/network-scripts/'.$file);
}
}
} return self::$return_array;
}
} /* End of file config.php */
/* Location: ./system/application/config/config.php */
?>

2.CI中使用示例:

<?php

class A extends CI_Controller {
public function checkMac()
{
  $this->load->library('Macaddr');//导入类库
  $currentMac = Macaddr::getMac();
  $macList = array();//在配置文件中写死

  if( !empty($currentMac) && !in_array($currentMac, $macList) ) {
    exit();
  }

}

}

mac地址绑定的更多相关文章

  1. Mac地址绑定的wifi

    可以仿冒mac地址连接到wifi. 1.首先使用cdlinux扫描ssid,抓握手包--当捕获某个连接该wifi的client的时候,记下该client的mac地址. 2.用eswa解码抓包文件,获取 ...

  2. inux网卡与MAC地址绑定方法总结

        使用linux系统时会出现这样的情况,当你安装了某个网卡的驱动程序时,或者安装了与网卡相关的程序后. 网卡会出现所谓的漂移现象.(注意:不是飘逸).可能的表象为: (1):网卡顺序颠倒,比如之 ...

  3. 修改MAC地址的方法 破解MAC地址绑定(抄)

    修改MAC地址的方法 破解MAC地址绑定   网卡的MAC地址是固化在网上EPROM中的物理地址,是一块网卡的“身份证”,通常为48位.在平常的应用中,有很多方面与MAC地址相关,如有些软件是和MAC ...

  4. 纠结好久的VM虚拟机MAC地址绑定问题

    VM虚拟机(centos)采用桥接的方式访问网络,搭建一个Online Judger 的 web服务端.本想让虚拟机的ip能够固定下来,因此在路由上采用MAC和IP绑定的方式解决. 结果:每次重启虚拟 ...

  5. 交换机端口与Mac地址绑定(基于Cisco模拟器)

    实验设备: 二层交换机一台,主机三台 实验步骤: 1.进入相应的接口 (以端口1设置Mac地址绑定,PC0接1端口举例) Switch>enable Switch#config Configur ...

  6. IP地址和MAC地址绑定的必要性

    计算机网络是一个共通的网络,世界上任何计算机都可以互相访问. 实现的原理基于网络通讯的互联网交互五层模型. 计算机网络的历史发展 当计算机网络技术初始利用的时代,几台计算机通过集线器连接,就可以实现网 ...

  7. IP地址与Mac地址绑定错误

    有个application,有时候可以正常访问,有时候又返回404错误,百思不得其解.刚开始以为是文件夹权限问题,折腾了好久. 后来没在服务器上monitor到包,所以猜想是到了错误的mac地址,用a ...

  8. 018 cisco 3560 MAC地址绑定

    在3560交换机上show ip dhcp binding 可以看到通过DHCP服务广播出去的IP地址与MAC地址的对应表: 比如: Switch#show ip dhcp binding IP ad ...

  9. ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者

    [故障原理]  要了解故障原理,我们先来了解一下ARP协议.  在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的.ARP协议对网络安全具有重要的意义.通过伪造IP地址和M ...

随机推荐

  1. Android学Jni/Ndk 开发记录(一)

      治疗拖延症的唯一办法就是:一想起些什么 / 要做些什么就 TM 立马去做! 是的,突然想起我不会 JNI.NDK 开发.解决办法:立马去学! 一:配置 NDK 环境 下载 NDK 写入到配置文件 ...

  2. 理解 VMWare的3种网络模型 z

    在说到VMware的网络模型之前,先说一下VMware的几个虚拟设备: ■ VMnet0:这是VMware用于虚拟桥接网络下的虚拟交换机: ■ VMnet1:这是VMware用于虚拟Host-Only ...

  3. 最新IP地址数据库Dat格式-高性能高并发版(2019年3月)

    最新IP地址数据库->Dat  二进制文件 高性能高并发-qqzeng-ip.dat 格式 全球IP数据库-20190301-Dat 版                国内IP数据库-20190 ...

  4. 介绍下Shell中的${}、##和%%使用范例

    假设定义了一个变量为:代码如下:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/d ...

  5. Linq 数据排序,分页

    在用Linq查询中,常常需要用到分页功能,因为每次都需要些分页这些功能,于是把分页功能提取出来,不喜大家勿喷,只是贴出来,自觉地很实用.一下贴出核心代码: /// <summary> // ...

  6. 微信小程序 - 文字换行问题

    css word-break: break-all;

  7. redux VS mobx (装饰器配合使用)

    前言:redux和mobx都是状态管理器,避免父级到子级再到子子级嵌套单向数据流,可以逻辑清晰的管理更新共享数据.(刷新页面redux储蓄数据即消失) 配置使用装饰器(使用高阶函数包装你的组件): n ...

  8. matplotlib画图实例:pyplot、pylab模块及作图參数

    http://blog.csdn.net/pipisorry/article/details/40005163 Matplotlib.pyplot画图实例 {使用pyplot模块} matplotli ...

  9. 改变UITextField的Placeholder颜色

    通过 attributedPlaceholder 属性来改变 if([textField respondsToSelector:@selector(setAttributedPlaceholder:) ...

  10. CALayer的contentsRect

    contentsRect 想像下contentsRect作为层内容的可视区域.内容的矩形区域(x,y,width,height)也是绑定到层的框架上的.contentRect是一个比例值,而不是屏幕上 ...