获取IP的方法有几种,通过例子看一下,这个是ThinkPHP里的获取IP的函数:
/**
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @param boolean $adv 是否进行高级模式获取(有可能被伪装)
* @return mixed
*/
function get_client_ip($type = 0,$adv=false) {
$type = $type ? 1 : 0
static $ip = NULL
if ($ip !== NULL) return $ip[$type]
if($adv){
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr= explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])
$pos= array_search('unknown',$arr)
if(false !== $pos) unset($arr[$pos])
$ip = trim($arr[0])
}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP']
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR']
}
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR']
}
// IP地址合法验证
$long = sprintf("%u",ip2long($ip))
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0)
return $ip[$type]
}
$_SERVER['HTTP_CLIENT_IP'] 是HTTP信息中的IP,存在于http请求的header中,可以伪造
$_SERVER["REMOTE_ADDR"] 可取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。不可以伪造,但可以用代理。
$_SERVER["HTTP_X_FORWARDED_FOR"] 可以透过代理服务器取得客户端的真实 IP 地址,但有时候也不管用,也可以伪造。
伪造IP是不可能的,HTTP协议是机遇TCP,你发送GET命令过去必须留有准确的IP地址,否则对方无法把结果发给你,你与服务器xxx.xxx.xx的通讯相当于写信,你匿名写信只能攻击,要获取返回的东西必须提交真实的地址。无论使用CURL还是别的方法,都要受前面的基本规则限制。
编程上已经没有办法可走了,你可以考虑使用代理,通过代理服务器去获取数据,查封就换个代理服务器。不过现在代理服务器是很难找的。
1.确认执行该PHP脚本的系统具备修改服务器IP/子网掩码/网关的权限.2.确认你的PHP运行执行shell_exec的函数,这个函数在安全模式下是被屏蔽的.
3.确认你在shell_exec里面执行的系统命令行是正确的.
简单的例子:
$
vi
test.php
#!/usr/bin/php
<?php
$rsl
=
shell_exec("fconfig
eth0
192.168.1.2
netmask
255.255.255.0")
//改ip和子网掩码的.
$rsl2
=
shell_exec("route
add
default
gw
192.168.1.1")
//设置网关
echo
$rsl."\n".$rsl2//看看返回的结果.
?>
$
chmod
755
test.php
--
给脚本增加执行的权限
$
./test.php
参考其他函数:
exec()
system()
等等.
windows下怎么做?
我又没钱买windows我怎么知道!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)