伪造客户端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添加。
伪造客户端IP实例_第1张图片
然后点击Start按钮启动插件,再次在访问WEB服务,查看控制台日志,可见IP伪造成功

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

方式二:CURL

这是通过PHP脚本实现的,代码如下
执行时遇到了以下错误
伪造客户端IP实例_第2张图片
原因是动态链接库未找到,将php.ini文件(php安装目录下)中将extension=php_curl.dll注释去掉即可,具体可以参考 这篇博客
再运行一遍
伪造客户端IP实例_第3张图片
查看控制台日志
伪造客户端IP实例_第4张图片
关于PHP cURL的具体用法可以参见 PHP官网

你可能感兴趣的:(Network)