【Java、Python】获取电脑当前网络IP进行位置获取(附源码)

我相信看到这篇博客的时候心里肯定是想解决自己的一个问题的,而这篇博客我就以简单快速的方式解决这些烦恼!

一、获取当前IP

在Java中自带了一些自己的流对象来获取当前的IP地址,不多说我们直接上代码。

//获取当前网络ip地址
ipAddress = InetAddress.getLocalHost().getHostAddress();

正如所见,一行代码获取你当前的IP。

  1. InetAddress.getLocalHost() - 此方法返回一个表示本地主机的InetAddress对象。本地主机是在运行Java代码的计算机上。

  2. getHostAddress() - 此方法返回本地主机的IP地址作为字符串。InetAddress类表示互联网地址,并具有getHostAddress()方法,该方法返回IP地址的字符串表示形式。

二、获取当前位置信息

我相信很多人在这个地方遇到了难处,有人去使用过国产的地图API去调用,但是流程比较复杂,而在这里我推荐一个免费、好调用的API接口IP-API.com - Geolocation APIFree IP Geolocation API - lookup any IP addressicon-default.png?t=N7T8https://ip-api.com/我在这里用简单的方法来实现一个可观数据的显示

设置好我们的API的接口

    //接口apiprivate static final String IP_API_URL = "http://ip-api.com/json/";

创建URl对象接受内容类型,把我们要查询的IP放进去

// 创建URL对象,指定IP_API_URLURL url = new URL(IP_API_URL + "?ip=" + ipAddress);// 创建HttpURLConnection对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置请求方式conn.setRequestMethod("GET");// 设置接受的内容类型conn.setRequestProperty("Accept", "application/json");// 判断是否请求成功if (conn.getResponseCode() != 200) {throw new RuntimeException("失败 : HTTP 错误码 : " + conn.getResponseCode());}

创建BufferedReader对象,用来返回我们的数据

// 创建BufferedReader对象,用于读取响应BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));String output;StringBuilder response = new StringBuilder();// 循环读取响应while ((output = br.readLine()) != null) {response.append(output);}// 断开连接conn.disconnect();// 返回响应System.out.println(response.toString());

我们把这些封装起来

    //接口apiprivate static final String IP_API_URL = "http://ip-api.com/json/";
