標識訪問者電腦與賬戶的關系,獲取ip歪架,mac或者設備指紋對比

想過用js獲取信息標識用戶機器嗎股冗?獲取本地ip?mac地址和蚪?

通過一番探索結(jié)論如下:

一止状、 mac地址不用想了。
二攒霹、 獲取ip

我們知道nginx的配置X-Forwarded-For 后端可以拿到ip怯疤,這個ip是出口ip,標識不了訪問者機器

location /api {
        proxy_set_header        Host    $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout   300;client_max_body_size 30m;
        rewrite ^/wisbayar_api(.*)$ $1 break;
        proxy_pass http://xx.xx.xx.xx:11001/;
}
三催束、利用webrtc網(wǎng)頁即時通信 功能 實現(xiàn)點對點通信集峦,獲取ip,我們看代碼如下抠刺。
    function findIP(onNewIP) {
                var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
                var pc = new myPeerConnection({iceServers: [{urls: "stun:stun.l.google.com:19302"}]}),
                noop = function() {},
                localIPs = {},
                ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
                key;

                function ipIterate(ip) {
                    if (!localIPs[ip]) onNewIP(ip);
                    localIPs[ip] = true;
                }
                  
                pc.createDataChannel("");
                 
                pc.createOffer(function(sdp) {
                    sdp.sdp.split('\n').forEach(function(line) {
                        if (line.indexOf('candidate') < 0) return;
                        line.match(ipRegex).forEach(ipIterate);
                    });
                    pc.setLocalDescription(sdp, noop, noop);
                }, noop);
                  
                pc.onicecandidate = function(ice) {
                         console.log('ice.candidate', ice.candidate)
                    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
                    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
                };
            }

            function addIP(ip) {
                console.log('got ip: ', ip);
            }
            findIP(addIP)

上面的代碼提到的概念有點多塔淤,我們通過代碼逐步看一下點對點通信概念:

new myPeerConnection({iceServers: [{urls: "stun:stun.l.google.com:19302"}]}),
  1. 先看這里iceServers 是什么?
    ICE(Interactive Connectivity Establishment):是一個框架速妖,允許您的 Web 瀏覽器 (一個Peer A)與對等方(另一個Peer B)連接,它需要繞過阻止打開連接的防火墻,內(nèi)網(wǎng)限制高蜂。如果您的路由器不允許您直接與對等方連接,則通過服務器中繼數(shù)據(jù)罕容。 而ICE 使用STUN/TURN的一些技術(shù)來實現(xiàn)此目的
    實現(xiàn)點對點通信备恤,實例名取RTCPeerConnection,就好理解了锦秒。

  2. 代碼里的stun.l.google.com:19302 是什么露泊?
    這是google的STUN服務器。這里還有很多公益的免費的可以查看:其他公共STUN 或 TURN 服務器
    當然如果你要做自己的視頻功能脂崔,你也可以替換為自己的服務滤淳。

如果我們這里不寫這個STUN服務器,在pc.onicecandidate中打印ice.candidate. address可以看到 是一個以.local結(jié)尾的字符串而不是自己想要的IP砌左。

長這個樣子.png
  1. STUN服務器干了什么呢脖咐?
    STUN(Session Traversal Utilities for NAT )是一種協(xié)議铺敌。客戶端將向 Internet 上的 STUN 服務器發(fā)送請求屁擅,該服務器將回復客戶端的公共IP以及客戶端是否可以在 NAT 后面訪問
點對點通信.png
  1. NAT 是什么偿凭?
    NAT(Network Address Translation):為設備提供公共 IP 地址,俗稱路由器派歌。 給局域網(wǎng)內(nèi)部分配內(nèi)網(wǎng)地址弯囊,對外就使用它的公共 IP 地址。
    但是胶果,某些路由器對誰可以連接到網(wǎng)絡上的設備有限制匾嘱,即使我們有 STUN 服務器找到的公共 IP 地址,也不是任何人都可以創(chuàng)建連接早抠。在這種情況下霎烙,我們需要轉(zhuǎn)向 TURN

  2. 再看TURN 是什么蕊连?

TURN(Traversal Using Relays around NAT):圍繞 NAT 使用中繼遍歷悬垃,實際上就是NAT路由器限制了不能直連,就使用TURN 服務器來中轉(zhuǎn)轉(zhuǎn)發(fā)甘苍,是一種降級方式尝蠕。

結(jié)合上面的圖,現(xiàn)在我們就明白了载庭,為了實現(xiàn)無延遲看彼,實時通信,就要通過繞過NAT的限制囚聚,達到直連機器的目的闲昭。如果不能直連,就使用TURN中轉(zhuǎn)靡挥。
STUN服務器是用來取外網(wǎng)地址的。
TURN服務器是在P2P(點對點)失敗時進行轉(zhuǎn)發(fā)的

  1. 代碼里pc.createDataChannel, pc.createOffer是什么意思鸯绿?

