整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

怎么获取IP地址(本地IP、外网IP)

怎么获取IP地址(本地IP、外网IP)

于一些需要,我们需要获取本地IP地址,可以采用多种方式来得到我们想要的。

一、本地IP地址获取

在Windows上:

方法一:使用命令行

  1. 打开命令提示符(CMD)。

  1. 输入ipconfig并按回车键。

  1. 在输出中查找“IPv4 地址”一节,即可找到本地IP地址。

方法二:使用 PowerShell

  1. 打开 PowerShell。

  1. 输入Get-NetIPAddress -AddressFamily IPv4并按回车键。

  1. 查找“IPAddress”列,即可找到本地IP地址。

在macOS和Linux上:

方法一:使用终端

  1. 打开终端。
  2. 输入ifconfig并按回车键。
  3. 查找“inet”或“inet 地址”一节,即可找到本地IP地址。

方法二:使用命令行工具(例如ip命令)

  1. 打开终端。
  2. 在终端中输入ip addr showip a并按回车键。
  3. 查找“inet”一节,即可找到本地IP地址。

以上操作和Windows类似,不详细附图


二、外网IP地址获取

方法一:使用网站

  1. 打开浏览器,访问类似于https://www.ip.cn/或https://www.whatismyip.com/的网站,这些网站会显示您的外网IP地址。

这方法会比较简单粗暴,直接得到想要的,而不用去操作一些繁琐的步骤。

方法二:使用API

  1. 许多网站提供了获取外网IP地址的API。您可以使用Python、JavaScript等编程语言通过发送HTTP请求来获取。
  2. 例如,可以使用以下Python代码:


import requests

response=requests.get('https://api.ipify.org?format=json')
ip_data=response.json()
external_ip=ip_data['ip']
print("External IP Address:", external_ip)

这些方法可以帮助您轻松地获取本地IP地址和外网IP地址,以供您在文章中使用。请注意,在某些情况下,您的外网IP地址可能会动态变化,特别是在使用基于动态IP的互联网服务提供商时。


教程结束,感谢支持,更多学习请关注!

地存储

1 本地存储简介

在客户端存储数据

HTML5 提供了两种在客户端存储数据的新方法:

localStorage - 没有时间限制的数据存储

sessionStorage - 针对一个 session 的数据存储

之前, 这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储, 因为它们由每个对服务器的请求来传递, 这使得 cookie 速度很慢而且效率也不高。

HTML5 使用 JavaScript 来存储和访问数据。

2 语法

localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后, 数据依然可用。

localStorage 和sessionStorage分别是本地存储和会话存储, 统称本地存储。

存储数据:localStorage.setItem('key','value');

读取数据:localStorage.getItem('key')


删除指定数据:localStorage.removeItem('key');

清空所有数据:localStorage.clear()

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<!--
本地存储存在自己电脑上了 他不能和服务器交互
一种:本地存储(永久存储不会过期)localStorage
一种:临时会话(页面关闭数据就没了)sessionStorage
统称本地存储
二者的方法一毛一样 咱们只以一个举例子

cookie->可以喝服务器交互 是可以设置过期时间的
-->
<script type="text/javascript">
console.log(localStorage)
console.log(sessionStorage)

//写入东西(随便写,你存储的值)
//localStorage.setItem(key(小卡片),value(你存的包))

localStorage.setItem("key001","梁永灿");
localStorage.setItem("key002","迪丽热巴");
localStorage.setItem("key003","杨颖");
localStorage.setItem("key004","大黄");
localStorage.setItem("key004","小黄");


//读取
console.log(localStorage.getItem("key001"))
//console.log(localStorage)

//删除
localStorage.removeItem("key001");

//全部删除
localStorage.clear()


</script>
</body>
</html>

本地存储数据库会自动的为每一个网站(IP地址)建立一个独立的表格, 在同一个网站(IP地址)下数据是可以共享的, 但是不能跨域。

不能跨浏览器存储, 每个浏览器都有自己的小数据库, Chrome存储的, 火狐看不见。

localStorage是简单的数据库, 没有查询功能, 不能用sql操作, 只能简单的存储、读取k-v对。

sessionStorage 浏览器窗口一旦关闭, 数据就丢失了

localStorage存储的数据, 永远不丢失, 关机, 重启都不会导致数据丢失, 除非清除了浏览器记录

注意: 判断localStorage和sessionStorage是否有数据使用if直接判断

if(localStorage.getItem("key001")){
}

不能使用