/*** 获取IP,并且根据IP拿到位置信息** @return* @throws Exception*/public static String getGeoLocation() throws Exception {String ipAddress = "";
//            获取当前网络ip地址ipAddress = InetAddress.getLocalHost().getHostAddress();System.out.println("IP地址: " + ipAddress);// 创建URL对象,指定IP_API_URLURL url = new URL(IP_API_URL + "?ip=" + ipAddress);// 创建HttpURLConnection对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置请求方式conn.setRequestMethod("GET");// 设置接受的内容类型conn.setRequestProperty("Accept", "application/json");// 判断是否请求成功if (conn.getResponseCode() != 200) {throw new RuntimeException("失败 : HTTP 错误码 : " + conn.getResponseCode());}// 创建BufferedReader对象,用于读取响应BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));String output;StringBuilder response = new StringBuilder();// 循环读取响应while ((output = br.readLine()) != null) {response.append(output);}// 断开连接conn.disconnect();// 返回响应return response.toString();}

这样我就可以获得API接口返回的信息

  1. status: 这是状态码,显示为"success",表示查询成功。
  2. country: 国家名,显示为"China",即中国。
  3. countryCode: 国家代码,显示为"CN",这是中国的国际ISO标准代码。
  4. region: 地区名,显示为"HN",这很可能是指湖南省(Hunan Province)的缩写。
  5. regionName: 同region,也表示为"Hunan"。
  6. city: 城市名。
  7. zip: 邮编。
  8. lat: 纬度。
  9. lon: 经度。
  10. timezone: 时区,显示为"Asia/Shanghai",即东八区。
  11. isp: 互联网服务提供商,显示为"Chinanet",即中国电信。
  12. org: 组织/机构名,显示为"Chinanet HN"。
  13. as: AS号码,表示一个特定的网络运营商或机构。这里显示为"AS4134 CHINANET-BACKBONE",表示这是一个中国电信的骨干网络。
  14. query: 这可能是原始查询的IP地址或其他标识符。

三、解析JSON数据

如果你使用的是maven项目,则可以进行依赖的引入

        <dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version></dependency>

如果你不是使用的maven项目,则可以使用自己的JSON工具,或者找其他的JSON工具。

首先我们拿到JSON数据,创建JSON实例

        // 解析JSON数据JSONObject jsonObject = new JSONObject("你的json数据");

再根据键值拿到对应的数据

jsonObject.getString("键值");

四、完整代码

Java

    //接口apiprivate static final String IP_API_URL = "http://ip-api.com/json/";/*** 获取IP,并且根据IP拿到位置信息** @return* @throws Exception*/public static String getGeoLocation() throws Exception {String ipAddress = "";
//            获取当前网络ip地址ipAddress = InetAddress.getLocalHost().getHostAddress();System.out.println("IP地址: " + ipAddress);// 创建URL对象,指定IP_API_URLURL url = new URL(IP_API_URL + "?ip=" + ipAddress);// 创建HttpURLConnection对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置请求方式conn.setRequestMethod("GET");// 设置接受的内容类型conn.setRequestProperty("Accept", "application/json");// 判断是否请求成功if (conn.getResponseCode() != 200) {throw new RuntimeException("失败 : HTTP 错误码 : " + conn.getResponseCode());}// 创建BufferedReader对象,用于读取响应BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));String output;StringBuilder response = new StringBuilder();// 循环读取响应while ((output = br.readLine()) != null) {response.append(output);}// 断开连接conn.disconnect();//拿到response里面的json参数String country = response.toString();System.out.println("数据: " + country);// 解析JSON数据JSONObject jsonObject = new JSONObject(country);// 获取国家名称String countryName = jsonObject.getString("country");System.out.println("国家名称: " + countryName);// 获取省名称String provinceName = jsonObject.getString("region");System.out.println("省名称: " + provinceName);// 获取城市名称String cityName = jsonObject.getString("city");System.out.println("城市名称: " + cityName);// 获取经纬度double longitude = jsonObject.getDouble("lon");double latitude = jsonObject.getDouble("lat");System.out.println("经纬度: " + longitude + "," + latitude);// 获取IP地址String ip = jsonObject.getString("query");System.out.println("IP地址: " + ip);// 获取运营商String isp = jsonObject.getString("isp");System.out.println("运营商: " + isp);// 获取时区String timezone = jsonObject.getString("timezone");System.out.println("时区: " + timezone);// 获取省String province = jsonObject.getString("regionName");System.out.println("省: " + province);// 返回响应return response.toString();}public static void main(String[] args) {try {String response = getGeoLocation();System.out.println(response);} catch (Exception e) {e.printStackTrace();}}

python

import json
import socket
from urllib.request import urlopen, Request
from urllib.parse import urlencodeIP_API_URL = "http://ip-api.com/json/"def get_geo_location():try:ip_address = socket.gethostbyname(socket.gethostname())print("IP地址: ", ip_address)url = IP_API_URL + "?ip=" + ip_addressrequest = Request(url)request.add_header("Accept", "application/json")response = urlopen(request)data = json.loads(response.read().decode())country = data["country"]print("国家名称: ", country)province = data["regionName"]print("省名称: ", province)city = data["city"]print("城市名称: ", city)longitude = data["lon"]latitude = data["lat"]print("经纬度: ", longitude, ",", latitude)isp = data["isp"]print("运营商: ", isp)timezone = data["timezone"]print("时区: ", timezone)return dataexcept Exception as e:print("获取位置信息失败: ", e)return Noneif __name__ == "__main__":get_geo_location()

我的分享就到这里,欢迎大家在评论区讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225323.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS安装MongoDB

CentOS安装MongoDB 文章目录 CentOS安装MongoDB1. 安装并运行2. 创建用户/密码3. 测试语句4. 允许外网访问 1. 安装并运行 在 CentOS 上安装 MongoDB&#xff0c;你可以按照以下步骤进行&#xff1a; 导入 MongoDB 的 GPG 密钥&#xff1a; sudo rpm --import https://www.mon…

React快速入门之组件

组件 文件&#xff1a;Profile.js export default function Profile({isPacked true&#xff0c;head,stlyeTmp,src,size 80}) {if (isPacked) {head head " ✔";}return (<div><h1>{head}</h1><imgsrc{src}alt"Katherine Johnson&q…

MongoDB ReplicaSet 部署

文章目录 前言1. 环境准备2. 生成密钥3. 配置参数4. 创建 ReplicaSet5. 副本集维护5.1 新增成员5.2 移除节点5.4 主节点降级5.5 阻止选举5.6 允许副本节点读5.7 延迟观测 6. 连接副本集 后记 前言 本篇文章介绍 MongoDB ReplicaSet 如何搭建&#xff0c;及常用的维护方法。 1…

Redis-实践知识

转自极客时间Redis 亚风 原文视频&#xff1a;https://u.geekbang.org/lesson/535?article681062 Redis最佳实践 普通KEY Redis 的key虽然可以自定义&#xff0c;但是最好遵循下面几个实践的约定&#xff1a; 格式&#xff1a;[业务名称]:[数据名]:[id] 长度不超过44字节 不…

【Jmeter】Jmeter基础9-BeanShell介绍

3、BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。 3.1、Jmeter中使用的BeanShell 在Jmeter中&#xff0c;除了配置元件&#xff0c;其他类型的元件中都有BeanShell。BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥…

TCP并发服务器

一.进程实现TCP并发服务器 #include <func.h> #define PORT 6666 #define IP "192.168.124.42"void handler(int arm) {while(waitpid(-1,NULL,WNOHANG) > 0); } int main(int argc, const char *argv[]) {//接受17号信号signal(17, handler);i…

Matlab之State Flow

打开方式 方式一&#xff1a;在命令窗口输入State Flow或者简写sf就能打开&#xff0c;并且会自动打开State Flow 的Library。从左到右分别是图表、真值表、状态转换表、例子、顺序查看&#xff0c;可以加入到Simulink当中。 方式二&#xff1a;从Simulink Library里面添加Sta…

EB tresos 配置I2c - 实现与PF8200的读写操作

文章目录 前言一、EB工具链配置1、I2c模块1&#xff09;新建模块2&#xff09;配置General3&#xff09;配置I2cChannel 2、Port模块1&#xff09;配置SDA2&#xff09;配置SCL 二、代码分析1、申明一个I2c配置结构体数组&#xff0c;用于I2c所有读操作。2、搭建读操作函数 三、…

得物大模型平台,业务效果提升实践

一、背景 得物大模型训练与推理平台上线几个月后&#xff0c;我们与公司内部超过 10 个业务领域展开了全面的合作。在一些关键业务指标方面&#xff0c;取得了显著的成效&#xff0c;例如&#xff1a; 效率相关部门的合作&#xff0c;多维度打标总正确率取得 2 倍以上提升。利…

Spring中的上下文工具你写的可能有bug

文章目录 前言功能第一种&#xff1a;ApplicationContext第二种方式&#xff1a;ApplicationContextAware第三种&#xff1a;BeanFactoryPostProcessor 源码第一种第二种第三种 前言 本篇是针对如何写一个比较好的spring工具的一个探讨。 功能 下面三种方式&#xff0c;你觉…

智能三维数据虚拟现实电子沙盘

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;以大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑&#xff0c;支持高清卫星影像、DEM高程数据、矢量数据、无人机倾斜摄像、BIM模型、点云、城市白模、等高线、标高点等数据融合和切换&#xff0c;智能三维数…

CTF特训(一):ctfshow-RCE挑战

CTF特训(一)&#xff1a;ctfshow-RCE挑战 FLAG&#xff1a;可后来&#xff0c;除了梦以外的地方&#xff0c;我再也没有见过你 专研方向: 代码审计&#xff0c;PHP 每日emo&#xff1a;其实挺迷茫的&#xff0c;不知道该干什么,(骗你的) RCE挑战1 <?phperror_reporting(0)…

Qt Creator可视化交互界面exe快速入门3

上一期介绍的通过Qt Creator的组件直接拖拽的方式完成了一个界面&#xff0c;这期介绍按钮的信号交互。 专有名称叫信号与槽 实现方法1&#xff1a; 鼠标右键选择转化为槽就会跳出这样的界面 选择第一个为单击信号。然后就会跳转到代码界面。多了on_pushButton_clicked()。 …

2024深入评测CleanMyMac X4.14.6破解版新的功能

随着时间的推移&#xff0c;我们的Mac电脑往往会变得越来越慢&#xff0c;存储空间变得越来越紧张&#xff0c;这时候一个优秀的清理工具就显得尤为重要。作为一款备受好评的Mac清理工具&#xff0c;它能够为你的Mac带来全方位的清理和优化。在本文中&#xff0c;我们将深入评测…

ADRC-跟踪微分器TD的Maltab实现及参数整定

目录 问题描述&#xff1a; 跟踪微分器TD基本概念&#xff1a; Matlab及其实现&#xff1a; 跟踪效果&#xff1a; 例1&#xff1a;跟踪信号 sin(t) 0.5*rand(1,1)。 例2&#xff1a;跟踪部分时段为方波的信号&#xff0c;具体形式见代码get_command。 参数整定&#xf…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

【WSL2】安装和配置ubuntu

文章目录 1. 安装WSL22. 安装ubuntu2.1. 通过Microsoft Store2.1. 通过命令行 3. ubuntu的使用3.1. 创建管理员root账户3.2. 换源3.3. 安装图形化界面 1. 安装WSL2 在控制面板 - 程序 - 程序与功能中点击启用或关闭Windows功能&#xff0c;选择 虚拟机平台适用于Linux的Window…

Android Studio 如何隐藏默认标题栏

目录 前言 一、修改清单文件 二、修改代码 三、更多资源 前言 在 Android 应用中&#xff0c;通常会有一个默认的标题栏&#xff0c;用于显示应用的名称和一些操作按钮。但是&#xff0c;在某些情况下&#xff0c;我们可能需要隐藏默认的标题栏&#xff0c;例如自定义标题栏…

File Inclusion(Pikachu)

File Inclusion(local) 这里随便点击一个提交 观察url&#xff0c;显示是一个文件file1.php 可以直接通过url修改这个文件 找到自己的文件&#xff08;本地文件&#xff09;shell.php的路径写上去 就可以看到 File Inclusion&#xff08;remote&#xff09; 提交的是一个目标…

桶装水送水小程序:提升服务质量的利器

随着移动互联网的发展&#xff0c;越来越多的消费者通过手机在线购物和订购商品。如果你是一名桶装水供应商&#xff0c;想要拓展线上业务&#xff0c;那么开发一个桶装水微信小程序将是一个明智的选择。本文将指导你从零开始开发一个桶装水微信小程序&#xff0c;让你轻松完成…