伪造客户端IP实例

搭建WEB服务 

创建一个web工程,编写一个简单的servlet获取客户端ip
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String clientIp = null;
		clientIp = request.getHeader("X-Forwarded-For");
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)){
			clientIp = request.getHeader("Proxy-Client-IP");
		}
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)){
			clientIp = request.getHeader("WL-Proxy-Client-IP");
		}
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)){
			clientIp = request.getHeader("HTTP_CLIENT_IP");
		}
		if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)){
			clientIp = request.getRemoteAddr();
	        if (clientIp.equals("127.0.0.1")) {    
	          InetAddress inet = null;
	          try {
	            inet = InetAddress.getLocalHost();
	          } catch (UnknownHostException e) {
	            e.printStackTrace();
	          }
	          clientIp = inet.getHostAddress();
	        }
		}
            //如果有多层代理,第一个ip为真实客户端ip
	    if (clientIp != null && clientIp.length() > 15) {
	      if (clientIp.indexOf(",") > 0) {
	    	  clientIp = clientIp.substring(0, clientIp.indexOf(","));
	      }
	    }
        logger.info("clientIp = "+clientIp);
	}
关于请求头中X-FORWARDED-FOR、Proxy-Client-IP、WL-Proxy-Client-IP、HTTP_CLIENT_IP信息的含义 这篇博客写的很详细。
先来测试下这段代码,浏览器请求http://localhost:8080/IPTest/GetIP,看下log4j控制台打印的日志信息

获取到的是本机真实的IP

伪造IP

方式一:浏览器插件

以火狐为例,添加一个附加组件Modify Headers,使用它可以更改请求头,达成伪造IP的目的

修改方法很简单,选择Header->Select action->Modify,在Header  name输入框输入X-Forwarded-For,Header value输入框输入要伪造的IP,比如212.66.66.123,完了点击Add添加。

然后点击Start按钮启动插件,再次在访问WEB服务,查看控制台日志,可见IP伪造成功

修改请求头的插件有很多,比如Google浏览器的ModHeader等等。很多网站通过User-Agent头信息来判断用户是通过web还是wap请求来做版本适配的,这些插件的另一种经常用途就是通过修改User-Agent头信息,方便开发人员在PC上做版本适配的开发。

方式二:CURL

这是通过PHP脚本实现的,代码如下
<?php


function fakeIP(){
    $url = "http://localhost:8080/IPTest/GetIP";
    $ip = "100.100.".rand(0,255).".".rand(0,255);//随机生成IP
    echo $ip;
    $headers = array("X-FORWARDED-FOR:$ip");
    $curl = curl_init($url);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$headers);//伪造IP
    //curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_USERAGENT,  "Mozilla/5.0");
    $src = curl_exec($curl);
    curl_close($curl);
}

fakeIP();
?>
执行时遇到了以下错误
原因是动态链接库未找到,将php.ini文件(php安装目录下)中将extension=php_curl.dll注释去掉即可,具体可以参考 这篇博客
再运行一遍
查看控制台日志
关于PHP cURL的具体用法可以参见 PHP官网

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值