這兩天實(shí)在是被畢設(shè)折磨的夠嗆!哎情组,經(jīng)常在卡殼燥筷,寫一點(diǎn),再卡殼院崇,再寫一點(diǎn)的循環(huán)中慢慢前進(jìn)肆氓。老崔死催著十號(hào)前交稿,真是焦頭爛額亚脆。今天就換換腦子做院,做一點(diǎn)好玩的事兒。干什么呢?來(lái)爬一爬人人網(wǎng)吧键耕,看看能不能找出一些有意思的東西來(lái)寺滚。
人人網(wǎng)作為一個(gè)過(guò)氣的社交網(wǎng)站,其用戶數(shù)據(jù)還是比較可觀的屈雄。之所以選擇人人網(wǎng)的一個(gè)原因是村视,人人網(wǎng)不像QQ空間一樣中二:你可以禁止你的好友訪問(wèn)你的空間。那么酒奶,開(kāi)始吧蚁孔!
由于人人網(wǎng)沒(méi)有類似于微博大廳的功能,所有的數(shù)據(jù)必須要登錄以后才能看到惋嚎。我又不是什么黑客干壞事杠氢,光明正大的去,就登陸我自己的賬號(hào)另伍。
由于不知道人人網(wǎng)這個(gè)登錄后臺(tái)是怎么做的鼻百,所以登陸的同時(shí)我們需要抓個(gè)包,看看HTTP頭里面帶了多少cookie摆尝。在這里筆者用的抓包軟件是wireshark温艇。
真是巧,第12個(gè)數(shù)據(jù)包就是登錄包堕汞。右鍵看一下完整的通信記錄勺爱。
由于不知道這一大串cookie中具體是哪一個(gè)或哪幾個(gè)做登錄驗(yàn)證用,就干脆把這些cookie全部拷貝到程序中去讯检。至于下面的那一串POST方式提交的數(shù)據(jù)就不用管了琐鲁。
接著,我們觀察一下人人網(wǎng)的個(gè)人界面吧视哑,看看有沒(méi)有我們感興趣的信息绣否。隨意找一個(gè)好友的主頁(yè)登陸進(jìn)去誊涯,我們可以發(fā)現(xiàn)人人網(wǎng)可以查看任意好友的全部好友信息挡毅。如下圖,我選取了我人人好友中的一個(gè)公眾號(hào)“交大有思”來(lái)舉例子暴构。
通過(guò)瀏覽器右鍵查看網(wǎng)頁(yè)源代碼我們可以發(fā)現(xiàn)網(wǎng)頁(yè)中并沒(méi)有這些好友信息的靜態(tài)信息跪呈,說(shuō)明這些好友信息一定是通過(guò)網(wǎng)頁(yè)上的腳本代碼動(dòng)態(tài)獲取的。怎么證實(shí)呢取逾?我們還是來(lái)抓個(gè)包吧耗绿。通常這種異步獲取信息的腳本代碼都是通過(guò)調(diào)用網(wǎng)站后臺(tái)的某個(gè)api來(lái)實(shí)現(xiàn)的,有些不注重用戶隱私的公司就直接把這些信息在網(wǎng)絡(luò)上明文傳送砾隅。像這種api通常都會(huì)有一個(gè)比較通俗易懂的名字误阻,例如getfriendslist這種。
果然,在第443個(gè)數(shù)據(jù)包中找到了一個(gè)疑似的究反。從命名上看這太像我們所要找的那個(gè)接口了寻定。我們右鍵看一下完整的通信記錄,來(lái)確認(rèn)一下我們的猜想精耐。
服務(wù)器針對(duì)這個(gè)接口調(diào)用返回的數(shù)據(jù)是一堆亂碼狼速。但是光憑這一堆亂碼我們也能看得出來(lái),人人網(wǎng)的這個(gè)接口的數(shù)據(jù)是完全沒(méi)有加密的卦停,之所以出現(xiàn)亂碼是因?yàn)榫幋a格式的錯(cuò)誤向胡。這并不是什么大問(wèn)題,通常用瀏覽器調(diào)用一次就能夠解決惊完。我們仔細(xì)觀察了這個(gè)接口所需要的參數(shù)以后直接用瀏覽器調(diào)用看看結(jié)果僵芹。在這里筆者調(diào)用接口打印自己好留列表的前20個(gè)好友的基本信息。
如上圖小槐,人人網(wǎng)果然是這樣一種節(jié)奏:所有的用戶信息完全不加密淮捆,赤身裸體地在網(wǎng)絡(luò)上飛奔,而且還是這么格式良好的json數(shù)據(jù)本股,真是呵呵呵攀痊!這個(gè)接口的調(diào)用很簡(jiǎn)單,只用傳入人人網(wǎng)的ID拄显,數(shù)據(jù)的分頁(yè)信息和一些登錄驗(yàn)證信息就可以了苟径。接下來(lái),我們用python程序來(lái)調(diào)用這個(gè)接口試試看躬审,還是調(diào)用接口打印我自己的全部人人好友棘街。
如圖,整個(gè)接口調(diào)用成功承边,json數(shù)據(jù)解析成功遭殉。該函數(shù)通過(guò)傳入用戶的ID值可以打印出這個(gè)用戶全部的好友基本信息,為了保護(hù)隱私筆者將用戶ID數(shù)據(jù)全部隱去了博助。仔細(xì)觀察一下這些用戶基本數(shù)據(jù)吧险污,上面除了一些不知所云的字段以外還有一些很有意思的信息。
這些信息中包含了用戶的大頭像圖片地址富岳,小頭像圖片地址蛔糯,真實(shí)的姓名,與查詢用戶是否為好友關(guān)系窖式,基礎(chǔ)的學(xué)校地區(qū)信息等等蚁飒。一些牛掰的黑客僅僅依靠這些基礎(chǔ)的數(shù)據(jù)完全就可以完成一次社會(huì)工程學(xué)實(shí)踐,這對(duì)個(gè)人信息保護(hù)來(lái)說(shuō)是一個(gè)很大的安全隱患萝喘。OK淮逻,接下來(lái)我們來(lái)驗(yàn)證一下著名的“六度分割”理論吧琼懊,這理論是說(shuō)在現(xiàn)代社會(huì),不論兩個(gè)人物理上相隔多遠(yuǎn)爬早,都可以通過(guò)至多六個(gè)人建立聯(lián)系肩碟。今天,我們就來(lái)遍歷一下我們?nèi)亢糜训暮糜淹勾唬匆幌逻@個(gè)人際關(guān)系樹(shù)僅僅深入到第二層能達(dá)到多大的規(guī)模削祈。在編程上,我們使用遞歸脑漫。使用一個(gè)集合來(lái)存儲(chǔ)所有遍歷到的用戶信息髓抑。由于集合的特殊性質(zhì):集合不能存儲(chǔ)兩個(gè)相同的數(shù)據(jù)。因此我們就避免了重復(fù)統(tǒng)計(jì)一個(gè)人信息的問(wèn)題优幸。實(shí)驗(yàn)的結(jié)果非常驚人吨拍,僅僅是筆者人人網(wǎng)好友圈的71個(gè)好友的所有好友就達(dá)到了12726人,幾乎是以指數(shù)2的級(jí)別向上增長(zhǎng)网杆。
都到這兒了就再進(jìn)一步吧羹饰,通過(guò)csv文件將所有的這些用戶信息保存下來(lái),并且將筆者71個(gè)好友的全部好友的用戶頭像都保存下來(lái)碳却。
接下來(lái)队秩,我們還可以遍歷所有好友的相冊(cè)。人人網(wǎng)在這里又為爬蟲提供了非常好的便利機(jī)會(huì)昼浦。不但用戶的相冊(cè)信息在網(wǎng)頁(yè)上靜態(tài)寫明馍资,毫無(wú)加密,而且還是便于解析的json格式关噪。以下是筆者公眾號(hào)好友“交大有思”的全部相冊(cè)信息:
獲取了這些信息后只用解析json數(shù)據(jù)鸟蟹,然后就可以對(duì)相冊(cè)中的相片進(jìn)行下載了。噗~使兔,寫到這筆者就不打算繼續(xù)下去了建钥。這次的博客就到這兒吧!以后看到好玩的網(wǎng)站還是會(huì)用爬蟲爬一爬虐沥。