通過(guò)本文,,你可以了解到
◆何為137及445等端口
◆如何理解netbios的名稱解析
◆什么是SMB協(xié)議,?如何理解?
◆XP環(huán)境下三種訪問(wèn)方式分析
一,、基本服務(wù)和端口分析
為了方便實(shí)驗(yàn),,這里搭建了一個(gè)很簡(jiǎn)單的環(huán)境,基本配置如下圖:
![]() 為了一步步探究局域網(wǎng)訪問(wèn)的根源和真相,,我們用兩臺(tái)主機(jī)直連來(lái)模擬局域網(wǎng)環(huán)境,,盡管vista、win7已經(jīng)正式發(fā)布,,但目前主流的系統(tǒng)仍是windows XP。所以我這里準(zhǔn)備了XP1和XP2兩臺(tái)新裝的主機(jī),,為了不受干擾,,系統(tǒng)里基本沒(méi)有安裝什么軟件。
登陸到XP1上,,用netstat -a 這條命令查看一下系統(tǒng)所開(kāi)放的什么端口,,如下圖:
![]() 可以看到即使在最基本、最簡(jiǎn)單的環(huán)境下,,系統(tǒng)也會(huì)默認(rèn)開(kāi)放一些端口和服務(wù),,
第一列即為開(kāi)放端口的協(xié)議類型,在這里主要是tcp和udp,。
第二列是本地地址及服務(wù),,即從本機(jī)所開(kāi)放的端口或服務(wù)。它的基本表示形式是
【IP地址/計(jì)算機(jī)名稱】:【端口/服務(wù)】
第三列,,這里的foreign不能理解為【外國(guó)的】,,它的另一個(gè)含義為【外來(lái)的、不屬于本身的】,,在這里就表示除本機(jī)以外的其他地址和連接端口,,表現(xiàn)形式同上,。
第四列則為當(dāng)前端口連接的狀態(tài),listening 表示正在監(jiān)聽(tīng),。
可能有的朋友會(huì)問(wèn),,Local Address一列中為什么有的是服務(wù)名稱,有的是端口名呢?
這是因?yàn)檫@個(gè)命令默認(rèn)不對(duì)計(jì)算機(jī)名進(jìn)行IP解析,,在顯示端口時(shí),,如果有其對(duì)應(yīng)服務(wù)名稱,就顯示出來(lái),,沒(méi)有則直接顯示端口號(hào),。我們從這里也可以知道,并不是每個(gè)端口都會(huì)對(duì)應(yīng)一個(gè)服務(wù),,可能很多端口都是“無(wú)名氏”,。
我們可以通過(guò)netstat -an 來(lái)更改顯示方式。如下圖:
![]() 對(duì)比這兩個(gè)圖可以看出,,XP1一共對(duì)應(yīng)2個(gè)地址,127.0.0.1和0.0.0.0 ,。127開(kāi)頭屬于保留地址,作為系統(tǒng)內(nèi)部還回測(cè)試之用,。另一個(gè)應(yīng)該是在網(wǎng)卡上設(shè)定的IP,,因?yàn)榇藭r(shí)我沒(méi)有插網(wǎng)線,也沒(méi)有分配IP地址,,所以就會(huì)用0.0.0.0 代替,。對(duì)于上面列出的9個(gè)條目,我們挑幾個(gè)重點(diǎn)的分析一下,。
在上個(gè)圖中可以看到幾個(gè)熟悉的端口,,如135、445 等,。他們分別對(duì)應(yīng)epmap和microsoft-ds服務(wù),。epmap即end-point map簡(jiǎn)稱,從字面上理解就是終端映射服務(wù),,這個(gè)服務(wù)可以為dhcp,、dns和wins服務(wù)提供網(wǎng)絡(luò)定位。同時(shí),,135端口還可以用在RPC協(xié)議上,。microsoft-ds即Microsoft directory service ,我們可以通過(guò)這個(gè)服務(wù)在445端口上利用SMB協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)文件共享,。還有isakmp和ntp,,前者是ipsec體系中的一種主要協(xié)議,ntp為Network Time Protocol網(wǎng)絡(luò)校時(shí)協(xié)議,主要是校準(zhǔn)系統(tǒng)時(shí)間之用,。
后面2個(gè)服務(wù)和今天的話題關(guān)聯(lián)不大,,不多討論。
除了通過(guò)命令查看計(jì)算機(jī)連接情況外,,還可以通過(guò)一些工具來(lái)查看,。比如tcpview
![]() ![]() 盡管方法不同,但結(jié)果都是一樣的,。
OK,,現(xiàn)在我們給XP1和XP2加上IP,并接入網(wǎng)絡(luò),,然后再次查看連接情況,,如下圖:
![]() 其中紅框內(nèi)是新增的5個(gè)連接,就是說(shuō)在接通網(wǎng)絡(luò)后,,系統(tǒng)自動(dòng)運(yùn)行了幾個(gè)新的協(xié)議,,其中有非常重要的netbios三兄弟,即netbios-ssn,、netbios-ns和netbios-dgm,。
我們來(lái)依次熟悉一下吧:
Netbios-ssn:即Netbios Session Service,用于SMB協(xié)議提供文件共享和打印等服務(wù)
Netbios-ns:即Netbios Name Service,,實(shí)現(xiàn)netbios和IP地址的解析
Netbios-dgm:即Netbios Datagram,,通過(guò)它可以在兩臺(tái)主機(jī)之間相互發(fā)送datagram這類數(shù)據(jù)包。但是一種無(wú)連接服務(wù),,所以穩(wěn)定性并不是很高,。
我們可以看到,系統(tǒng)已經(jīng)做好了兩臺(tái)主機(jī)傳送數(shù)據(jù)和互訪的基本條件,。很明顯,,這些是基于netbios名的,而非主機(jī)名,。這一點(diǎn)需要多多留意,盡管netbios名和主機(jī)名差別很小,,但并非一個(gè)等同的概念,。
【有關(guān)兩者之間的區(qū)別,可以參考淺談netbios及其相關(guān)內(nèi)容這篇文章,,里面敘述的更詳細(xì)】
只顧著說(shuō)XP1這臺(tái)主機(jī)了,,XP2現(xiàn)在怎么樣了? 是否和XP1一樣呢,?
我們來(lái)看一下:
![]() 這個(gè)是主機(jī)XP2上的連接情況,,點(diǎn)擊是上面的【A】字符切換一下顯示模式,
![]() 和XP1是一模一樣的。
OK,到此為止,,基本端口和服務(wù)分析完畢,,現(xiàn)在我們開(kāi)始做一些關(guān)鍵性測(cè)試。
二,、應(yīng)用測(cè)試和分析
1,、ping測(cè)試
在訪問(wèn)局域網(wǎng)時(shí),大家習(xí)慣性會(huì)用到例如在地址欄輸入\\ip 或者\(yùn)\主機(jī)名等方式來(lái)訪問(wèn)對(duì)方的共享資源或者打印機(jī)等設(shè)備,,那我們就試一下在這個(gè)非常純凈的環(huán)境下,,看看訪問(wèn)是否順利,并逐一解決如果不順利,,會(huì)發(fā)生什么情況,?? 如何解決,?等問(wèn)題,。
XP1和XP2僅僅是分配的IP以及子網(wǎng)掩碼,其他的一概未設(shè)置,。我們首先ping一下,,看看這兩臺(tái)及是否能ping通,這也是我們的一貫思路,。
![]() 如上圖,,先用了hostname來(lái)驗(yàn)證本機(jī)身份,沒(méi)錯(cuò),,是XP1,。然后用ping一下XP2。從結(jié)果上可以看到ping是失敗的,。為什么呢,?從上圖似乎看不出什么問(wèn)題,反饋信息只是告訴你“請(qǐng)求超時(shí)”,,導(dǎo)致這個(gè)結(jié)果的原因有很多,,我們不能靠猜測(cè)來(lái)解決問(wèn)題,而是需要真憑實(shí)據(jù),!
分析這類問(wèn)題我們需要借助一些抓包工具,,我用的是wireshark1.1(前身叫ethereal)。在XP2上運(yùn)行wireshark,,并重復(fù)上面的動(dòng)作,,下面是抓包的情況:
![]() 一共有6條記錄,我們一一分析,。
第一條:顯然,,我們發(fā)出ping命令后,,因?yàn)樽畛鮔P1不知道XP2在哪里,所以就以自己為起點(diǎn),,向整個(gè)局域網(wǎng)發(fā)送廣播,,利用ARP協(xié)議來(lái)查找192.168.1.2的MAC地址。第一行的Source是XP1的網(wǎng)卡MAC地址(因?yàn)镸AC的前24位是廠商標(biāo)識(shí)符,,XP是一臺(tái)DELL筆記本,,所以會(huì)顯示DELL_OF),目的地則是廣播,,即該網(wǎng)段所有地址,,INFO中說(shuō)明,XP1正在查找XP2的MAC地址,。
第二條:這條是查詢的結(jié)果,,對(duì)方的MAC地址是Shenzhen_05(表示方法同上)。
第三條:因?yàn)閜ing是一個(gè)依靠向?qū)Ψ桨l(fā)送icmp的請(qǐng)求包,,并接受返回的reply包來(lái)判定網(wǎng)絡(luò)是否連通的小程序,。默認(rèn)情況下,一共發(fā)送4個(gè),,每個(gè)大小為固定的32byte,,從上面來(lái)看,數(shù)據(jù)包已經(jīng)到了XP2主機(jī)上,,但是并沒(méi)有得到XP2的回應(yīng),。體現(xiàn)在XP1就是Request timed out,每一條超時(shí)信息對(duì)應(yīng)1個(gè)ICMP的請(qǐng)求信息,。
第四,、五、六就是XP1的請(qǐng)求信息,。
那如何解決呢,?其實(shí)之所以沒(méi)有得到XP2的回應(yīng),是因?yàn)閷?duì)方開(kāi)啟了防火墻的原因,。在XP防火墻的高級(jí)設(shè)置里,,我們可以設(shè)置是否傳入回顯請(qǐng)求,只需要在下圖所示的地方修改一下即可,。
![]() 然后再次測(cè)試就可以了,。
2、共享訪問(wèn)問(wèn)題分析
由于這里沒(méi)有dns服務(wù)器來(lái)對(duì)將主機(jī)名解析為IP,,所以,目前XP1和XP2兩臺(tái)主機(jī)通訊只能依靠netbios名稱服務(wù),,即NBNS來(lái)完成,。這也是早期系統(tǒng)主要的局域網(wǎng)訪問(wèn)協(xié)議,比如win98等。
我們?cè)赬P1上測(cè)試一下,,用\\xp2 看是否能訪問(wèn)到XP2上的默認(rèn)共享文件,。
如下圖:
![]() 可以看到,無(wú)法訪問(wèn),。試一下IP方式
![]() 同樣失敗,。
這個(gè)應(yīng)該是大家平時(shí)在使用共享訪問(wèn)時(shí)常會(huì)出現(xiàn)一種情況,其實(shí)解決這個(gè)問(wèn)題很簡(jiǎn)單,,只要那XP1和XP2的默認(rèn)防火墻關(guān)掉,,問(wèn)題就解決了。
但,,實(shí)際上,,當(dāng)我們遇到問(wèn)題時(shí)似乎都習(xí)慣不去認(rèn)真思考問(wèn)題的原因。往往是通過(guò)一些通用的辦法來(lái)解決,,看似達(dá)到了效果,,其實(shí)無(wú)形中失去了學(xué)習(xí)知識(shí)的機(jī)會(huì),而就是這些知識(shí)點(diǎn)阻礙了你的進(jìn)步和提高,。比如系統(tǒng)中了很深的毒,,我們可以直接重裝,那個(gè)迅速,,效率高?。〉?,你知道這個(gè)是什么病毒,?怎么引起的?就這樣一刀切,,下次遇到同樣的問(wèn)題怎么辦,?這類的例子非常多,發(fā)生在我身上也不少,,我正努力糾正這個(gè)毛病,,也希望和大家共勉。
回到這個(gè)問(wèn)題上來(lái),,關(guān)閉防火墻就可以解決,,這就是所謂的通用辦法,當(dāng)然也是最有效的,。但,,這里我們就要認(rèn)真討論這個(gè)問(wèn)題的來(lái)龍去脈,否則這篇文章就不能冠以“精解”字眼了,。
要分析這個(gè)問(wèn)題,,有個(gè)概念要事先介紹一下,。那就是SMB(Server Message Block protocol)協(xié)議標(biāo)準(zhǔn),SMB工作原理就是讓Netbios和SMB在TCP/IP協(xié)議族上運(yùn)行,,并提供網(wǎng)絡(luò)上的訪問(wèn)與共享,。windows的網(wǎng)上鄰居就是以這個(gè)協(xié)議作為基礎(chǔ)的??赡苡械呐笥褧?huì)問(wèn),,怎么和netbios扯上關(guān)系了? 其實(shí)是這樣的,smb需要利用netbios的Name Services服務(wù)來(lái)解析出要訪問(wèn)的對(duì)象,,并利用netbios session服務(wù)與之建立會(huì)話,,既而完成共享及訪問(wèn)的任務(wù)。這些都是在windows下的實(shí)現(xiàn),,在其他系統(tǒng),,比如linux就有些區(qū)別了,SAMBA就是實(shí)現(xiàn)SMB標(biāo)準(zhǔn)的一種軟件,,可以實(shí)現(xiàn)從linux到windows之間的共享,。
之所以訪問(wèn)不成功,主要是因?yàn)榉阑饓ψ柚沽薙MB和netbios相關(guān)服務(wù)和協(xié)議的運(yùn)行,。我們?cè)囍诜阑饓ι洗蜷_(kāi)它們,,看看結(jié)果怎么樣。
我們知道,,SMB協(xié)議通過(guò)TCP的445端口來(lái)實(shí)現(xiàn),,因此我們需要在XP1的防火墻上打開(kāi)這個(gè)端口,這樣SMB協(xié)議才可以正常工作,。
![]() 輸入一個(gè)識(shí)別名稱及端口號(hào)445,,默認(rèn)已經(jīng)選中TCP類型,然后確定
![]() 咦,? 為什么會(huì)有這樣的提示呢,?我們以前肯定沒(méi)有添加過(guò)什么端口,自己檢查一下發(fā)現(xiàn)在這個(gè)窗口里有一項(xiàng)【文件和打印機(jī)共享】
![]() 雙擊打開(kāi)后,,發(fā)現(xiàn)TCP 445已經(jīng)列在其中,,原來(lái)如此。
![]() 所以剛才無(wú)法添加這個(gè)端口了,,這里也反應(yīng)了一個(gè)現(xiàn)象,, 就是即使這個(gè)端口沒(méi)有被使用,windows 防火墻也不允許額外添加相同端口,,此時(shí)我們將其啟用,。
![]() OK,SMB協(xié)議已經(jīng)打開(kāi),,我們可以進(jìn)行訪問(wèn)測(cè)試了,。
3,、三種共享訪問(wèn)方式測(cè)試及分析
為了得到更精確的結(jié)果,同時(shí)也是為了測(cè)試netbios的name services服務(wù),,我們把XP1和XP2的netbios名(默認(rèn)等同于主機(jī)名)修改成xp1bios和xp2bios,如圖: XP1:
![]() xp2:
![]() OK,,一切準(zhǔn)備就緒,,開(kāi)始測(cè)試。
在訪問(wèn)網(wǎng)上鄰居一般會(huì)用到3種形式,,從XP2上訪問(wèn)XP1的共享資源,。依次測(cè)試后結(jié)果如下:
1、基于UNC路徑的IP地址訪問(wèn),,即\\IP地址,,同時(shí)我們也撲捉一下當(dāng)前的數(shù)據(jù)包
![]() 已經(jīng)出現(xiàn)連接對(duì)話框,表明是可以訪問(wèn)到XP1的,,同時(shí)請(qǐng)大家注意訪問(wèn)方式
![]() 從協(xié)議情況來(lái)看,,SMB協(xié)議已經(jīng)可以正常工作,其中microsoft-DS的端口即為445,,SMB共享服務(wù)是需要通過(guò)microsoft-DS來(lái)實(shí)現(xiàn),。
2、基于UNC路徑的主機(jī)名訪問(wèn),,即\\主機(jī)名
![]() 采用主機(jī)名的訪問(wèn)方式,,結(jié)果失敗。
![]() 上圖是失敗時(shí)的抓包情況,,可以看到NBNS服務(wù)在解析XP1的主機(jī)名時(shí)生效,,原因很簡(jiǎn)單,因?yàn)镹BNS為netbios名的提供解析服務(wù),,解析對(duì)象不是主機(jī)名,。
3、基于UNC路徑的Netbios名訪問(wèn),,即\\Netbios名
![]() XP1bios也無(wú)法訪問(wèn)
![]() 總結(jié):之所以只有IP方式可行,,是因?yàn)镾MB可以利用TCP/IP協(xié)議來(lái)實(shí)現(xiàn)訪問(wèn),而其他兩種方式均需要一個(gè)解析過(guò)程才可以完成,,因此如果允許Netbios三個(gè)服務(wù)相關(guān)的137,、138、139這三個(gè)端口,,則可以利用netbios名訪問(wèn)對(duì)方,。
如下圖:
![]() 打開(kāi)4個(gè)端口。
![]() 通過(guò)xp2bios訪問(wèn)對(duì)方,。請(qǐng)大家注意第二個(gè)紅框,。是XP2bios\guest
而不是XP2\guest,,說(shuō)明這個(gè)是通過(guò)netbios名解析后并通過(guò)SMB協(xié)議訪問(wèn)的。
此時(shí)的抓包情況,,如下圖:
![]() 可以看到,,開(kāi)放137、138,、139及445端口后,,NBNS、SMB協(xié)議已經(jīng)正常運(yùn)行了,。
下節(jié)將重點(diǎn)講解XP共享訪問(wèn)及相關(guān)的排錯(cuò)知識(shí)
|
|