家里的IP已经通过群晖DDNS绑定了域名,通过域名获取IP,然后限制IP访问。
- //特定IP访问
- if (getenv("HTTP_CLIENT_IP")){
- $ip = getenv("HTTP_CLIENT_IP");
- } else if (getenv("HTTP_X_FORWARDED_FOR")){
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- } else if (getenv("REMOTE_ADDR")){
- $ip = getenv("REMOTE_ADDR");
- } else {
- $ip = "unknow";
- }
-
- //允许访问的ip
- $ddnsip = gethostbyname("ddns.abc.com");//获取动态IP
- $allowIP = array($ddnsip); //多个IP用,隔开 array(‘192.168.2.*’,’127.0.0.1′,’192.168.2.49′);
-
- //ip拆分成数组
- $check_ip_arr = explode(‘.’, $ip);
- if (!in_array($ip, $allowIP)) {
- $bl = false;
- foreach ($allowIP as $val) {
- if (strpos($val, ‘*’) !== false) {
- //有*号替代符
- $arr = array();
- $arr = explode(‘.’, $val);
- $bl = true;
- //用于记录循环检测中是否有匹配成功的
- for ($i = 0; $i < 4; $i++) {
- if ($arr[$i] != ‘*’) {
- //不等于* 就要进来检测,如果为*符号替代符就不检查
- if ($arr[$i] != $check_ip_arr[$i]) {
- $bl = false;
- break;
- //终止检查本个ip 继续检查下一个ip
- }
- }
- }
- if ($bl) {
- //如果是true则终止匹配
- break;
- }
- }
- }
-
- if (!$bl) {
- echo ‘您的IP地址为:’ .$ip.’。<br/>对不起,您所在的网络环境无法访问此站点。<br/>如有任何疑问请联系管理员。’;
- exit();
- }
- }
复制代码
|