pc.createDataChannel 是創(chuàng)建了一個數(shù)據(jù)通道跋破,這是在建立連接之前交換信息的通信渠道。需要需要交換的信息是一端發(fā)送Offer(pc.createOffer)和遠端響應Answer (remote.createAnswer)瓶蝴。交換的信息就是sdp

  1. sdp 是什么毒返?

SDP (Session Description Protocol) 用于描述多媒體會話,以便進行會話通知舷手、會話邀請和其他形式的多媒體會話啟動拧簸。在啟動多媒體電話會議、IP 語音呼叫男窟、流式視頻或其他會話時盆赤,需要向參與者傳達媒體詳細信息贾富、傳輸?shù)刂泛推渌麜捗枋鲈獢?shù)據(jù)。

sdp信息.png
  1. 交換sdp信息后牺六,兩邊還必須交換有關網(wǎng)絡連接的信息颤枪,pc.onicecandidate 就是干這個的

ICE candidate 直接翻譯:ice 候選人。這個pc.onicecandidate方法就說明了兩邊通信是直連還是說要通過 TURN服務器中繼淑际。這個方法里就能得到公共IP

通信過程圖.png

到這里畏纲,我們就了解了獲取IP代碼的意思。拿到了公共IP春缕,至于內(nèi)網(wǎng)IP盗胀,瀏覽器做了限制,放開限制才能拿到锄贼, 以下是不同瀏覽器放開限制的方法

火狐(FireFox) 刪除隱藏IP

瀏覽器輸入 about:config

搜索配置 media.peerconnection.enabled 改為false ( 刷新程序,IP正常顯示 )

谷歌(Chrome) 刪除隱藏IP

瀏覽器輸入:chrome://flags/#enable-webrtc-hide-local-ips-with-mdns

把 Anonymize local IPs exposed by WebRTC 設置為 disabled ( 刷新程序,IP正常顯示 )

edge瀏覽器刪除隱藏ip

瀏覽器輸入: edge://flags/#enable-webrtc-hide-local-ips-with-mdns

把 Anonymize local IPs exposed by WebRTC 設置為 disabled ( 刷新程序,IP正常顯示 )

四票灰、 使用設備指紋

首先可以想到的是使用uuid生成一個放在本地,但是不夠固定咱娶。刪了本地存的米间,在瀏覽器版本未變的情況下就又生成了一個新的。

npm 上的fingerprintjs 這個指紋信息可以是字體膘侮、canvas屈糊、插件、屏幕分辨率琼了、時區(qū)逻锐、地理位置或者是你使用的語言等其他的參數(shù),信息越多并且信息的區(qū)別度越大雕薪,越能決定瀏覽器指紋的準確性昧诱。
在高版本要獲得許可了,可以使用免費的低版本版本所袁。

實測使用它在不同機器上盏档,相同版本瀏覽器下生成唯一id是不一樣的,似乎可用燥爷。
依然要注意以下問題:

  1. 升級瀏覽器后蜈亩,id會變 (重裝瀏覽器,大概率版本號也變了)
  2. 穩(wěn)定性前翎,這個id會持續(xù)多久稚配。文檔提到免費版維持幾周
  3. 不同的瀏覽器生成的id是不一樣的。

這里我在登陸時生成一次后港华,存在本地道川。后續(xù)登陸不再生成,并結(jié)合瀏覽器名稱和版本,作為唯一標識id冒萄‰叮基本滿足使用場景來判斷這個用戶是否在另一個人的機器上登陸過

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宦言,隨后出現(xiàn)的幾起案子扇单,更是在濱河造成了極大的恐慌,老刑警劉巖奠旺,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜘澜,死亡現(xiàn)場離奇詭異,居然都是意外死亡响疚,警方通過查閱死者的電腦和手機鄙信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忿晕,“玉大人装诡,你說我怎么就攤上這事〖危” “怎么了鸦采?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咕幻。 經(jīng)常有香客問我渔伯,道長,這世上最難降的妖魔是什么肄程? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任锣吼,我火速辦了婚禮,結(jié)果婚禮上蓝厌,老公的妹妹穿的比我還像新娘玄叠。我一直安慰自己,他們只是感情好拓提,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布读恃。 她就那樣靜靜地躺著,像睡著了一般代态。 火紅的嫁衣襯著肌膚如雪狐粱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天胆数,我揣著相機與錄音,去河邊找鬼互墓。 笑死必尼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播判莉,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼豆挽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了券盅?” 一聲冷哼從身側(cè)響起帮哈,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锰镀,沒想到半個月后娘侍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泳炉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年憾筏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片花鹅。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡氧腰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刨肃,到底是詐尸還是另有隱情古拴,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布真友,位于F島的核電站黄痪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锻狗。R本人自食惡果不足惜满力,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轻纪。 院中可真熱鬧油额,春花似錦、人聲如沸刻帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崇众。三九已至掂僵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷歌,已是汗流浹背锰蓬。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眯漩,地道東北人芹扭。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓麻顶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舱卡。 傳聞我的和親對象是個殘疾皇子辅肾,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容