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