我们经常会有需求,希望能获取的到当前用户的IP地址,而IP又分为公网ip(也称外网)和私网IP(也称内网IP),IP地址是IP协议提供的一种统一的地址格式,每台设备都设定了一个唯一的IP地址”,从而确保了用户在连网的计算机上操作时,能够快速地从互联网中找到自己所需的对象。

外网IP和内网IP的区别

1,外网IP是全球唯一的IP地址,仅分配给某一台网络设备。内网IP是由路由器分配给每一台设备内部使用的IP地址;

2,外网IP任何一台设备都可以ping通。内网IP只有在同一环境的内部设备才能ping通;

3,外网用户无法直接访问到内网用户,内网用户可以访问外网用户,因为内网的所有用户都是通过同一个外网IP进行上网的;

如何获取外网IP

这里我们可以借助现成的接口,搜狐提供的一个JS接口获取IP地址,我们只需在入口index.html中直接引入该接口即可轻松获取到当前用户的外网ip,Vue中在public中的index.html中引入接口,然后再需要获取的地方通过returnCitySN['cip']即可拿到IP地址,然后将IP存到localstorage或者Vuex中,这样随时可以调用了。

//引入JS
 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
//在组件中获取,可以选择在首页载入前获取该参数
var Ip=returnCitySN['cip']
localStorage.setItem('Ip', Ip)

如何获取内网IP

获取内网IP相对来说会复杂些,毕竟没有现成的接口可以调用,这里我们用到了WebRTC(网页即时通信),在WebRTC规范中,RTCPeerConnection可以用于视频流/音频流、以及数据的传输。这里们通过RTCPeerConnection 对象建立一个连接通道,下面3个或对象是针对不同浏览器来创建的。

var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

当RTCPeerConnection对象存在时,我们就可以实例化该对象并创建一个可以发送任意数据的数据通道,此时我们的RTCPeerConnection对象中数据基本都是null。

var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
 if (RTCPeerConnection) (()=>{
 var rtc=new RTCPeerConnection()
 rtc.createDataChannel(''); //创建一个可以发送任意数据的数据通道
 })()

什么是SDP

SDP 是一种会话描述格式 ,由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串。SDP中包含了很多媒体信息,包括了媒体类型(video)、传输协议(RTP/UDP/IP)、媒体格式(H.264 video)、多播或单播地址和端口、本端的带宽信息、本端的加密信息等。

建立sdp数据

我们从要做的就是从SDP中拿到传输协议中的信息,创建一条sdp数据并将数据存入LocalDescription对象中。这样我们在LocalDescription中就得到了所有的SDP数据,从下图中我们可以看到有IP地址在里面,接下来就可以从sdq中提取ip地址了。

rtc.createOffer( offerDesc=> { //创建并存储一条sdp数据
 rtc.setLocalDescription(offerDesc)
}, e=> { console.warn(e)})

监听candidate事件

onicecandidate属性在RTCPeerConnection实例上发生icecandidate事件时要调用的函数,当我们向服务器发送消息时触发并获取到SDP中的candidate属性,而candidate中正好有我们想要的IP地址,你可以直接获取var ip_addr=evt.candidate.address。当然你也可以从candidate属性中获取,不过这里就会复杂点,用个正则来提取吧(显然方法一简单)。

 rtc.onicecandidate=(evt)=> { //监听candidate事件
 if (evt.candidate) {
 //方法一:
 var ip_addr=evt.candidate.address
 //方法二:
 let ip_rule=/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.
 var ip_addr=ip_rule.exec(evt.candidate.candidate)[1]
 console.log("ip_addr==",ip_addr)
 }}

代码封装

最后整理下代码,封装成一个方法需要的时候直接调用即可,通过localStorage来存储获取到的ip_addr(或者Vuex存储),然后我们只需要通过localStorage.getItem('ip_addr'))就可以获取到我们的内网IP地址了。

getUserIP(){
 var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
 if (RTCPeerConnection) (()=>{
 var rtc=new RTCPeerConnection()
 rtc.createDataChannel(''); //创建一个可以发送任意数据的数据通道
 rtc.createOffer( offerDesc=> { //创建并存储一个sdp数据
 rtc.setLocalDescription(offerDesc)
 }, e=> { console.log(e)})
 rtc.onicecandidate=(evt)=> { //监听candidate事件
 if (evt.candidate) {
 var ip_addr=evt.candidate.address
 localStorage.setItem('ip_addr',ip_addr)
 }}
 })()
 else{console.log("目前仅测试了chrome浏览器OK")}
}

欢迎关注本人的公众号:编程手札,文章也会在公众号更新