获取访问接口的IP地址(绝对好用)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取访问接口的IP地址(绝对好用)相关的知识,希望对你有一定的参考价值。

在做自动过滤的时候我们经常会将并发访问量非常高的IP进行拉入黑名单,也就是拒绝访问处理,但是我们依然需要收集这些IP地址,那么我们今天就要用到这款代码了,这里是Java的版本我们先来看看,然后进行具体的测试体验:

package com.item.common;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class IpUtil
public static String getIpAddr(HttpServletRequest request)
String ipAddress = null;
try
ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress))
ipAddress = request.getHeader("Proxy-Client-IP");

if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress))
ipAddress = request.getHeader("WL-Proxy-Client-IP");

if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress))
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1"))
// 根据网卡取本机配置的IP
InetAddress inet = null;
try
inet = InetAddress.getLocalHost();
catch (UnknownHostException e)
e.printStackTrace();

ipAddress = inet.getHostAddress();


//这里IP地址的总长肯定是大于15的
if (ipAddress != null && ipAddress.length() > 15)
if (ipAddress.indexOf(",") > 0)
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));


catch (Exception e)
ipAddress = "";

return ipAddress;

调用的时候也是很简单的,不需要单独的传递参数:直接写入到参数中,即可使用,这里我放到了一个map中,一会咱们进行访问测试的时候就能看到了。

获取访问接口的IP地址(绝对好用)_IP

访问测试1:

这里我采用的是:【​​http://127.0.0.1:8080/GetInfo​​】访问方式,获取的地址是本地的IP地址。

工具使用的是Eolink,很方便的一款API工具,最近一直在用功能很多,在这里做个推荐。

获取访问接口的IP地址(绝对好用)_.net_02

实际返回内容:

获取访问接口的IP地址(绝对好用)_IP_03

访问方式2:

我们换一种访问方式,使用localhost来测试一下:

可以在地址上看到,我使用的是【​​http://localhost:8080/GetInfo​​】来访问的,但是返回的结果是【

0:0:0:0:0:0:0:1

那么0:0:0:0:0:0:0:1这个代表什么呢?

0:0:0:0:0:0:0:1是属于ipv6,但是本机又没有设置ipv6,后来我又进行另一台电脑做测试,发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现),原来是hosts配置文件的问题 windows的hosts文件路径:C:\\Windows\\System32\\drivers\\etc\\hosts linux的host路径:/etc/hosts

获取访问接口的IP地址(绝对好用)_.net_04

这种方式是无法识别地址的,那么我们就会使用:

注释掉文件中的 # ::1 localhost 这一行即可解决问题。不过不起作用。 最有效的方式就是改变请求的ip,不要使用localhost:8080 使用127.0.0.1:8080或者ip:8080。

我们根据获取到相同IP的时间差进行判断是否是机器人,如果是机器人,那么我们可以直接禁用到这个IP地址。

屏蔽IP的方法:

一般我们都会使用nginx来处理封禁IP的任务,在 vhosts 目录下面,建一个屏蔽IP的文件,命名为banned_ip.conf,以后新增加屏蔽IP只需编辑这个文件即可。

加入以下内容即可:

deny 122.227.225.221;



以上是关于获取访问接口的IP地址(绝对好用)的主要内容,如果未能解决你的问题,请参考以下文章

教你自己搭建一个IP池(绝对超好用!!!!)

非常好用的节假日查询接口

java 怎么写一个接口 让他返回服务器的动态IP地址和端口?

获取ip地址,

Linux分析日志获取最多访问的前10个IP

微信公众号平台接口开发:基础支持,获取微信服务器IP地址