引言:網(wǎng)上鄰居正常運(yùn)行有三種配置方案DNS、WINS、NETBIOS名稱廣播,其中NETBIOS名稱廣播是一種自動(dòng)的運(yùn)行方式,計(jì)算機(jī)只要配置基本的網(wǎng)絡(luò)參數(shù)即可。以下主要針對(duì)這種方式,以真空網(wǎng)絡(luò)環(huán)境為案例,通過(guò)數(shù)據(jù)包的截取還原真實(shí)的網(wǎng)上鄰居運(yùn)行軌跡。
只 有NETBIOS名稱廣播是一種自動(dòng)的運(yùn)行方式,計(jì)算機(jī)只要配置基本的網(wǎng)絡(luò)參數(shù)即可。當(dāng)然這種方式的弊端也顯而易見(jiàn),因?yàn)闆](méi)有專門(mén)的名稱服務(wù)器,都是自由選擇,出現(xiàn)了問(wèn)題也不好排查,以下主要針對(duì)這種方式,以真空網(wǎng)絡(luò)環(huán)境為案例,通過(guò)數(shù)據(jù)包的截取還原真實(shí)的網(wǎng)上鄰居運(yùn)行軌跡(以下分析采用《科來(lái)網(wǎng)絡(luò)分析系統(tǒng)9技術(shù)交流版》)。
在 Windows 操作系統(tǒng)中,有兩種名稱,分別為:主機(jī)名稱 和 NetBIOS 名稱。
圖1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
圖2 本地NETBIOS名稱表
從狹義上來(lái)說(shuō),主機(jī)名稱正如它的字面意思一樣就是一臺(tái)主機(jī)的名字。從廣義來(lái)說(shuō),它又不僅僅包含計(jì)算機(jī)的名字,也包含互聯(lián)網(wǎng)中的行通信,通信過(guò)程是建立在NetBIOS 協(xié)議之上的。在安裝完Windows系統(tǒng)后,系統(tǒng)會(huì)默認(rèn)使用計(jì)算機(jī)的名字做為當(dāng)前主機(jī)的NetBIOS名稱。它的最大長(zhǎng)度為16個(gè)字符,其中最后一位是不可配置的,用于指定 NetBIOS的服務(wù)類型。如果計(jì)算機(jī)名稱不足15位則使用空格補(bǔ)全到15位,反之如果計(jì)算機(jī)名稱超過(guò)15位則會(huì)截取前15位。域名。
在Windows系統(tǒng)中的另外一種名稱就是NetBIOS名稱,準(zhǔn)確地說(shuō)NetBIOS名稱并非是一種名字系統(tǒng),而是Windows操作系統(tǒng)網(wǎng)絡(luò)的一個(gè)編程接口,允許主機(jī)之間使用NetBIOS名稱進(jìn)
如圖1所示,以上三臺(tái)主機(jī)在同一局域網(wǎng),主機(jī)LSB最先開(kāi)機(jī),自然充當(dāng)了主瀏覽器角色。如圖2所示,在本機(jī)上通過(guò)NBTSTAT-N命令可以列出本地NETBIOS名稱,具體參數(shù)詳解如下:
LSB <00> 唯一代表工作站服務(wù),每一臺(tái)上網(wǎng)的計(jì)算機(jī)必須首先注冊(cè)的唯一標(biāo)識(shí)符,這也是進(jìn)行網(wǎng)絡(luò)鄰居瀏覽的唯一必要條件。在同一子網(wǎng)上的其他機(jī)子可以用PING LSB得到我的IP,注意這跟DNS沒(méi)有關(guān)系,這是通過(guò)廣播查詢LSB <00>得到的,因?yàn)門(mén)CP/IP和NETBIOS有綁定。這與下面圖3的Microsoft網(wǎng)絡(luò)客戶端是相對(duì)應(yīng)的,如果取消該選項(xiàng),就不會(huì)出現(xiàn)上面注冊(cè)的LSB <00>唯一標(biāo)識(shí)符。
LSB <20> 唯一與LSB <00>相 對(duì)照,LSB <20>代表服務(wù)器服務(wù),凡是提供文件及打印機(jī)共享服務(wù)的機(jī)子就叫做SERVER,它會(huì)在入網(wǎng)時(shí)進(jìn)行瀏覽器宣告,這也是一臺(tái)機(jī)子可通過(guò)網(wǎng)上鄰居“被”訪問(wèn)的唯一必要條件。這與圖4所示的Microsoft網(wǎng)絡(luò)的文件和打印機(jī)共享是相對(duì)應(yīng)的,如果取消該選項(xiàng),就不會(huì)出現(xiàn)上面注冊(cè)的LSB<20>唯一標(biāo)識(shí)符。
WORKGROUP<00> 組
圖3 網(wǎng)絡(luò)客戶端
圖4 網(wǎng)絡(luò)的文件和打印機(jī)共享
只要把工作組名設(shè)成WORKGROUP的機(jī)子都會(huì)注冊(cè)這一項(xiàng),從而同一子網(wǎng)上的某些機(jī)子間建立一種特定的邏輯關(guān)聯(lián),使對(duì)于WORKGROUP <00>進(jìn)行的通訊只被這些機(jī)子接收,這里大家可以考慮不在WORKGROUP的機(jī)子對(duì)這些報(bào)文的處理過(guò)程。
雖說(shuō)這一項(xiàng)是名字表里最不重要的一項(xiàng),但大多數(shù)無(wú)法瀏覽網(wǎng)上鄰居的故障卻都和它有關(guān)哦!還有大家可以想想,要是你的工作組名和別人的機(jī)器名起的一樣會(huì)出現(xiàn)什么事情呢?
WORKGROUP<1E> 組
這與瀏覽器選舉有關(guān),把<1E>標(biāo)志稱為候選者,這樣當(dāng)WORKGROUP組里的當(dāng)前瀏覽主控服務(wù)器當(dāng)機(jī)后,所有擁有<1E>標(biāo)志的機(jī)子都有資格參加競(jìng)選。
WORKGROUP<1D> 唯一
這個(gè)是瀏覽主控服務(wù)器的標(biāo)志,這里表明主機(jī)LSB是WORKGROUP里的瀏覽主控服務(wù)器了。
..__MSBROWSE__.<01> 組
見(jiàn)過(guò)這個(gè)怪東西的人肯定不少,但真正知道它用途的恐怕不多。這是一個(gè)組名,由整個(gè)子網(wǎng)上的所有瀏覽主控服務(wù)器構(gòu)成,這樣當(dāng)WORKGROUP里的機(jī)子想要瀏覽其他組的資源時(shí),LSB就憑借這個(gè)標(biāo)識(shí)為大家查找那個(gè)組的瀏覽主控服務(wù)器,從而使我們能獲得該組的瀏覽列表。
另外兩臺(tái)主機(jī)隨后開(kāi)機(jī),都注冊(cè)到該主瀏覽器中。以LSH-PC計(jì)算機(jī)為例,啟動(dòng)時(shí)要通過(guò)137、138兩個(gè)端口發(fā)送不同類別的數(shù)據(jù)包注冊(cè)到主瀏覽器中。通過(guò)在其它主機(jī)上抓包可以獲取如圖5所示的信息。
通過(guò)137端口向本組所有用戶宣告,如圖6所示:
1.我 的 計(jì) 算 機(jī)名 是LSH-PC,IP是162.168.1.115,可以作為網(wǎng)上鄰居鄰居訪問(wèn)的客戶端
LSH-PC <00>唯一
2.我的計(jì)算機(jī)名是LSH-PC,IP是162.168.1.115,可 以對(duì)本組計(jì)算機(jī)提供服務(wù),讓其它計(jì)算機(jī)通過(guò)網(wǎng)上鄰居找到我。
LSH-PC <20>唯一
3.我的計(jì)算機(jī)名IP是162.168.1.115,已經(jīng)注冊(cè)到WORKGROUP這個(gè)工作組了。
WORKGROUP<00> 組
4.我的計(jì)算機(jī)名IP是162.168.1.115,可以作為WORKGROUP工作組的備用瀏覽服務(wù)器。
WORKGROUP<1E> 組
以上每個(gè)數(shù)據(jù)包都重復(fù)四次,以確保本組所有用戶收到信息。
通過(guò)138端口向本組所有用戶宣告:
圖5 在主機(jī)上抓包所獲信息
圖6 通過(guò)137端口顯示
圖7 發(fā)送2個(gè)數(shù)據(jù)包
圖8 發(fā)送4個(gè)數(shù)據(jù)包
1.我 的I P是162.168.1.115,以LSHPC作為響應(yīng)名稱, 請(qǐng)求在WORKGROUP組注冊(cè),發(fā)送2個(gè)數(shù)據(jù)包間隔2分鐘,如圖7所示。
2. 我 的 I P是162.168.1.115,以LSHPC作為服務(wù)器名,可以在WORKGROUP組作為候選瀏覽器提供服務(wù),發(fā)送4個(gè)數(shù)據(jù)包間隔2分鐘,如圖8所示。
計(jì)算機(jī)LSHPC: 我 的IP是162.168.1.115,以LSH-PC作 為 服務(wù)器名,現(xiàn)在還在WORKGROUP組。通過(guò)138端口向本組所有用戶宣告:每隔12分鐘廣播一次自己資源的存在,如圖9所示。
計(jì)算機(jī)LSB:我的 IP 是 162.168.1.112,以LSB作為服務(wù)器名,在WORKGROUP組作為主瀏覽器提供服務(wù);現(xiàn)在還在WORKGROUP組中擔(dān)任主瀏覽器工作。
計(jì)算機(jī)LSB周期性地向這個(gè)域主瀏覽器發(fā)送自已所管轄的列表,這個(gè)周期開(kāi)始是1分鐘、5分鐘、10分鐘,最后是15分鐘。如果3個(gè)周期內(nèi)沒(méi)有收到這個(gè)報(bào)文,域主瀏覽器也將它從自己的列表中去除。(通過(guò)138端口向本組所有用戶宣告:每隔15分鐘廣播一次自己資源的存在,如圖10所示。
我 的I P是162.168.1.112,以 LSB作為服務(wù)器名,現(xiàn)在還在WORKGROUP組作為主瀏覽器提供服務(wù)。通過(guò)138端口向本組所有用戶宣告:每隔12分鐘廣播一次自己資源的存在,如圖11所示。
注意:這個(gè)與普通客端發(fā)出的宣告數(shù)據(jù)包還是有區(qū)別的,一個(gè)是主機(jī)公告,一個(gè)是當(dāng)?shù)刂饕ǜ媪撩髁怂闹鳛g覽器身份。
當(dāng)作為主瀏覽器的主機(jī)LSB關(guān)機(jī)后,剩下的兩臺(tái)主機(jī)要進(jìn)行主瀏覽器的競(jìng)選,主要是通過(guò)向組內(nèi)發(fā)送廣播數(shù)據(jù)包,由于ZJ-YH操作系統(tǒng)是WINDOWS10高于WINDOWS7,所以取得優(yōu)先權(quán),擔(dān)起主瀏覽器的角色,從發(fā)送的數(shù)據(jù)包即可看出來(lái),如圖12所示。
圖9 廣播資源存在
圖10 廣播資源存在
圖11 廣播資源存在
圖12 主瀏覽器發(fā)送的數(shù)據(jù)包
圖13 遠(yuǎn)程N(yùn)ETBIOS名稱表
通 過(guò)NBTSTAT -a ZJ-YH命令可以列出遠(yuǎn)程N(yùn)ETBIOS名稱表,發(fā)現(xiàn)已經(jīng)多了兩項(xiàng)顯示主瀏覽的注冊(cè)選項(xiàng),如圖13所示。
以上是整個(gè)網(wǎng)絡(luò)鄰居從計(jì)算機(jī)的進(jìn)入到退出的整個(gè)運(yùn)行機(jī)制,弄清這些工作原理就不難解一些奇怪的現(xiàn)象:
1.為什么明明有的機(jī)子已經(jīng)關(guān)機(jī),卻還停留在“網(wǎng)上鄰居”里?它什么時(shí)候能消失?
分析:是瀏覽表中的內(nèi)容沒(méi)有更新 。如果一臺(tái)電腦非法關(guān)機(jī),它的名字可能會(huì)在網(wǎng)絡(luò)上保留40多分鐘,所以你現(xiàn)在點(diǎn)擊的可能是一臺(tái)非法關(guān)機(jī)的電腦。因?yàn)闉g覽列表的獲得不是通過(guò)訪問(wèn)其中每一臺(tái)機(jī)子得到的,很多時(shí)候網(wǎng)絡(luò)中的計(jì)算機(jī)并不能正確更新瀏覽列表。
當(dāng)一臺(tái)計(jì)算機(jī)正常關(guān)機(jī)時(shí),它會(huì)向網(wǎng)絡(luò)發(fā)出廣播宣告,使瀏覽主控服務(wù)器及時(shí)將它從瀏覽列表中刪除;而非正常關(guān)機(jī)后,瀏覽列表里仍會(huì)把該條目保持很長(zhǎng)一段時(shí)間,這就是我們?nèi)阅茉诰W(wǎng)絡(luò)鄰居里看到它的原因。
另外有時(shí)候,明明計(jì)算機(jī)已經(jīng)關(guān)了,但網(wǎng)上鄰居上卻仍然存在。這個(gè)是網(wǎng)上鄰居的正?,F(xiàn)象,也是瀏覽表沒(méi)有更新的原因。主瀏覽器的列表更新需要每隔一段時(shí)間進(jìn)行,這樣客戶機(jī)得到的瀏覽列表就不是實(shí)時(shí)更新的。比如客戶機(jī)非法關(guān)機(jī)后,在主瀏覽器的瀏覽列表里還會(huì)保存很長(zhǎng)一段時(shí)間,而實(shí)際上該計(jì)算機(jī)已經(jīng)無(wú)法訪問(wèn)了。
解決方案:如果要訪問(wèn)的計(jì)算機(jī)不在網(wǎng)上鄰居的列表里或在列表里卻無(wú)法通過(guò)NetBIOS名稱訪問(wèn),可以在地址欄里輸入“\IP地址”來(lái)訪問(wèn)。
2.為什么有的計(jì)算機(jī)名更改了,但舊名字還留在網(wǎng)上?
分析:除了承擔(dān)主瀏覽器和備份瀏覽器任務(wù)的計(jì)算機(jī)外,其他機(jī)子將向主瀏覽器周期性地發(fā)布通知,告知自己是可利用的資源。這個(gè)時(shí)間開(kāi)始是1分鐘、2分鐘、4分鐘、8分鐘,以后就是每12分鐘一次了。
如果這個(gè)機(jī)子關(guān)機(jī)了,主瀏覽器連續(xù)3個(gè)周期也就是36分鐘沒(méi)有收到它的消息,將認(rèn)定它不可用,并從瀏覽列表中刪掉它。但是它還留在備份瀏覽器的機(jī)子里,備份瀏覽器每隔15分鐘呼叫主瀏覽器一次以獲得更新的網(wǎng)絡(luò)資源列表,也就是說(shuō)不可用的資源最多要等到36+15=51分鐘后才會(huì)從網(wǎng)上徹底消失。這就是為什么有的計(jì)算機(jī)改了名,但舊名字依舊留在網(wǎng)上一段時(shí)間的原因。
3.在多個(gè)工作組的網(wǎng)上鄰居中是如何工作?
分析:在一個(gè)工作組里有一個(gè)主瀏覽器,那么在多個(gè)工作組、多個(gè)域甚至多個(gè)子網(wǎng)里昵?這就需要一個(gè)域主瀏覽器,每個(gè)工作組或域的主瀏覽器要周期性地向這個(gè)域主瀏覽器發(fā)送自已所管轄的列表,這個(gè)周期開(kāi)始是1分鐘,5次后是15分鐘。如果3個(gè)周期內(nèi)沒(méi)有收到這個(gè)報(bào)文,域主瀏覽器也將它從自己的列表中去除。
也就是說(shuō),當(dāng)一個(gè)工作組失效后,它還將在主列表中保留45分鐘。域主瀏覽器默認(rèn)為主域控制器,Windows XP Professional版本的計(jì)算機(jī)不能擔(dān)此重任。
作為網(wǎng)絡(luò)管理員,當(dāng)網(wǎng)上鄰居出現(xiàn)問(wèn)題時(shí),要一步步分析,看是暫時(shí)的還是競(jìng)選過(guò)程出了問(wèn)題。目前沒(méi)有辦法證明瀏覽列表是否完整,但有辦法發(fā)現(xiàn)某可用資源是否在列表里,甚至可以強(qiáng)迫開(kāi)始一次競(jìng)選。一般是沿著通信鏈的路徑從第一個(gè)應(yīng)該具有該資源的主瀏覽器查起,看它是否收到某計(jì)算機(jī)的通知報(bào)文。
4.瀏覽主控服務(wù)器是如何指定的?
第一,當(dāng)網(wǎng)絡(luò)中第一臺(tái)電腦開(kāi)機(jī)時(shí),向網(wǎng)絡(luò)中廣播選舉報(bào)文6-10次,查詢有沒(méi) 有 Master Browser,如果沒(méi)有則自己成為Master Browser。
第二,如果有的話則會(huì)比較操作系統(tǒng)的版本,采用Windows NT/2000/XP作為操作系統(tǒng)比Windows 9X/ME的電腦成為Browser的優(yōu)先級(jí)高;如果操作系統(tǒng)相同,則比較系統(tǒng)的版本,新版本優(yōu)先權(quán)高;如果系統(tǒng)和版本相同,則先開(kāi)機(jī)的優(yōu)先,成為Master Browser。
第三,當(dāng)一臺(tái)非Master Browser關(guān)機(jī)時(shí),它會(huì)主動(dòng)通知Master Browser,然后由Master Browser將它從網(wǎng)絡(luò)清單中清除。
第四,但是如果客戶機(jī)非正常關(guān)機(jī),則Master Browser不會(huì)將它從網(wǎng)絡(luò)清單中清除,最長(zhǎng)要經(jīng)過(guò)48分鐘后才會(huì)將它清除掉。
5.整個(gè)網(wǎng)絡(luò)瀏覽的過(guò)程是怎樣的?
當(dāng)一臺(tái)客戶端進(jìn)入網(wǎng)絡(luò)時(shí),如果它帶有服務(wù)器服務(wù)(啟用了文件及打印機(jī)共享)會(huì)向網(wǎng)絡(luò)廣播宣告自己的存在,而瀏覽主控服務(wù)器會(huì)取得這個(gè)宣告并將它放入自己維護(hù)的瀏覽列表中;而沒(méi)有在相應(yīng)協(xié)議上綁定文件及打印機(jī)共享的計(jì)算機(jī)則不會(huì)宣告,因而也就不會(huì)出現(xiàn)在網(wǎng)絡(luò)鄰居里了。
當(dāng)客戶計(jì)算機(jī)想獲得需要的網(wǎng)絡(luò)資源列表時(shí),首先會(huì)廣播發(fā)出瀏覽請(qǐng)求。瀏覽主控服務(wù)器收到請(qǐng)求后,如果請(qǐng)求的是本組的瀏覽列表,則直接將客戶所需的資源列表發(fā)回如果請(qǐng)求的是其它工作組的瀏覽列表,瀏覽主控服務(wù)器會(huì)根據(jù)本身Browsing List中的記錄找到相應(yīng)工作組的主控瀏覽器返回給用戶,用戶可從那里得到它想要的瀏覽列表。
LLMNR工作過(guò)程編輯:主機(jī)在自己的內(nèi)部名稱緩存中查詢名稱。如果在緩存中沒(méi)有找到了名稱,那么主機(jī)就會(huì)向自己配置的主DNS服務(wù)器發(fā)送查詢請(qǐng)求。
如果主機(jī)沒(méi)有收到回應(yīng)或收到了錯(cuò)誤信息,主機(jī)還會(huì)嘗試搜索配置的備用DNS服務(wù)器。如果主機(jī)沒(méi)有配置DNS服務(wù)器,或者如果在連接DNS服務(wù)器的時(shí)候沒(méi)有遇到錯(cuò)誤但失敗了,那么名稱解析會(huì)失敗,并轉(zhuǎn)為使用LLMNR。
主機(jī)通過(guò)用戶數(shù)據(jù)報(bào)協(xié)議(UDP)發(fā)送多播查詢,查詢主機(jī)名對(duì)應(yīng)的IP地址,這個(gè)查詢會(huì)被限制在本地子網(wǎng)(也就是所謂的鏈路局部)內(nèi)。
鏈路局部范圍內(nèi)每臺(tái)支持LLMNR,并且被配置為響應(yīng)傳入查詢的主機(jī)在收到這個(gè)查詢請(qǐng)求后,會(huì)將被查詢的名稱和自己的主機(jī)名進(jìn)行比較。
如果沒(méi)有找到匹配的主機(jī)名,那么計(jì)算機(jī)就會(huì)丟棄這個(gè)查詢。如果找到了匹配的主機(jī)名,這臺(tái)計(jì)算機(jī)會(huì)傳輸一條包含了自己IP地址的單播信息給請(qǐng)求該查詢的主機(jī)。