php 判断来访IP地址是国内还是国外的
炒一个给你:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
function ip() {
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match ( '/[\d\]{7,15}/', $ip, $matches ) $matches [0] : '';
}
以上函数取自phpcms的获取ip方法
server启动之后,查看他的IP地址是多少,这个就不赘述了,假如看到的是19216812,在看你当时做虚拟主机的端口是多少,默认一个是80,在另外一台机器上,打开浏览器,输入http://19216812:80 就可以访问了,具体参数查看你的服务器的设置。另外一个网站的访问http://19216812:X, 80和X的端口号具体是多少,你应该清楚,或者上apache去查吧
如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。
下面提供一个函数:<php
// 定义一个函数getIP()
function getIP(){global $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";
return $ip;}
// 使用方法:
echo getIP();>
getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。
这种情况下已经确认客户端没有使用代理服务器,从而通过
else if(getenv("REMOTE_ADDR"))
这两行语句获得客户端的IP地址也是真实的IP地址。
1确认执行该PHP脚本的系统具备修改服务器IP/子网掩码/网关的权限
2确认你的PHP运行执行shell_exec的函数,这个函数在安全模式下是被屏蔽的
3确认你在shell_exec里面执行的系统命令行是正确的
简单的例子:
$ vi testphp
#!/usr/bin/php
<php
$rsl = shell_exec("fconfig eth0 19216812 netmask 2552552550"); //改ip和子网掩码的
$rsl2 = shell_exec("route add default gw 19216811"); //设置网关
echo $rsl"\n"$rsl2;//看看返回的结果
>
$ chmod 755 testphp -- 给脚本增加执行的权限
$ /testphp
参考其他函数:
exec()
system()
等等
windows下怎么做
我又没钱买windows我怎么知道!
理论上不可能获得真实的客户IP地址,只能获得最后一次路由器、或者代理服务器的IP地址。典型的情况是对方也在局域网、或者防火墙的后面,我们是不可能获得他真实的IP地址的,其实获取来也没有,一般是19216812这样的私有地址,甚至很可能所有的客户机都是这个网段。
0条评论