获取客户端请求IP及IP所属城市

这篇具有很好参考价值的文章主要介绍了获取客户端请求IP及IP所属城市。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

添加pom依赖

      <dependency>
            <groupId>org.lionsoul</groupId>
            <artifactId>ip2region</artifactId>
            <version>2.6.5</version>
        </dependency>

public class IpUtil {
    private static Searcher searcher;
    private static final String DEFAULT_UNKNOWN="unknown";
    private static final int IP_MIN_LENGTH=0;
    static{
        try {
            ResponseEntity<byte[]> entity= buildResponseEntity("ip2region.xdb");
            searcher = Searcher.newWithBuffer(entity.getBody());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static String getIpAddress(HttpServletRequest request) {
        String ip = DEFAULT_UNKNOWN;
        try {
            ip = request.getHeader("X-Forwarded-For");
            if (ip == null || ip.length() == IP_MIN_LENGTH || DEFAULT_UNKNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == IP_MIN_LENGTH || DEFAULT_UNKNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == IP_MIN_LENGTH || DEFAULT_UNKNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (ip == null || ip.length() == IP_MIN_LENGTH || DEFAULT_UNKNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (ip == null || ip.length() == IP_MIN_LENGTH || DEFAULT_UNKNOWN.equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            // 处理多级代理情况
            if (StringUtils.isNotBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                int index = ip.indexOf(",");
                if (index > 0) {
                    return ip.substring(0, index);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return ip;
    }

    public static String getCityByIp(String ip) {
        if ("127.0.0.1".equals(ip) || ip.startsWith("192.168")) {
            return "局域网";
        }

        if (searcher == null) {
            return "...";
        }
        String region = null;
        String errorMessage = null;
        try {
            region = searcher.search(ip);
        } catch (Exception e) {
            errorMessage = e.getMessage();
            if (errorMessage != null && errorMessage.length() > 256) {
                errorMessage = errorMessage.substring(0, 256);
            }
            e.printStackTrace();
        }
        return region;
    }

    public static ResponseEntity<byte[]> buildResponseEntity(String templateName) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(templateName);
        String filename = classPathResource.getFilename();
        @Cleanup InputStream inputStream = classPathResource.getInputStream();
        byte[] bytes = FileCopyUtils.copyToByteArray(inputStream);
        // 解决中文乱码问题
        String fileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", fileName);
        return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.CREATED);
    }

    public static void main(String[] args){
        System.out.println("********/"+ getCityByIp("61.154.231.236"));
    }
}

完整代码:https://download.csdn.net/download/paj123456789/88478095文章来源地址https://www.toymoban.com/news/detail-714196.html

到了这里,关于获取客户端请求IP及IP所属城市的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【无标题】TCP,UDP,DNS以及配置网关IP地址和在ensp中,在客户端用域名或IP地址获取服务器的文件的实验

    PDU:协议数据单元 应用层:数据报文 传输层:数据段 网络层:数据包 数据链路层:数据帧 物理层:比特流(电流)   应用层的常见协议: HTTP----基于TCP协议 占据80端口号 超文本传输协议 HTTPS----基于TCP协议 占据443端口号 安全传输协议 SSH----基于TCP协议 占据22端口号 安全外

    2024年02月04日
    浏览(35)
  • k8s ingress获取客户端客户端真实IP

    在Kubernetes中,获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中,原始请求的源IP地址会被替换成负载均衡器的IP地址。 获取客户端真实IP的需求背景包括以下几点: 安全性:基于客户端IP进行访问控制和认证授权可以提高系统安全性。 日志记录与审计:记

    2024年02月13日
    浏览(36)
  • Java 获取客户端IP

      ps:代码引用于 JAVA获取客户端IP地址-CSDN博客 https://blog.csdn.net/m0_71867302/article/details/129683061?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170738691916800226562378%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257Drequest_id=170738691916800226562378biz_id=0utm_medium=distribute.pc_search_result.none-task-bl

    2024年02月22日
    浏览(31)
  • SQLServer如何获取客户端IP

    SQLServer如何获取客户端IP 很多用户询问如何通过SQLServer获取客户端IP从而定位一些问题,比如链接泄露,其实主要是利用几个相关视图,如下给出一些SQL方便用户排查 当前链接 所有链接 查看更详细的链接参数配置 ------获取

    2024年02月09日
    浏览(30)
  • 获取客户端真实IP的方法

    获取请求的IP很简单,可以直接使用request.getRemoteAddr()直接获取。但由于请求在转发到接口前,会经过大量的反向代理,例如流程图中,至少要经过Nginx后,请求才会转发到接口,因此需要对请求接口的IP做处理,提取客户端真实IP地址。 配置Nginx的配置文件,需要反向代理服务

    2024年02月16日
    浏览(38)
  • nginx-获取客户端IP地址

    上有服务器与客户端中间是有nginx代理服务器的,上游服务器如何获取客户端真实ip地址? nginx代理服务器设置X-Forwarded-For的header参数,代理服务器通过remote_addr获取客户端ip地址,将ip地址写入nginx代理服务器的X-Forwarded-For中, 上游服务端通过在nginx的这个参数拿到客户端IP地

    2024年02月11日
    浏览(36)
  • kubernetes获取客户端真实ip

    大部分的业务场景都需要获取客户端的ip来审计或采取措施,文章从nodeport暴露方式获取真实ip到ingress-nginx获取真实ip 初学者用k8s创建时暴露方式一般采用nodeport,这样方式暴露导致应用负载和访问者并不是同一段网络,当web服务获取客户端ip的时候会发现获取到的ip是k8s网关的

    2024年02月01日
    浏览(32)
  • nginx获取客户端真实ip

    在nginx中获取客户端真实IP的方法有多种,以下是其中两种常用的方法: 使用nginx的access_log模块记录请求日志,并在日志中包含客户端的真实IP信息。例如: 在上述配置中,通过使用http_x_forwarded_for字段来获取客户端的真实IP地址。如果该字段不存在或不合法,则使用remote_ad

    2024年02月16日
    浏览(38)
  • JAVA获取客户端IP地址

    2024年02月16日
    浏览(34)
  • nginx 获取客户端真实IP

    网站接入Web应用防火墙WAF(Web Application Firewall)后,访问请求在到达源站服务器之前,需要经过WAF的代理转发。这种情况下,源站服务器可以通过解析回源请求中的X-Forwarded-For记录,获取客户端的真实IP。 WAF在将客户端的访问请求转发到下一环节的服务器时,会在HTTP的请求头

    2023年04月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包