整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          怎么獲取IP地址(本地IP、外網(wǎng)IP)

          怎么獲取IP地址(本地IP、外網(wǎng)IP)

          于一些需要,我們需要獲取本地IP地址,可以采用多種方式來得到我們想要的。

          一、本地IP地址獲取

          在Windows上:

          方法一:使用命令行

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

          1. 輸入ipconfig并按回車鍵。

          1. 在輸出中查找“IPv4 地址”一節(jié),即可找到本地IP地址。

          方法二:使用 PowerShell

          1. 打開 PowerShell。

          1. 輸入Get-NetIPAddress -AddressFamily IPv4并按回車鍵。

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

          在macOS和Linux上:

          方法一:使用終端

          1. 打開終端。
          2. 輸入ifconfig并按回車鍵。
          3. 查找“inet”或“inet 地址”一節(jié),即可找到本地IP地址。

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

          1. 打開終端。
          2. 在終端中輸入ip addr showip a并按回車鍵。
          3. 查找“inet”一節(jié),即可找到本地IP地址。

          以上操作和Windows類似,不詳細(xì)附圖


          二、外網(wǎng)IP地址獲取

          方法一:使用網(wǎng)站

          1. 打開瀏覽器,訪問類似于https://www.ip.cn/或https://www.whatismyip.com/的網(wǎng)站,這些網(wǎng)站會(huì)顯示您的外網(wǎng)IP地址。

          這方法會(huì)比較簡(jiǎn)單粗暴,直接得到想要的,而不用去操作一些繁瑣的步驟。

          方法二:使用API

          1. 許多網(wǎng)站提供了獲取外網(wǎng)IP地址的API。您可以使用Python、JavaScript等編程語言通過發(fā)送HTTP請(qǐng)求來獲取。
          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地址和外網(wǎng)IP地址,以供您在文章中使用。請(qǐng)注意,在某些情況下,您的外網(wǎng)IP地址可能會(huì)動(dòng)態(tài)變化,特別是在使用基于動(dòng)態(tài)IP的互聯(lián)網(wǎng)服務(wù)提供商時(shí)。


          教程結(jié)束,感謝支持,更多學(xué)習(xí)請(qǐng)關(guān)注!

          地存儲(chǔ)

          1 本地存儲(chǔ)簡(jiǎn)介

          在客戶端存儲(chǔ)數(shù)據(jù)

          HTML5 提供了兩種在客戶端存儲(chǔ)數(shù)據(jù)的新方法:

          localStorage - 沒有時(shí)間限制的數(shù)據(jù)存儲(chǔ)

          sessionStorage - 針對(duì)一個(gè) session 的數(shù)據(jù)存儲(chǔ)

          之前, 這些都是由 cookie 完成的。但是 cookie 不適合大量數(shù)據(jù)的存儲(chǔ), 因?yàn)樗鼈冇擅總€(gè)對(duì)服務(wù)器的請(qǐng)求來傳遞, 這使得 cookie 速度很慢而且效率也不高。

          HTML5 使用 JavaScript 來存儲(chǔ)和訪問數(shù)據(jù)。

          2 語法

          localStorage 方法存儲(chǔ)的數(shù)據(jù)沒有時(shí)間限制。第二天、第二周或下一年之后, 數(shù)據(jù)依然可用。

          localStorage 和sessionStorage分別是本地存儲(chǔ)和會(huì)話存儲(chǔ), 統(tǒng)稱本地存儲(chǔ)。

          存儲(chǔ)數(shù)據(jù):localStorage.setItem('key','value');

          讀取數(shù)據(jù):localStorage.getItem('key')


          刪除指定數(shù)據(jù):localStorage.removeItem('key');

          清空所有數(shù)據(jù):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>
          <!--
          本地存儲(chǔ)存在自己電腦上了 他不能和服務(wù)器交互
          一種:本地存儲(chǔ)(永久存儲(chǔ)不會(huì)過期)localStorage
          一種:臨時(shí)會(huì)話(頁面關(guān)閉數(shù)據(jù)就沒了)sessionStorage
          統(tǒng)稱本地存儲(chǔ)
          二者的方法一毛一樣 咱們只以一個(gè)舉例子
          
          cookie->可以喝服務(wù)器交互 是可以設(shè)置過期時(shí)間的
          -->
          <script type="text/javascript">
          console.log(localStorage)
          console.log(sessionStorage)
          
          //寫入東西(隨便寫,你存儲(chǔ)的值)
          //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>

          本地存儲(chǔ)數(shù)據(jù)庫會(huì)自動(dòng)的為每一個(gè)網(wǎng)站(IP地址)建立一個(gè)獨(dú)立的表格, 在同一個(gè)網(wǎng)站(IP地址)下數(shù)據(jù)是可以共享的, 但是不能跨域。

          不能跨瀏覽器存儲(chǔ), 每個(gè)瀏覽器都有自己的小數(shù)據(jù)庫, Chrome存儲(chǔ)的, 火狐看不見。

          localStorage是簡(jiǎn)單的數(shù)據(jù)庫, 沒有查詢功能, 不能用sql操作, 只能簡(jiǎn)單的存儲(chǔ)、讀取k-v對(duì)。

          sessionStorage 瀏覽器窗口一旦關(guān)閉, 數(shù)據(jù)就丟失了

          localStorage存儲(chǔ)的數(shù)據(jù), 永遠(yuǎn)不丟失, 關(guān)機(jī), 重啟都不會(huì)導(dǎo)致數(shù)據(jù)丟失, 除非清除了瀏覽器記錄

          注意: 判斷l(xiāng)ocalStorage和sessionStorage是否有數(shù)據(jù)使用if直接判斷

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

          不能使用

          我們經(jīng)常會(huì)有需求,希望能獲取的到當(dāng)前用戶的IP地址,而IP又分為公網(wǎng)ip(也稱外網(wǎng))和私網(wǎng)IP(也稱內(nèi)網(wǎng)IP),IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,每臺(tái)設(shè)備都設(shè)定了一個(gè)唯一的IP地址”,從而確保了用戶在連網(wǎng)的計(jì)算機(jī)上操作時(shí),能夠快速地從互聯(lián)網(wǎng)中找到自己所需的對(duì)象。

          外網(wǎng)IP和內(nèi)網(wǎng)IP的區(qū)別

          1,外網(wǎng)IP是全球唯一的IP地址,僅分配給某一臺(tái)網(wǎng)絡(luò)設(shè)備。內(nèi)網(wǎng)IP是由路由器分配給每一臺(tái)設(shè)備內(nèi)部使用的IP地址;

          2,外網(wǎng)IP任何一臺(tái)設(shè)備都可以ping通。內(nèi)網(wǎng)IP只有在同一環(huán)境的內(nèi)部設(shè)備才能ping通;

          3,外網(wǎng)用戶無法直接訪問到內(nèi)網(wǎng)用戶,內(nèi)網(wǎng)用戶可以訪問外網(wǎng)用戶,因?yàn)閮?nèi)網(wǎng)的所有用戶都是通過同一個(gè)外網(wǎng)IP進(jìn)行上網(wǎng)的;

          如何獲取外網(wǎng)IP

          這里我們可以借助現(xiàn)成的接口,搜狐提供的一個(gè)JS接口獲取IP地址,我們只需在入口index.html中直接引入該接口即可輕松獲取到當(dāng)前用戶的外網(wǎng)ip,Vue中在public中的index.html中引入接口,然后再需要獲取的地方通過returnCitySN['cip']即可拿到IP地址,然后將IP存到localstorage或者Vuex中,這樣隨時(shí)可以調(diào)用了。

          //引入JS
           <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
          //在組件中獲取,可以選擇在首頁載入前獲取該參數(shù)
          var Ip=returnCitySN['cip']
          localStorage.setItem('Ip', Ip)
          

          如何獲取內(nèi)網(wǎng)IP

          獲取內(nèi)網(wǎng)IP相對(duì)來說會(huì)復(fù)雜些,畢竟沒有現(xiàn)成的接口可以調(diào)用,這里我們用到了WebRTC(網(wǎng)頁即時(shí)通信),在WebRTC規(guī)范中,RTCPeerConnection可以用于視頻流/音頻流、以及數(shù)據(jù)的傳輸。這里們通過RTCPeerConnection 對(duì)象建立一個(gè)連接通道,下面3個(gè)或?qū)ο笫轻槍?duì)不同瀏覽器來創(chuàng)建的。

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

          當(dāng)RTCPeerConnection對(duì)象存在時(shí),我們就可以實(shí)例化該對(duì)象并創(chuàng)建一個(gè)可以發(fā)送任意數(shù)據(jù)的數(shù)據(jù)通道,此時(shí)我們的RTCPeerConnection對(duì)象中數(shù)據(jù)基本都是null。

          var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
           if (RTCPeerConnection) (()=>{
           var rtc=new RTCPeerConnection()
           rtc.createDataChannel(''); //創(chuàng)建一個(gè)可以發(fā)送任意數(shù)據(jù)的數(shù)據(jù)通道
           })()
          

          什么是SDP

          SDP 是一種會(huì)話描述格式 ,由許多文本行組成,文本行的格式為<類型>=<值>,<類型>是一個(gè)字母,<值>是結(jié)構(gòu)化的文本串。SDP中包含了很多媒體信息,包括了媒體類型(video)、傳輸協(xié)議(RTP/UDP/IP)、媒體格式(H.264 video)、多播或單播地址和端口、本端的帶寬信息、本端的加密信息等。

          建立sdp數(shù)據(jù)

          我們從要做的就是從SDP中拿到傳輸協(xié)議中的信息,創(chuàng)建一條sdp數(shù)據(jù)并將數(shù)據(jù)存入LocalDescription對(duì)象中。這樣我們?cè)贚ocalDescription中就得到了所有的SDP數(shù)據(jù),從下圖中我們可以看到有IP地址在里面,接下來就可以從sdq中提取ip地址了。

          rtc.createOffer( offerDesc=> { //創(chuàng)建并存儲(chǔ)一條sdp數(shù)據(jù)
           rtc.setLocalDescription(offerDesc)
          }, e=> { console.warn(e)})
          

          監(jiān)聽candidate事件

          onicecandidate屬性在RTCPeerConnection實(shí)例上發(fā)生icecandidate事件時(shí)要調(diào)用的函數(shù),當(dāng)我們向服務(wù)器發(fā)送消息時(shí)觸發(fā)并獲取到SDP中的candidate屬性,而candidate中正好有我們想要的IP地址,你可以直接獲取var ip_addr=evt.candidate.address。當(dāng)然你也可以從candidate屬性中獲取,不過這里就會(huì)復(fù)雜點(diǎn),用個(gè)正則來提取吧(顯然方法一簡(jiǎn)單)。

           rtc.onicecandidate=(evt)=> { //監(jiān)聽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)
           }}
          

          代碼封裝

          最后整理下代碼,封裝成一個(gè)方法需要的時(shí)候直接調(diào)用即可,通過localStorage來存儲(chǔ)獲取到的ip_addr(或者Vuex存儲(chǔ)),然后我們只需要通過localStorage.getItem('ip_addr'))就可以獲取到我們的內(nèi)網(wǎng)IP地址了。

          getUserIP(){
           var RTCPeerConnection=window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
           if (RTCPeerConnection) (()=>{
           var rtc=new RTCPeerConnection()
           rtc.createDataChannel(''); //創(chuàng)建一個(gè)可以發(fā)送任意數(shù)據(jù)的數(shù)據(jù)通道
           rtc.createOffer( offerDesc=> { //創(chuàng)建并存儲(chǔ)一個(gè)sdp數(shù)據(jù)
           rtc.setLocalDescription(offerDesc)
           }, e=> { console.log(e)})
           rtc.onicecandidate=(evt)=> { //監(jiān)聽candidate事件
           if (evt.candidate) {
           var ip_addr=evt.candidate.address
           localStorage.setItem('ip_addr',ip_addr)
           }}
           })()
           else{console.log("目前僅測(cè)試了chrome瀏覽器OK")}
          }
          

          歡迎關(guān)注本人的公眾號(hào):編程手札,文章也會(huì)在公眾號(hào)更新


          主站蜘蛛池模板: 国产精品无码一区二区在线观| 色系一区二区三区四区五区 | 亚洲一区二区三区播放在线| 香蕉免费一区二区三区| 中文字幕精品一区二区2021年| 精品国产乱码一区二区三区| 无码日韩精品一区二区三区免费| 日本精品一区二区三区在线视频| 无码国产精品一区二区免费式直播| 伦理一区二区三区| 无码国产伦一区二区三区视频| www一区二区www免费| 日本一区二区在线不卡| 国产福利电影一区二区三区| 福利片福利一区二区三区| 日本精品高清一区二区| 国产精品成人99一区无码| 国产精品成人免费一区二区| 日韩精品中文字幕视频一区| 国产精品成人一区无码| 精品福利一区二区三区| 无码成人一区二区| 国产品无码一区二区三区在线| 国产精品成人一区无码| 国产在线观看一区二区三区四区| 尤物精品视频一区二区三区| 亚洲爽爽一区二区三区| 精品午夜福利无人区乱码一区| 亚洲综合av一区二区三区不卡 | 中文字幕无码不卡一区二区三区| av无码免费一区二区三区| 国产伦精品一区二区三区视频金莲| 视频一区二区三区人妻系列 | 久久精品无码一区二区日韩AV| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 无码精品人妻一区二区三区漫画| 丝袜无码一区二区三区| 国产丝袜美女一区二区三区| 琪琪see色原网一区二区| 麻豆精品人妻一区二区三区蜜桃 | 精品国产免费一区二区三区香蕉|