網絡概念知識和Linux命令連接(IP&子網掩碼&網關,DNS服務器,IP路由)

網絡知識php

摘錄好文章,融會貫通html

 

一個子網192.168.0.0/24node

  表示網段,這個網段的IP地址從192.168.0.1開始,到192.168.0.254結束(192.168.0.0和192.168.0.255有特殊含義,不能用做IP地址);子網掩碼是255.255.255.0。
  這個就是用CIDR(無類別域間路由選擇,Classless and Subnet Address Extensions and Supernetting))的形式表示的一個網段,或者說子網。
  上面的子網掩碼怎麼來的呢?其實關鍵就在「24」上。咱們知道IP地址是四個十進制數組成的,至關於32位二進制。
  用CIDR表示形式,後一個數字將這32位進行了間隔(以24爲例):前24位用"1"表示,後面8位用0表示,獲得一個二進制數: 11111111 11111111 11111111 00000000。 將其轉化爲十進制,就是:255.255.255.0了。linux

 

IP地址,子網掩碼、默認網關,DNS服務器是什麼意思?web

 

 (一)  問題解析

001.   問:  IP地址,子網掩碼,默認網關,DNS服務器,有什麼區別呀?我知道沒有IP地址就不能上網,我也知道沒設DNS就不能上外網,可它們都有什麼功能,有什麼區別呢?還有真奇怪,個人計算機沒設DNS,居然能上QQ,卻不能打開網頁,這是爲何呢>

答:  IP是32位二進制數據,一般以十進制表示,並以「.」分隔。IP地址是一種邏輯地地址,用來標識網絡中一個個主機,IP有惟一性,即每臺機器的IP在全世界是惟一的。 
DNS是域名服務器,用來解析域名的(域名與IP之間的解析),若是沒有這東西,你必須輸入網站的IP地址,有了DNS,你就能夠直接輸入網址 
     由於上QQ不須要有DNS(QQ只是一個客戶端程序,用不到DNS),只有瀏覽網頁(需輸入網址時)纔用到DNS。


(二)DNS服務器

     DNS是指:域名服務器(Domain Name Server)。在Internet上域名與IP地址之間是一一對應的,域名雖然便於人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工做稱爲域名解析,域名解析須要由專門的域名解析服務器來完成,DNS就是進行域名解析的服務器 。(詳見文化基礎P242)

                              
(三)IP地址

    電腦之間要實現網絡通訊,就必需要有一個合法的ip地址。IP地址=網絡地址+主機地址,(又稱:主機號和網絡號組成)ip地址的結構使咱們能夠在Internet上很方便的尋址。ip地址一般用更直觀的,以圓點分隔號的四個十進制數字表示,每一個數字從0到255,如某一臺主機的ip地址爲:128.20.4.1在局域網裏,一樣也須要ip地址,通常內網的ip地址是以192.168開頭的,這樣很容易區分公網和內網的ip地址


完全明白IP地址的含義 

   無論是學習網絡仍是上網,IP地址都是出現頻率很是高的詞.Windows系統中設置IP地址的界面如圖1所示,圖中出現了IP地址,子網掩碼,默認網關和DNS服務器這幾個須要設置的地方,只有正確設置,網絡才能通,那這些名詞都是什麼意思呢 學習IP地址的相關知識時還會遇到網絡地址,廣播地址,子網等概念,這些又是什麼意思呢 



圖1 

   要解答這些問題,先看一個平常生活中的例子.如圖2所示,住在北大街的住戶要能互相找到對方,必須各自都要有個門牌號,這個門牌號就是各家的地址,門牌號的表示方法爲:北大街+XX號.假如1號住戶要找6號住戶,過程是這樣的,1號在大街上喊了一聲:"誰是6號,請回答.",這時北大街的住戶都聽到了,但只有6號做了回答,這個喊的過程叫"廣播",北大街的全部用戶就是他的廣播範圍,假如北大街共有20個用戶,那廣播地址就是:北大街 21號.也就是說,北大街的任何一個用戶喊一聲能讓"廣播地址-1"個用戶聽到. 



圖2 

從這個例中能夠抽出下面幾個詞: 
街道地址:北大街,若是給該大街一個地址則用第一個住戶的地址-1,此例爲:北大街0號 
住戶的號:如1號,2號等. 
住戶的地址:街道地址+XX號,如北大街 1號,北大街 2號等 
廣播地址:最後一個住戶的地址+1,此例爲:北大街21號 

Internet網絡中,每一個上網的計算機都有一個像上述例子的地址,這個地址就是IP地址,是分配給網絡設備的門牌號,爲了網絡中的計算機可以互相訪問,IP地址=網絡地址+主機地址,圖1中的IP地址是192.168.100.1,這個地址中包含了不少含義.以下所示:

網絡地址(至關於街道地址): 192.168.100.0 
主機地址(至關於各戶的門號): 0.0.0.1 
IP地址(至關於住戶地址): 網絡地址+主機地址=192.168.100.1 
廣播地址: 192.168.100.255 

    這些地址是如何計算出來的呢 爲何計算這些地址呢 要想知道如何,先要明白一個道理,學習網絡的目的就是如何讓網絡中的計算機相互通信,也就是說要圍繞着"通"這個字來學習和理解網絡中的概念,而不是隻爲背幾個名詞.

    注:192.168.100.1是私有地址,是不能直接在Internet網絡中應用的,上Internet要轉爲公有地址,下面詳細說明. 

                        
                        一,爲何要計算網絡地址 

一句話就是讓網絡中的計算機可以相互通信.先看看最簡單的網絡,圖3中是用網線(交叉線)直接將兩臺計算機連起來.下面是幾種IP地址設置,看看在不一樣設置下網絡是通仍是不通. 

1,設置1號機的IP地址爲192.168.0.1子網掩碼爲255.255.255.0,2號機的IP地址爲192.168.0.200子網掩碼爲255.255.255.0,這來臺計算機就能正常通信.

2,若是1號機地址不變,將2號機的IP地址改成192.168.1.200子網掩碼仍是爲255.255.255.0,那這兩臺就沒法通信.

3,設置1號機的IP地址爲192.168.0.1子網掩碼爲255.255.255.192,2號機的IP地址爲192.168.0.200子網掩碼爲255.255.255.192,注意和第1種狀況的區別在於子網掩碼,1爲255.255.255.0本例是255.255.255.192。這臺計算機就不能正常通信. 



圖3 

第1種狀況能通是由於這兩臺計算機處在同一網絡192.168.0.0,因此能通,而2,3種狀況下兩臺計算機處在不一樣的網絡,因此不通

這裏先給個結論:用網線直接鏈接的計算機或是經過HUB(集線器)或普通交換機間接的計算機之間要可以相互通,計算機必需要在同一網絡,也就是說它們的網絡地址必須相同,並且主機地址必須不同.若是不在一個網絡就沒法通.這就像咱們上面舉的例子,同是北大街的住戶因爲街道名稱都是北大街,且各自的門牌號不一樣,因此可以相互找到對方. 計算網絡地址就是判斷網絡中的計算機在不在同一網絡,在就能通,不在就不能通.注意,這裏說的在不在同一網絡指的是IP地址而不是物理鏈接.那麼如何計算呢

                         
                          二,如何計算網絡地址 (子網掩碼)

咱們平常生活中的地址如:北大街1號,從字面上就能看出街道地址是北大街,而咱們從IP地址中卻難以看出網絡地址,要計算網絡地址,必須藉助咱們上邊提到過的子網掩碼. 
計算過程是這樣的,將IP地址和子網掩碼都換算成二進制,而後進行與運算,結果就是網絡地址.與運算以下所示,上下對齊,1位1位的算,1與1=1 ,其他組合都爲0 



圖4 

例如:計算IP地址爲:202.99.160.50子網掩碼是255.255.255.0的網絡地址步驟以下: 
1)將IP地址和子網掩碼分別換算成二進制 
202.99.160.50 換算成二進制爲 11001010·01100011·10100000·00110010 
255.255.255.0 換算成二進制爲 11111111·11111111·11111111·00000000 
2)將兩者進行與運算 




圖5 

3)將運算結果換算成十進制,這就是網絡地址. 
11001010·01100011·10100000·00000000換算成十進制就是202.99.160.0 

如今咱們就能夠解答上面三種狀況的通與不通的問題了. 

1,從下面運算結果能夠看出二臺計算機的網絡地址都爲192.168.0.0且IP地址不一樣,因此能夠通. 



圖6 

2,從下面運算結果能夠看出1號機的網絡地址爲192.168.0.0,2號機的網絡地址爲192.168.1.0 不在一個網絡,因此不通. 



圖7 

3,從下面運算結果能夠看出1號機的網絡地址爲192.168.0.0,2號機的網絡地址爲192.168.0.192 不在一個網絡,因此不通 



圖8 

相信看到這應該明白了爲什麼計算網絡地址和如何計算了。

                  感謝網友:聽雨http://new.qzone.qq.com/649329690/blog/9


                              (四)子網掩碼

    子網掩碼是用來判斷任意兩臺計算機的ip地址是否屬於同一子網絡的根據。最爲簡單的理解就是兩臺計算機各自的ip地址與子網掩碼進行and運算後,得出的結果是相同的,則說明這兩臺計算機是處於同一個子網絡上的,能夠進行直接的通信。(具體子網掩碼各位的含義待補充。)

                              (五)默認網關

什麼是默認網關 ?

若是搞清了什麼是網關,默認網關也就好理解了。就好像一個房間能夠有多扇門同樣,一臺主機能夠有多個網關。默認網關的意思是一臺主機若是找不到可用的網關,就把數據包發給默認指定的網關,由這個網關來處理數據包。如今主機使用的網關,通常指的是默認網關。(文化基礎P222 網關的概念) 

如何設置默認網關 

一臺電腦的默認網關是不能夠隨隨便便指定的,必須正確地指定,不然一臺電腦就會將數據包發給不是網關的電腦,從而沒法與其餘網絡的電腦通訊。默認網關的設定有手動設置和自動設置兩種方式。

                               1. 手動設置 

    手動設置用於電腦數量比較少、TCP/IP參數基本不變的狀況,好比只有幾臺到十幾臺電腦。由於這種方法須要在聯入網絡的每臺電腦上設置「默認網關」,很是費勁,一旦由於遷移等緣由致使必須修改默認網關的IP地址,就會給網管帶來很大的麻煩,因此不推薦使用。 

在Windows 9x中,設置默認網關的方法是在「網上鄰居」上右擊,在彈出的菜單中點擊「屬性」,在網絡屬性對話框中選擇「TCP/IP協議」,點擊「屬性」,在「默認網關」選項卡中填寫新的默認網關的IP地址就能夠了。 

須要特別注意的是:默認網關必須是電腦本身所在的網段中的IP地址,而不能填寫其餘網段中的IP地址。 

                              2. 自動設置 

自動設置就是利用DHCP(Dynamic Host Configuration Protocol, 動態主機配置協議)服務器來自動給網絡中的電腦分配IP地址、子網掩碼和默認網關 。這樣作的好處是一旦網絡的默認網關發生了變化時,只要更改了DHCP服務器中默認網關的設置,那麼網絡中全部的電腦均得到了新的默認網關的IP地址。這種方法適用於網絡規模較大、TCP/IP參數有可能變更的網絡。另一種自動得到網關的辦法是經過安裝代理服務器軟件(如MS Proxy)的客戶端程序來自動得到,其原理和方法和DHCP有類似之處。因爲篇幅所限,就再也不詳述了面試

 

 

上一篇博文貼出了慫QQ的文章<<IP地址,子網掩碼、默認網關,DNS服務器是什麼意思?>>. 在這裏, 我舉個小例子, 並貼出一個利用Windows的Routing and Remote Access Role來完成IP route.shell

 

好比說, 咱們有兩個子網:vim

  • 10.4.1.0/24
  • 10.4.2.0/24

 

第一個子網的IP用二進制的方式寫出來應該是0000 1010, 0000 0010, 0000 0001, 0000 0000. 斜槓後面的24是掩碼長度. 即, 第一個子網的掩碼是24個1, 跟着8個0, 1111 1111, 1111 1111, 1111 1111, 0000 0000. 即這個子網內能夠有2^8=256臺主機. 用慫QQ文章中舉的例子來說, 就是說這個子網的"街道號"是10.4.1.0; 這個街道能夠有256戶人家; 每家的門牌號爲從0000 0000到1111 1111的數字. 該子網只能有254臺主機, 由於要從256個數字中去掉兩個, 10.4.1.0是網段地址, 10.4.1.255是廣播地址.centos

第二個子網的"街道號"爲10.4.2.0, 即跟第一個子網不屬於一個街道, 在第一個子網內喊話(廣播), 第二個子網沒法聽不到. 因而就須要有個網段間被廣播的消息轉發的角色, 這個角色就是網關(gateway).數組

網關(Gateway)就是一個網絡鏈接到另外一個網絡的「關口」。網關實質上是一個網絡通向其餘網絡的IP地址。好比有網絡A和網絡B,網絡A的IP地址範圍爲「192.168.1.1~192. 168.1.254」,子網掩碼爲255.255.255.0;網絡B的IP地址範圍爲「192.168.2.1~192.168.2.254」,子網掩碼爲255.255.255.0。在沒有路由器的狀況下,兩個網絡之間是不能進行TCP/IP通訊的,即便是兩個網絡鏈接在同一臺交換機(或集線器)上,TCP/IP協議也會根據子網掩碼(255.255.255.0)斷定兩個網絡中的主機處在不一樣的網絡裏。而要實現這兩個網絡之間的通訊,則必須經過網關。若是網絡A中的主機發現數據包的目的主機不在本地網絡中,就把數據包轉發給它本身的網關,再由網關轉發給網絡B的網關,網絡B的網關再轉發給網絡B的某個主機。網絡B向網絡A轉發數據包的過程也是如此。 

 

當一個局域網中必須存在兩個以上網段時,分屬於不一樣網段內的主機彼此互不可見。爲了解決這個問題,就必須在不一樣的網段之間設置路由器。若是花費上萬元資金購買一臺路由器,僅僅用於鏈接局域網中的兩個網段,實在不值得。有什麼好的解決方案嗎?固然有,這就是Windows中的IP路由。

 

文章<<巧設IP路由 實現不一樣網段互通>>對具體步驟進行了詳細描述.

 

參考資料

====================

巧設IP路由 實現不一樣網段互通

http://hi.baidu.com/darkvisitor/blog/item/8763f22b74a493325243c15c.html

帖子以下,貌似也是轉的

巧設IP路由 實現不一樣網段互通

來源:IT168

    當一個局域網中必須存在兩個以上網段時,分屬於不一樣網段內的主機彼此互不可見。爲了解決這個問題,就必須在不一樣的網段之間設置路由器。若是花費上萬元資金購買一臺路由器,僅僅用於鏈接局域網中的兩個網段,實在不值得。有什麼好的解決方案嗎?固然有,這就是Windows中的IP路由。

    1、軟路由安裝前的準備

    一、在欲設置爲軟路由的計算機中安裝Windows 2000 Server。

    二、在欲設置爲軟路由的計算機中正確安裝兩塊網卡。

    三、在欲設置爲軟路由的計算機中安裝TCP/IP 協議,併爲兩塊網卡分別配置IP地址信息(例如,192.168.1.1/255.255.255.0和10.0.0.1/255.0.0.0),使兩塊網卡分別處於兩個不一樣的IP網段。

    2、軟路由的安裝

    以域用戶管理員的身份登陸,並執行下述操做。

    一、依次單擊「開始/程序/管理工具/路由和遠程訪問」,打開「路由和遠程訪問」窗口。

    二、單擊「操做」菜單,選擇「配置並啓用路由和遠程訪問」命令,運行「路由和遠程訪問服務器安裝嚮導」,單擊[下一步]。

    三、因爲咱們在這裏要安裝的是路由器,因此,選擇「網絡路由器」選項,並單擊[下一步]。

    四、一般狀況下,局域網計算機中只安裝TCP/IP協議和NetBEUI協議,並且只有TCP/IP協議擁有路由功能。AppleTalk協議僅用於蘋果計算機之間的通信。因爲TCP/IP協議已經顯示於「協議」列表之中,所以,選擇「是,全部可用的協議都在列表上」選項,並單擊[下一步]。

    五、本例中不安裝遠程訪問服務,所以,選擇「否」,不使用請求撥號訪問遠程網絡。單擊[下一步]。

    六、完成「路由和遠程訪問服務器安裝嚮導」,單擊[完成]。

    3、軟路由的設置

    一、依次單擊「開始/程序/管理工具/路由和遠程訪問」,打開「路由和遠程訪問」窗口。

    二、右鍵單擊要啓用路由的服務器名,而後單擊「屬性」,顯示「屬性」對話框。

    三、在「常規」選項卡上,選中「路由器」複選框,並選擇「僅用於局域網(LAN)路由選擇」選項,單擊[肯定]。

    四、在「路由和遠程訪問」窗口中,打開左側目錄樹「IP路由選擇」,右擊「常規」,並在快捷菜單中選擇「新路由選擇協議」,顯示「新路由選擇協議」對話框。

    五、在「路由選擇協議」列表中選中「用於Internet協議的RIP版本2」,並單擊[肯定]。注意,在中小型網絡中建議選擇RIP協議,在大型網絡中則選擇OSPF協議。

    六、在目錄樹中右擊「RIP」,並在快捷菜單中選擇「新接口」,顯示「用於Internet協議的RIP版本2的新接口」對話框。

    七、在「接口」列表框中選擇第一個網絡接口,即「本地鏈接」,單擊[肯定],顯示「RIP屬性」對話框。

    八、RIP屬性取系統默認值便可,單擊[肯定]。

    九、重複以上6至8操做,爲RIP添加第二個網絡接口,即「本地鏈接2」。

    4、客戶端的配置

    若欲實現192.168.1.0和10.0.0.0兩個IP地址段中計算機之間的互訪,在安裝並設置好IP路由後,還必須對客戶機作相應的設置。對於192.168.1.0地址段中的計算機,需將其默認網關設置爲192.168.1.1,而對於10.0.0.0地址段中的計算機,則需將其默認網關設置爲10.0.0.1。設置方法以下:

    一、依次打開「開始/控制面板/網絡」,打開「網絡」對話框。

    二、在「配置」選項卡的「已經安裝了下列網絡組件」列表中,選擇「TCP/IP」中的「QXCOMM QN408(3102A)PCI Fast Ethernet Adapter」(本例安裝的網卡爲全向QN408),單擊[屬性]按鈕,顯示「TCP/IP屬性」對話框。

    三、選擇「網關」選項卡,在「新網關」對話框中鍵入「192.168.1.1」(假如IP地址位於192.168.1.0~192.168.1.255 之間)或「10.0.0.1」(假如IP地址位於10.0.0.0~10..255.255.255之間),單擊[添加]。

    四、單擊[肯定],完成網關設置,並根據系統提示從新啓動計算機。網絡內的計算機都分別設置默認網關後,便可實現不一樣網段計算機之間的的互訪.

 

 

Linux經常使用網路指令 http://blog.csdn.net/simonzhao0536/article/details/8152730

 

Linux 的網路功能至關的強悍,一時之間咱們也沒法徹底的介紹全部的網路指令,這個章節主要的目的在介紹一些常見的網路指令而已。至於每一個指令的詳細用途將在後續伺服器架設時,依照指令的相關性來進行說明。固然,在這個章節的主要目的是在於將全部的指令彙整在一塊兒, 比較容易瞭解啦!這一章還有個至關重要的重點,那就是封包擷取的指令。若不熟悉也不要緊,先放着,所有讀完後再回來這一章仔細練習啊!

 


大標題的圖示5.1 網路參數設定使用的指令

任什麼時候刻若是你想要作好你的網路參數設定,包括IP 參數、路由參數與無線網路等等,就得要了解底下這些相關的指令才行!其中以ifconfig 及route 這兩支指令算是較重要的喔!^_^!固然,比較新鮮的做法,能夠使用ip 這個彙整的指令來設定IP 參數啦!

  • ifconfig    :查詢、設定網路卡與IP網域等相關參數;
  • ifup, ifdown:這兩個檔案是script,透過更簡單的方式來啓動網路介面;
  • route       :查詢、設定路由表(route table)
  • ip          :複合式的指令,能夠直接修改上述提到的功能;


小標題的圖示 5.1.1 手動/自動設定與啓動/關閉IP 參數: ifconfig, ifup, ifdown

這三個指令的用途都是在啓動網路介面,不過, ifup 與ifdown 僅能就/etc/sysconfig/network-scripts 內的ifcfg-ethX (X 爲數字) 進行啓動或關閉的動做,並不能直接修改網路參數,除非手動調整ifcfg-ethX 檔案才行。至於ifconfig 則能夠直接手動給予某個介面IP 或調整其網路參數!底下咱們就分別來談一談!


  • ifconfig

ifconfig 主要是能夠手動的啓動、觀察與修改網路介面的相關參數,能夠修改的參數不少啊,包括IP 參數以及MTU 等等均可以修改,他的語法以下:

[root@www ~]# ifconfig {interface} {up|down}   <==觀察與啓動介面 [root@www ~]# ifconfig interface {options} <==設定與修改介面 選項與參數: interface:網路卡介面代號,包括eth0, eth1, ppp0 等等 options :能夠接的參數,包括以下: up, down :啓動(up) 或關閉(down) 該網路介面(不涉及任何參數) mtu :能夠設定不一樣的MTU 數值,例如mtu 1500 (單位爲byte) netmask :就是子遮罩網路; broadcast:就是廣播位址啊! #範例一:觀察全部的網路介面(直接輸入ifconfig) [root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2555 errors:0 dropped:0 overruns:0 frame:0 TX packets:70 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB) 

通常來講,直接輸入ifconfig就會列出目前已經被啓動的卡,不論這個卡是否有給予IP,都會被顯示出來。而若是是輸入ifconfig eth0,則僅會秀出這張介面的相關資料,而無論該介面是否有啓動。因此若是你想要知道某張網路卡的Hardware Address,直接輸入『 ifconfig "網路介面代號" 』便可喔!^_^!至於上表出現的各項資料是這樣的(資料排列由上而下、由左而右):

  • eth0:就是網路卡的代號,也有lo這個loopback ;
  • HWaddr:就是網路卡的硬體位址,俗稱的MAC是也;
  • inet addr:IPv4的IP位址,後續的Bcast, Mask分別表明的是Broadcast與netmask喔!
  • inet6 addr:是IPv6的版本的IP ,咱們沒有使用,因此略過;
  • MTU:就是第二章談到的 MTU啊!
  • RX:那一行表明的是網路由啓動到目前爲止的封包接收狀況, packets表明封包數、errors表明封包發生錯誤的數量、 dropped表明封包因爲有問題而遭丟棄的數量等等
  • TX:與RX相反,爲網路由啓動到目前爲止的傳送狀況;
  • collisions:表明封包碰撞的狀況,若是發生太屢次,表示你的網路情況不太好;
  • txqueuelen:表明用來傳輸資料的緩衝區的儲存長度;
  • RX bytes, TX bytes:總接收、傳送的位元組總量

透過觀察上述的資料,大體上能夠了解到你的網路狀況,尤爲是那個RX, TX 內的error 數量, 以及是否發生嚴重的collision 狀況,都是須要注意的喔!^_^

#範例二:暫時修改網路介面,給予eth0一個192.168.100.100/24 ​​的參數 
[root@www ~]# ifconfig eth0 192.168.100.100 #若是不加任何其餘參數,則系統會依照該IP所在的class範圍,自動的計算出 # netmask 以及network, broadcast 等IP 參數,若想改其餘參數則: [root@www ~]# ifconfig eth0 192.168.100.100 \ > netmask 255.255.255.128 mtu 8000 #設定不一樣參數的網路介面,同時設定MTU的數值! [root@www ~]# ifconfig eth0 mtu 9000 #僅修改 ​​該介面的MTU數值,其餘的保持不動! [root@www ~]# ifconfig eth0:0 192.168.50.50 #仔細看那個介面是eth0:0喔!那就是在該實體網卡上,再模擬一個網路介面, # 亦便是在一張網路卡上面設定多個IP 的意思啦! [root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.100.100 Bcast:192.168.100.127 Mask:255.255.255.128 inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 RX packets:2555 errors:0 dropped:0 overruns:0 frame:0 TX packets:70 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB) eth0:0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 #仔細看,是否與硬體有關的資訊都相同啊!沒錯!由於是同一張網卡嘛! # 那若是想要將剛剛創建的那張eth0:0 關閉就好,不影響原有的eth0 呢? [root@www ~]# ifconfig eth0:0 down #關掉eth0:0這個介面。那若是想用預設值啓動eth1:『ifconfig eth1 up』便可達成 #範例三:將手動的處理所有取消,使用原有的設定值重建網路參數: [root@www ~]# /etc/init.d/network restart #剛剛設定的資料所有失效,會以ifcfg- ethX的設定爲主! 

使用ifconfig能夠暫時手動來設定或修改某個介面卡的相關功能,而且也能夠透過eth0:0這種虛擬的網路介面來設定好一張網路卡上面的多個IP喔!手動的方式真是簡單啊!而且設定錯誤也不打緊,由於咱們能夠利用 /etc/init.d/network restart 來從新啓動整個網路介面,那麼以前手動的設定資料會所有都失效喔!另外,要啓動某個網路介面,但又不讓他具備IP參數時,直接給他ifconfig eth0 up便可!這個動做常常在無線網卡當中會進行,由於咱們必需要啓動無線網卡讓他去偵測AP存在與否啊!


  • ifup, ifdown

即時的手動修改一些網路介面參數,能夠利用ifconfig 來達成,若是是要直接以設定檔, 亦便是在/etc/sysconfig/network-scripts 裏面的ifcfg-ethx 等檔案的設定參數來啓動的話,那就得要透過ifdown 或ifup 來達成了。

[root@www ~]# ifup {interface} 
[root@www ~]# ifdown {interface} [root@www ~]# ifup eth0 

ifup與ifdown真是太簡單了!這兩支程式實際上是script而已,他會直接到/etc/sysconfig/network-scripts目錄下搜尋對應的設定檔,例如ifup eth0時,他會找出ifcfg- eth0這個檔案的內容,而後來加以設定。關於ifcfg-eth0的設定則請參考第四章的說明。

不過,因爲這兩支程式主要是搜尋設定檔(ifcfg-ethx)來進行啓動與關閉的,因此在使用前請肯定ifcfg-ethx是否真的存在於正確的目錄內,不然會啓動失敗喔!另外,若是以ifconfig eth0 ....來設定或者是修改了網路介面後,那就沒法再以ifdown eth0的方式來關閉了!由於ifdown會分析比對目前的網路參數與ifcfg-eth0是否相符,不符的話,就會放棄該次動做。所以,使用ifconfig修改完畢後,應該要以ifconfig eth0 down纔可以關閉該介面喔!


小標題的圖示5.1.2 路由修改: route

咱們在第二章網路基礎的時候談過關於路由的問題,兩部主機之間必定要有路由纔可以互通TCP/IP的協定,不然就沒法進行連線啊!通常來講,只要有網路介面,該介面就會產生一個路由,因此咱們安裝的主機有一個eth0的介面,看起來就會是這樣:

[root@www ~]# route [-nee] 
[root@www ~]# route add [-net|-host] [網域或主機] netmask [mask] [gw|dev] [root@www ~]# route del [-net|-host] [網域或主機] netmask [mask] [gw|dev] 觀察的參數: -n :不要使用通信協定或主機名稱,直接使用IP 或port number; -ee :使用更詳細的資訊來顯示 增長(add) 與刪除(del) 路由的相關參數: -net :表示後面接的路由爲一個網域; -host :表示後面接的爲鏈接到單部主機的路由; netmask :與網域有關,能夠設定netmask 決定網域的大小; gw :gateway 的簡寫,後續接的是IP 的數值喔,與dev 不一樣; dev :若是隻是要指定由那一塊網路卡連線出去,則使用這個設定,後面接eth0 等 #範例一:單純的觀察路由狀態 [root@www ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 [root@www ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1002 0 0 eth0 default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 

由上面的例子當中仔細觀察route與route -n的輸出結果,你能夠發現有加-n參數的主要是顯示出IP ,至於使用route而已的話,顯示的則是『主機名稱』喔!也就是說,在預設的狀況下, route會去找出該IP的主機名稱,若是找不到呢?就會顯示的鈍鈍的(有點小慢),因此說,鳥哥一般都直接使用route -n啦!由上面看起來,咱們也知道default = 0.0.0.0/0.0.0.0,而上面的資訊有哪些你必需要知道的呢?

  • Destination, Genmask:這兩個玩意兒就是分別是network與netmask啦!因此這兩個咚咚就組合成爲一個完整的網域囉!

  • Gateway:該網域是經過哪一個gateway鏈接出去的?若是顯示0.0.0.0表示該路由是直接由本機傳送,亦便可以透過區域網路的MAC直接傳訊;若是有顯示IP的話,表示該路由須要通過路由器(通信閘)的幫忙纔可以傳送出去。

  • Flags:總共有多個旗標,表明的意義以下:
    • U (route is up):該路由是啓動的;
    • H (target is a host):目標是一部主機(IP) 而非網域;
    • G (use gateway):須要透過外部的主機(gateway) 來轉遞封包;
    • R (reinstate route for dynamic routing):使用動態路由時,恢復路由資訊的旗標;
    • D (dynamically installed by daemon or redirect):已經由服務或轉port 功能設定爲動態路由
    • M (modified from routing daemon or redirect):路由已經被修改了;
    • ! (reject route):這個路由將不會被接受(用來抵擋不安全的網域!)
  • Iface:這個路由傳遞封包的介面。

此外,觀察一下上面的路由排列順序喔,依序是由小網域(192.168.1.0/24是Class C),逐漸到大網域(169.254.0.0/16 Class B)最後則是預設路由( 0.0.0.0/0.0.0.0)。而後當咱們要判斷某個網路封包應該如何傳送的時候,該封包會經由這個路由的過程來判斷喔!舉例來講,我上頭僅有三個路由,若我有一個傳往192.168.1.20的封包要傳遞,那首先會找192.168.1.0/24這個網域的路由,找到了!因此直接由eth0傳送出去;

若是是傳送到Yahoo 的主機呢?Yahoo 的主機IP 是119.160.246.241,咱們經過判斷1)不是192.168.1.0/24, 2)不是169.254.0.0/16 結果到達3)0/0 時,OK!傳出去了,透過eth0 將封包傳給192.168.1.254 那部gateway 主機啊!因此說,路由是有順序的。

所以當你重複設定多個一樣的路由時, 例如在你的主機上的兩張網路卡設定爲相同網域的IP 時,會出現什麼狀況?會

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 

也就是說,因爲路由是依照順序來排列與傳送的,因此不論封包是由那個介面(eth0, eth1)所接收,都會由上述的eth0傳送出去,因此,在一部主機上面設定兩個相同網域的IP自己沒有什麼意義!有點畫蛇添足就是了。除非是相似虛擬機器(Xen, VMware等軟體)所架設的多主機時,纔會有這個必要~

#範例二:路由的增長與刪除 
[root@www ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0 #上面這個動做能夠刪除掉169.254.0.0/16這個網域! # 請注意,在刪除的時候,須要將路由表上面出現的資訊都寫入 # 包括netmask , dev 等等參數喔!注意注意 [root@www ~]# route add -net 192.168.100.0 \ > netmask 255.255.255.0 dev eth0 #透過route add來增長一個路由!請注意,這個路由的設定必需要可以與你的網路互通。 # 舉例來講,若是我下達底下的指令就會顯示錯誤: # route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254 # 由於個人主機內僅有192.168.1.11 這個IP ,因此不能直接與192.168.200.254 # 這個網段直接使用MAC 互通!這樣說,能夠理解嗎? [root@www ~]# route add default gw 192.168.1.250 #增長預設路由的方法!請注意,只要有一個預設路由就夠了喔! # 一樣的,那個192.168.1.250 的IP 也須要能與你的LAN 溝通才行! # 在這個地方若是你隨便設定後,記得使用底下的指令從新設定你的網路 # /etc/init.d/network restart 

若是是要進行路由的刪除與增長,那就得要參考上面的例子了,其實,使用man route裏面的資料就很豐富了!仔細查閱一下囉!你只要記得,當出現『SIOCADDRT: Network is unreachable』這個錯誤時,確定是因爲gw後面接的IP沒法直接與你的網域溝通(Gateway並不在你的網域內),因此,趕忙檢查一下是否輸入錯誤啊!

Tips: 
通常來講,鳥哥若是接觸到一個新的環境內的主機,在不想要更動原系統的設定檔狀況下,而後預計使用本書的網路環境設定時,手動的處理就變成:『ifconfig eth0 192.168.1.100; route add default gw 192.168.1.254』這樣就搞定了!直接聯網與測試。等到完成測試後,再給她/etc/init.d/network restart恢復原系統的網路便可。
鳥哥的圖示

小標題的圖示5.1.3 網路參數綜合指令: ip

ip 是個指令喔!並非那個TCP/IP 的IP 啦!這個ip 指令的功能可多了!基本上,他就是整合了ifconfig 與route 這兩個指令囉~不過, ip 能夠達成的功能卻又多更多!真是個至關厲害的指令。若是你有興趣的話,請自行vi /sbin/ifup ,就知道整個ifup 就是利用ip 這個指令來達成的。好了,如何使用呢?讓咱們來瞧一瞧先!

[root@www ~]# ip [option] [動做] [指令] 
選項與參數: option :設定的參數,主要有: -s :顯示出該裝置的統計數據(statistics),例如總接受封包數等; 動做:亦便是能夠針對哪些網路參數進行動做,包括有: link :關於裝置(device) 的相關設定,包括MTU, MAC 位址等等 addr/address :關於額外的IP 協定,例如多IP 的達成等等; route :與路由有關的相關設定 

由上面的語法咱們能夠知道, ip 除了能夠設定一些基本的網路參數以外,還可以進行額外的IP 協定,包括多IP 的達成,真是太完美了!底下咱們就分三個部分(link, addr, route) 來介紹這個ip 指令吧!


  • 關於裝置介面(device) 的相關設定: ip link

ip link 能夠設定與裝置(device) 有關的相關參數,包括MTU 以及該網路介面的MAC 等等,固然也能夠啓動(up) 或關閉(down) 某個網路介面啦!整個語法是這樣的:

[root@www ~]# ip [-s] link show   <==單純的查閱該裝置相關的資訊 [root@www ~]# ip link set [device] [動做與參數] 選項與參數: show:僅顯示出這個裝置的相關內容,若是加上-s 會顯示更多統計數據; set :能夠開始設定項目, device 指的是eth0, eth1 等等介面代號; 動做與參數:包括有底下的這些動做: up|down :啓動(up) 或關閉(down) 某個介面,其餘參數使用預設的乙太網路; address :若是這個裝置能夠更改MAC 的話,用這個參數修改! name :給予這個裝置一個特殊的名字; mtu :就是最大傳輸單元啊! #範例一:顯示出全部的介面資訊 [root@www ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 08:00:27:2a:30:14 brd ff:ff:ff:ff:ff:ff 4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN link/sit 0.0.0.0 brd 0.0.0.0 [root@www ~]# ip -s link show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 314685 3354 0 0 0 0 TX: bytes packets errors dropped carrier collsns 2720​​0 199 0 0 0 0 

使用ip link show 能夠顯示出整個裝置介面的硬體相關資訊,如上所示,包括網卡位址(MAC)、MTU等等, 比較有趣的應該是那個sit0 的介面了,那個sit0 的介面是用在IPv4 及IPv6 的封包轉換上的, 對於咱們僅使用IPv4 的網路是沒有做用的。lo 及sit0 都是主機內部所自行設定的。而若是加上-s 的參數後,則這個網路卡的相關統計資訊就會被列出來, 包括接收(RX) 及傳送(TX) 的封包數量等等,詳細的內容與ifconfig 所輸出的結果相同的。

#範例二:啓動、關閉與設定裝置的相關資訊 
[root@www ~]# ip link set eth0 up #啓動eth0這個裝置介面; [root@www ~]# ip link set eth0 down #阿就關閉啊!簡單的要命~ [root@www ~]# ip link set eth0 mtu 1000 #更改MTU的值,達到1000 bytes,單位就是bytes啊! 

更新網路卡的MTU 使用ifconfig 也能夠達成啊!沒啥了不得,不過,若是是要更改『網路卡代號、 MAC 位址的資訊』的話,那可就得使用ip 囉~不過,設定前可能得要先關閉該網路卡,不然會不成功。以下所示:

#範例三:修改網路卡代號、MAC等參數 
[root@www ~]# ip link set eth0 name vbird SIOCSIFNAME: Device or resource busy # 由於該裝置目前是啓動的,因此不能這樣作設定。你應該要這樣作: [root@www ~]# ip link set eth0 down <==關閉介面 [root@www ~]# ip link set eth0 name vbird <==從新設定 [root@www ~]# ip link show <==觀察一下 2: vbird : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff #怕了吧!連網路卡代號均可以改變!不過,玩玩後記得改回來啊! # 由於咱們的ifcfg-eth0 仍是使用本來的裝置代號!避免有問題,要改回來 [root@www ~]# ip link set vbird name eth0 <==介面改回來 [root@www ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa [root@www ~]# ip link show eth0 #若是你的網路卡支援硬體位址(MAC)能夠更改的話,上面這個動做就能夠更改 # 你的網路卡位址了!厲害吧!不過,仍是那句老話,測試完以後請馬上改回來啊! 

在這個裝置的硬體相關資訊設定上面,包括MTU, MAC 以及傳輸的模式等等,均可以在這裏設定。有趣的是那個address 的項目,那個項目後面接的但是硬體位址(MAC) 而不是IP 喔!很容易搞錯啊!切記切記!更多的硬體參數能夠使用man ip 查閱一下與ip link 有關的設定。


  • 關於額外的IP 相關設定: ip address

若是說ip link是與OSI七層協定 的第二層資料連階層有關的話,那麼ip address (ip addr)就是與第三層網路層有關的參數啦!主要是在設定與IP有關的各項參數,包括netmask, broadcast等等。

[root@www ~]# ip address show    <==就是查閱IP參數啊! [root@www ~]# ip address [add|del] [IP參數] [dev裝置名] [相關參數] 選項與參數: show :單純的顯示出介面的IP 資訊啊; add|del :進行相關參數的增長(add) 或刪除(del) 設定,主要有: IP 參數:主要就是網域的設定,例如192.168.100.100/24​​ 之類的設定喔; dev :這個IP 參數所要設定的介面,例如eth0, eth1 等等; 相關參數:主要有底下這些: broadcast:設定廣播位址,若是設定值是+ 表示『讓系統自動計算』 label :亦便是這個裝置的別名,例如eth0:0 就是了! scope :這個介面的領域,一般是這幾個大類: global :容許來自全部來源的連線; site :僅支援IPv6 ,僅容許本主機的連線; link :僅容許本裝置自我連線; host :僅容許本主機內部的連線; 因此固然是使用global 囉!預設也是global 啦! #範例一:顯示出全部的介面之IP參數: [root@www ~]# ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24​​ brd 192.168.1.255 scope global eth0 inet6 fe80::a00:27ff:fe71:85bd/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 08:00:27:2a:30:14 brd ff:ff:ff:ff:ff:ff 4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN link/sit 0.0.0.0 brd 0.0.0.0 

看到上面那個特殊的字體嗎?沒錯!那就是IP 參數啦!也是ip address 最主要的功能。底下咱們進一步來新增虛擬的網路介面試看看:

#範例二:新增一個介面,名稱假設爲eth0:vbird 
[root@www ~]# ip address add 192.168.50.50/24 broadcast + \ > dev eth0 label eth0:vbird [root@www ~]# ip address show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24​​ brd 192.168.1.255 scope global eth0 inet 192.168.50.50/24 brd 192.168.50.255 scope global eth0:vbird inet6 fe80::a00:27ff:fe71:85bd/64 scope link valid_lft forever preferred_lft forever #看到上面的特殊字體了吧?多出了一行新的介面,且名稱是eth0:vbird # 至於那個broadcast + 也能夠寫成broadcast 192.168.50.255 啦! [root@www ~]# ifconfig eth0:vbird Link encap:Ethernet HWaddr 08:00:27:71:85:BD inet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 # 若是使用ifconfig 就可以看到這個怪東西了!可愛吧!^_^ #範例三:將剛剛的介面刪除 [root@www ~]# ip address del 192.168.50.50/24 dev eth0 #刪除就比較簡單啊!^_^ 

  • 關於路由的相關設定: ip route

這個項目固然就是路由的觀察與設定囉!事實上, ip route 的功能幾乎與route 這個指令差很少,可是,他還能夠進行額外的參數設計,例如MTU 的規劃等等,至關的強悍啊!

[root@www ~]# ip route show   <==單純的顯示出路由的設定而已 [root@www ~]# ip route [add|del] [IP或網域] [via gateway] [dev裝置] 選項與參數: show :單純的顯示出路由表,也能夠使用list ; add|del :增長(add) 或刪除(del) 路由的意思。 IP或網域:可以使用192.168.50.0/24 之類的網域或者是單純的IP ; via :從那個gateway 出去,不必定須要; dev :由那個裝置連出去,這就須要了! mtu :能夠額外的設定MTU 的數值喔! #範例一:顯示出目前的路由資料 [root@www ~]# ip route show 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 169.254.0.0/16 dev eth0 scope link metric 1002 default via 192.168.1.254 dev eth0 

如上表所示,最簡單的功能就是顯示出目前的路由資訊,其實跟route 這個指令相同啦!指示必需要注意幾個小東西:

  • proto:此路由的路由協定,主要有redirect, kernel, boot, static, ra 等, 其中kernel 指的是直接由核心判斷自動設定。
  • scope:路由的範圍,主要是link ,亦便是與本裝置有關的直接連線。

再來看一下如何進行路由的增長與刪除吧!

#範例二:增長路由,主要是本機直接可溝通的網域 
[root@www ~]# ip route add 192.168.5.0/24 dev eth0 #針對本機直接溝通的網域設定好路由,不須要透過外部的路由器 [root@www ~]# ip route show 192.168.5.0/24 dev eth0 scope link ....(如下省略).... #範例三:增長能夠通往外部的路由,需透過router喔! [root@www ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0 [root@www ~]# ip route show 192.168.5.0/24 dev eth0 scope link ....(其餘省略).... 192.168.10.0/24 via 192.168.5.100 dev eth0 # 仔細看喔,由於我有192.168.5.0/24 的路由存在(個人網卡直接聯繫), # 因此才能夠將192.168.10.0/24 的路由丟給192.168.5.100 # 那部主機來幫忙傳遞喔!與以前提到的route 指令是同樣的限制! #範例四:增長預設路由 [root@www ~]# ip route add default via 192.168.1.254 dev eth0 #那個192.168.1.254就是個人預設路由器(gateway)的意思啊!^_^ # 真的記得,只要一個預設路由就OK ! #範例五:刪除路由 [root@www ~]# ip route del 192.168.10.0/24 [root@www ~]# ip route del 192.168.5.0/24 

事實上,這個ip 的指令實在是太博大精深了!剛接觸Linux 網路的朋友,可能會看到有點暈~ 沒關係啦!你先會使用ifconfig, ifup , ifdown 與route 便可, 等之後有經驗了以後,再繼續回來玩ip 這個好玩的指令吧!^_^ 有興​​趣的話,也能夠自行參考ethtool 這個指令喔!(man ethtool)。


小標題的圖示5.1.4 無線網路: iwlist, iwconfig

這兩個指令你必需要有無線網卡纔可以進行喔!這兩個指令的用途是這樣的:

  • iwlist:利用無線網卡進行無線AP 的偵測與取得相關的資料;
  • iwconfig:設定無線網卡的相關參數。

這兩個指令的應用咱們在第四章裏面的無線網卡設定談了不少了,因此這裏咱們再也不詳談,有興趣的朋友應該先使用man iwlist與man iwconfig瞭解一下語法,而後再到前一章的無線網路小節查一查相關的用法,就瞭解了啦!^_^


小標題的圖示5.1.5 手動使用DHCP 自動取得IP 參數: dhclient

若是你是使用DHCP 協定在區域網路內取得IP 的話,那麼是否必定要去編輯ifcfg-eth0 內的BOOTPROTO 呢?嘿嘿!有個更快速的做法,那就是利用dhclient 這個指令~由於這個指令纔是真正發送dhcp 要求工做的程式啊!那要如何使用呢?很簡單!若是不考慮其餘的參數,使用底下的方法便可:

[root@www ~]# dhclient eth0

夠簡單吧!這樣就能夠馬上叫咱們的網路卡以dhcp 協定去嘗試取得IP 喔!


大標題的圖示5.2 網路偵錯與觀察指令

在網路的互助論壇中,最常聽到的一句話就是:『高手求救!個人Linux不能連上網路了!』個人天吶!不能上網路的緣由多的很!而要徹底搞懂也不是一件簡單的事情呢!不過,事實上咱們能夠本身使用測試軟體來追蹤可能的錯誤緣由,而不少的網路偵測指令其實在Linux裏頭已經都預設存在了,只要你好好的學一學基本的偵測指令,那麼一些朋友在告訴你如何偵錯的時候,你應該就馬上能夠知道如何來搞定他囉!

其實咱們在第四章談到的五個檢查步驟已是至關詳細的網路偵錯流程了!只是還有些重要的偵測指令也得要來了解一下才好!


小標題的圖示 5.2.1 兩部主機兩點溝通: ping

這個ping是很重要的指令,ping主要透過ICMP封包 來進行整個網路的情況報告,固然啦,最重要的就是那個ICMP type 0, 8這兩個類型,分別是要求回報與主動回報網路狀態是否存在的特性。要特別注意的是, ping仍是須要透過 IP封包來傳送ICMP封包的,而IP封包裏面有個至關重要的TTL屬性,這是很重要的一個路由特性,詳細的IP與ICMP表頭資料請參考第二章網路基礎的詳細介紹。

[root@www ~]# ping [選項與參數] IP 
選項與參數: -c 數值:後面接的是執行ping 的次數,例如-c 5 ; -n :在輸出資料時不進行IP 與主機名稱的反查,直接使用IP 輸出(速度較快); -s 數值:發送出去的ICMP 封包大小,預設爲56bytes,不過你能夠放大此一數值; -t 數值:TTL 的數值,預設是255,每通過一個節點就會少一; -W 數值:等待迴應對方主機的秒數。 -M [do|dont] :主要在偵測網路的MTU 數值大小,兩個常見的項目是: do :表明傳送一個DF (Don't Fragment) 旗標,讓封包不能從新拆包與打包; dont:表明不要傳送DF 旗標,表示封包能夠在其餘主機上拆包與打包 #範例一:偵測一下168.95.1.1這部DNS主機是否存在? [root@www ~]# ping -c 3 168.95.1.1 PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data. 64 bytes from 168.95.1.1: icmp_seq=1 ttl=245 time=15.4 ms 64 bytes from 168.95.1.1: icmp_seq=2 ttl=245 time=10.0 ms 64 bytes from 168.95.1.1: icmp_seq=3 ttl=245 time=10.2 ms --- 168.95.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2047ms rtt min/avg/max/mdev = 10.056/11.910/15.453/2.506 ms 

ping 最簡單的功能就是傳送ICMP 封包去要求對方主機迴應是否存在於網路環境中,上面的迴應訊息當中,幾個重要的項目是這樣的:

  • 64 bytes:表示此次傳送的ICMP封包大小爲64 bytes這麼大,這是預設值,在某些特殊場合中,例如要搜索整個網路內最大的MTU時,能夠使用-s 2000之類的數值來取代;

  • icmp_seq=1:ICMP所偵測進行的次數,第一次編號爲1 ;

  • ttl=243:TTL與IP封包內的TTL是相同的,每通過一個帶有MAC的節點(node)時,例如router, bridge時, TTL就會減小一,預設的TTL爲255 ,你能夠透過-t 150之類的方法來從新設定預設TTL數值;

  • time=15.4 ms:迴應時間,單位有ms(0.001秒)及us(0.000001秒),通常來講,越小的迴應時間,表示兩部主機之間的網路連線越良好!

若是你忘記加上-c 3 這樣的規定偵測次數,那就得要使用[ctrl]-c 將他結束掉了!

例題:
寫一支腳本程式ping.sh ,透過這支腳本程式,你能夠用ping 偵測整個網域的主機是否有迴應。此外,每部主機的偵測僅等待一秒鐘,也僅偵測一次。
答:
因爲僅偵測一次且等待一秒,所以ping 的選項爲: -W1 -c1 ,而位於本機所在的區網爲192.168.1.0/24 ,因此能夠這樣寫(vim /root/bin/ping. sh):
#!/bin/bash
for siteip in $(seq 1 254)
do
	site="192.168.1.${siteip}"
	ping -c1 -W1 ${site} &> /dev/null
	if [ "$?" == "0" ]; then
		echo "$site is UP"
	else
		echo "$site is DOWN"
	fi
done

特別注意一下,若是你的主機與待偵測主機並不在同一個網域內,那麼TTL預設使用255 ,若是是同一個網域內,那麼TTL預設則使用64喔!

  • 用ping追蹤路徑中的最大MTU數值

    咱們由第二章的網路基礎裏面談到加大訊框(frame)時,對於網路效能是有幫助的,由於封包打包的次數會減小,加上若是整個傳輸的媒體都可以接受這個frame而不須要從新進行封包的拆解與重組的話,那麼效能固然會更好,那個修改frame大小的參數就是 MTU啦! 好了,如今咱們知道網路卡的MTU修改能夠透過ifconfig或者是ip 等指令來達成,那麼追蹤整個網路傳輸的最大MTU時,又該如何查詢?呵呵!最簡單的方法固然是透過ping傳送一個大封包,而且不準中繼的路由器或switch將該封包重組,那就可以處理啦!沒錯!能夠這樣的:


    #範例二:找出最大的MTU數值 
    [root@www ~]# ping -c 2 -s 1000 -M do 192.168.1.254 PING 192.168.1.254 (192.168.1.254) 1000(1028) bytes of data. 1008 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.311 ms # 若是有迴應,那就是能夠接受這個封包,若是無迴應,那就表示這個MTU 太大了。 [root@www ~]# ping -c 2 -s 8000 -M do 192.168.1.254 PING 192.168.1.254 (192.168.1.254) 8000(8028) bytes of data. From 192.168.1.100 icmp_seq=1 Frag needed and DF set (mtu = 1500) #這個錯誤訊息是說,本地端的MTU纔到1500而已,你要偵測8000的MTU # 根本就是沒法達成的!那要如何是好?用前一小節介紹的ip link 來進行MTU 設定吧! 
    不過,你須要知道的是,因爲 IP封包表頭(不含options)就已經佔用了20 bytes ,再加上ICMP的表頭有8 bytes ,因此固然你在使用-s size的時候,那個封包的大小就得要先扣除(20+8=28)的大小了。所以若是要使用MTU爲1500時,就得要下達『 ping -s 1472 -M do xx.yy.zz.ip 』才行啊! 另外,因爲本地端的網路卡MTU也會影響到偵測,因此若是想要偵測整個傳輸媒體的MTU數值,那麼每一個能夠調整的主機就得要先使用ifcofig或ip先將MTU調大,而後再去進行偵測,不然就會出現像上面提供的案例同樣,可能會出現錯誤訊息的! 不過這個MTU不要隨便調整啊!除非真的有問題。一般調整MTU的時間是在這個時候:





    • 由於所有的主機羣都是在內部的區網,例如叢集架構(cluster) 的環境下, 因爲內部的網路節點都是咱們能夠控制的,所以能夠透過修改MTU 來增進網路效能;
    • 由於做業系統預設的MTU 與你的網域不符,致使某些網站能夠順利連線,某些網站則沒法連線。以Windows 做業系統做爲連線分享的主機時,在Client 端挺容易發生這個問題;

    若是是要連上Internet 的主機,注意不要隨便調整MTU ,由於咱們沒法知道Internet 上面的每部機器可以支援的MTU 到多大,由於......不是咱們可以管的到的嘛^_^ !另外,其實每種連線方式都有不一樣的MTU 值,常見的各類介面的MTU 值分別爲︰

    網路介面 MTU
    Ethernet 1500
    PPPoE 1492
    Dial-up(Modem) 576


小標題的圖示5.2.2 兩主機間各節點分析: traceroute

咱們前面談到的指令大多數都是針對主機的網路參數設定所須要的,而ping 是兩部主機之間的回聲與否判斷, 那麼有沒有指令能夠追蹤兩部主機之間經過的各個節點(node​​) 通信情況的好壞呢?舉例來講,若是咱們連線到yahoo 的速度比日常慢,你以爲是(1)本身的網路環境有問題?(2)仍是外部的Internet 有問題?若是是(1) 的話,咱們固然須要檢查本身的網路環境啊,看看是否又有誰中毒了?但若是是Internet 的問題呢?那只有『等等等』啊!判斷是(1) 仍是(2) 就得要使用traceroute 這個指令啦!

[root@www ~]# traceroute [選項與參數] IP 
選項與參數: -n :能夠沒必要進行主機的名稱解析,單純用IP ,速度較快! -U :使用UDP 的port 33434 來進行偵測,這是預設的偵測協定; -I :使用ICMP 的方式來進行偵測; -T :使用TCP 來進行偵測,通常使用port 80 測試 -w :若對方主機在幾秒鐘內沒有回聲就宣告不治...預設是5 秒 -p 埠號:若不想使用UDP 與TCP 的預設埠號來偵測,可在此改變埠號。 -i 裝置:用在比較複雜的環境,若是你的網路介面不少很複雜時,纔會用到這個參數; 舉例來講,你有兩條ADSL 能夠鏈接到外部,那你的主機會有兩個ppp, 你能夠使用-i 來選擇是ppp0 仍是ppp​​1 啦! -g 路由:與-i 的參數相仿,只是-g 後面接的是gateway 的IP 就是了。 #範例一:偵測本機到yahoo去的各節點連線狀態 [root@www ~]# traceroute -n tw.yahoo.com traceroute to tw.yahoo.com (119.160.246.241), 30 hops max, 40 byte packets 1 192.168.1.254 0.279 ms 0.156 ms 0.169 ms 2 172.20.168.254 0.430 ms 0.513 ms 0.409 ms 3 10.40.1.1 0.996 ms 0.890 ms 1.042 ms 4 203.72.191.85 0.942 ms 0.969 ms 0.951 ms 5 211.20.206.58 1.360 ms 1.379 ms 1.355 ms 6 203.75.72.90 1.123 ms 0.988 ms 1.086 ms 7 220.128.24.22 11.238 ms 11.179 ms 11.128 ms 8 220.128.1.82 12.456 ms 12.327 ms 12.221 ms 9 220.128.3.149 8.062 ms 8.058 ms 7.990 ms 10 * * * 11 119.160.240.1 10.688 ms 10.590 ms 119.160.240.3 10.047 ms 12 * * * <==可能有防火牆裝置等狀況發生所致 

這個traceroute 挺有意思的,這個指令會針對欲鏈接的目的地之全部node 進行UDP 的逾時等待, 例如上面的例子當中,由鳥哥的主機鏈接到Yahoo 時,他會通過12 個節點以上,traceroute會主動的對這12 個節點作UDP 的回聲等待,並偵測回覆的時間,每節點偵測三次,最終回傳像上頭顯示的結果。你能夠發現每一個節點其實回覆的時間大約在50 ms 之內,算是還能夠的Internet 環境了。

比較特殊的算是第10/12 個,會回傳星號的,表明該node 可能設有某些防禦措施,讓咱們發送的封包資訊被丟棄所致。由於咱們是直接透過路由器​​轉遞封包,並無進入路由器去取得路由器的使用資源,因此某些路由器僅支援封包轉遞, 並不會接受來自用戶端的各項偵測啦!此時就會出現上述的問題。由於traceroute 預設使用UDP 封包,若是你想嘗試使用其餘封包, 那麼-I 或-T 能夠試看看囉!

因爲目前UDP/ICMP 的攻擊層出不窮,所以不少路由器可能就此取消這兩個封包的迴應功能。因此咱們能夠使用TCP 來偵測呦!例如使用一樣的方法,透過等待時間1 秒,以及TCP 80 埠口的狀況下,能夠這樣作:

[root@www ~]# traceroute -w 1 -n -T tw.yahoo.com

小標題的圖示5.2.3 察看本機的網路連線與後門: netstat

若是你以爲你的某個網路服務明明就啓動了,可是就是沒法形成連線的話,那麼應該怎麼辦?首先你應該要查詢一下本身的網路介面所監聽的埠口(port) 來看看是否真的有啓動,由於有時候螢幕上面顯示的[OK] 並不必定是OK 啊!^_^

[root@www ~]# netstat -[rn]        <==與路由有關的參數 [root@www ~]# netstat -[antulpc] <==與網路介面有關的參數 選項與參數: 與路由(route) 有關的參數說明: -r :列出路由表(route table),功能如同route 這個指令; -n :不使用主機名稱與服務名稱,使用IP 與port number ,如同route -n 與網路介面有關的參數: -a :列出全部的連線狀態,包括tcp/udp/unix socket 等; -t :僅列出TCP 封包的連線; -u :僅列出UDP 封包的連線; -l :僅列出有在Listen (監聽) 的服務之網路狀態; -p :列出PID 與Program 的檔名; -c :能夠設定幾秒鐘後自動更新一次,例如-c 5 每五秒更新一次網路狀態的顯示; #範例一:列出目前的路由表狀態,且以IP及port number顯示: [root@www ~]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 # 其實這個參數就跟route -n 如出一轍,對吧!這不是netstat 的主要功能啦! #範例二:列出目前的全部網路連線狀態,使用IP與port number [root@www ~]# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State  ....(中間省略).... tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 52 192.168.1.100:22 192.168.1.101: 1937 ESTABLISHED tcp 0 0 :::22 :::* LISTEN ....(中間省略).... Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 11075 @/var/run/hald/dbus-uukdg1qMPh unix 2 [ ACC ] STREAM LISTENING 10952 /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 11032 /var/run/acpid.socket ....(底下省略).... 

netstat 的輸出主要分爲兩大部分,分別是TCP/IP 的網路介面部分,以及傳統的Unix socket 部分。還記得咱們在基礎篇裏面曾經談到檔案的類型嗎?那個socket 與FIFO 檔案還記得吧?那就是在Unix 介面用來作爲程式資料交流的介面了,也就是上頭表格內看到的Active Unix domain sockets 的內容囉~

一般鳥哥都是建議加上『 -n 』這個參數的,由於能夠避過主機名稱與服務名稱的反查,直接以IP 及埠口號碼(port number) 來顯示,顯示的速度上會快不少!至於在輸出的訊息當中, 咱們先來談一談關於網路連線狀態的輸出部分,他主要是分爲底下幾個大項:

  • Proto:該連線的封包協定,主要爲TCP/UDP等封包;
  • Recv-Q:非由使用者程式鏈接所複製而來的總bytes數;
  • Send-Q:由遠端主機所傳送而來,但不具備ACK標誌的總bytes數,意指主動連線SYN或其餘標誌的封包所佔的bytes數;
  • Local Address:本地端的位址,能夠是IP (-n參數存在時),也能夠是完整的主機名稱。使用的格是就是『 IP:port 』只是IP的格式有IPv4及IPv6的差別。如上所示,在port 22的介面中,使用的:::22就是針對IPv6的顯示,事實上他就相同於0.0.0.0:22的意思。至於port 25僅針對lo介面開放,意指Internet基本上是沒法鏈接到我本機的25埠口啦!
  • Foreign Address:遠端的主機IP與port number
  • stat:狀態列,主要的狀態含有:
    • ESTABLISED:已創建連線的狀態;
    • SYN_SENT:發出主動連線(SYN標誌)的連線封包;
    • SYN_RECV:接收到一個要求連線的主動連線封包;
    • FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
    • FIN_WAIT2:該連線已掛斷,但正在等待對方主機迴應斷線確認的封包;
    • TIME_WAIT:該連線已掛斷,但socket還在網路上等待結束;
    • LISTEN:一般用在服務的監聽port !可以使用『 -l 』參數查閱。

基本上,咱們經常談到的netstat的功能,就是在觀察網路的連線狀態了,而網路連線狀態中,又以觀察『我目前開了多少的port在等待用戶端的連線』以及『目前個人網路連線狀態中,有多少連線已創建或產生問題』最多見。那你如何瞭解與觀察呢?一般鳥哥是這樣處理的:

#範例三:秀出目前已經啓動的網路服務 
[root@www ~]# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:34796 0.0.0.0:* LISTEN 987/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master tcp 0 0 :::22 :::* LISTEN 1155/sshd udp 0 0 0.0.0.0:111 0.0.0.0:* 969/rpcbind ....(底下省略).... #上面最重要的實際上是那個-l的參數,由於能夠僅列出有在Listen的port 

你能夠發現不少的網路服務其實僅針對本機的lo 開放而已,網際網路是鏈接不到該埠口與服務的。而由上述的資料咱們也能夠看到,啓動port 111 的,其實就是rpcbind 那隻程式,那若是想要關閉這個埠口, 你能夠使用kill 刪除PID 969,也能夠使用killall 刪除rpcbind 這個程序便可。如此一來, 很輕鬆的你就能知道哪一個程式啓動了哪些埠口囉!

#範例四:觀察本機上頭全部的網路連線狀態 
[root@www ~]# netstat -atunp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1155/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED 4716/0  ....(底下省略).... 

看到上頭的特殊字體吧?那表明目前已經創建連線的一條網路連線,他是由遠端主機192.168.1.101啓動一個大於1024的埠口向本地端主機192.168.1.100的port 22進行的一條連線,你必需要想起來的是:『Client端是 ​​隨機取一個大於1024以上的port進行連線』,此外『只有root能夠啓動小於1024如下的port』,那就看的懂上頭那條連線囉!若是這條連線你想要砍掉他的話,看到最右邊的4716了沒?kill會用吧!^_^

至於傳統的Unix socket 的資料,記得使用man netstat 查閱一下吧!這個Unix socket 一般是用在一些僅在本機上運做的程式所開啓的插槽介面檔, 例如X Window 不都是在本機上運做而已嗎?那何須啓動網路的port 呢?固然能夠使用Unix socket 囉,另外,例如Postfix 這​​一類的網路伺服器,因爲不少動做都是在本機上頭來完成的, 因此以會佔用不少的Unix socket 喔!

例題:
請說明服務名稱與port number 的對應在Linux 當中,是用那個檔案來設定對應的?
答:
/etc/services

小標題的圖示5.2.4 偵測主機名稱與IP 對應: host, nslookup

關於主機名稱與IP 的對應中,咱們主要介紹的是DNS 用戶端功能的dig 這個指令。不過除了這個指令以外, 其實還有兩個更簡單的指令,那就是host 與nslookup 啦!底下讓咱們來聊聊這兩個指令吧!


  • host

這個指令能夠用來查出某個主機名稱的IP 喔!舉例來講,咱們想要知道tw.yahoo.com 的IP 時,能夠這樣作:

[root@www ~]# host [-a] hostname [server] 
選項與參數: -a :列出該主機詳細的各項主機名稱設定資料 [server] :能夠使用非爲/etc/resolv.conf 的DNS 伺服器IP 來查詢。 #範例一:列出tw.yahoo.com的IP [root@www ~]# host tw.yahoo.com tw.yahoo.com is an alias for tw-cidr.fyap.b.yahoo.com. tw-cidr.fyap.b.yahoo.com is an alias for tw-tpe-fo.fyap.b.yahoo.com. tw-tpe-fo.fyap.b.yahoo.com has address 119.160.246.241 

瞧!IP是119.160.246.241啊!很簡單就能夠查詢到IP了!那麼這個IP是向誰查詢的呢?其實就是寫在/etc/resolv.conf 那個檔案內的DNS伺服器IP啦!若是不想要使用該檔案內的主機來查詢,也能夠這樣作:

[root@www ~]# host tw.yahoo.com 168.95.1.1 
Using domain server:
 Name: 168.95.1.1 Address: 168.95.1.1#53 Alias​​es: tw.yahoo.com is an alias for tw-cidr.fyap.b.yahoo.com. tw-cidr.fyap.b.yahoo.com is an alias for tw-tpe-fo.fyap.b.yahoo.com. tw-tpe-fo.fyap.b.yahoo.com has address 119.160.246.241 

會告訴咱們所使用來查詢的主機是哪一部吶!這樣就夠清楚了吧!不過,再怎麼清楚也比不過dig 這個指令的,因此這個指令僅是參考參考啦!


  • nslookup

這玩意兒的用途與host基本上是同樣的,就是用來做爲IP與主機名稱對應的檢查,一樣是使用/etc/resolv.conf 這個檔案來做爲DNS伺服器的來源選擇。

[root@www ~]# nslookup [-query=[type]] [hostname|IP] 
選項與參數: -query=type:查詢的類型,除了傳統的IP 與主機名稱對應外,DNS 還有不少資訊, 因此咱們能夠查詢不少不一樣的資訊,包括mx, cname 等等, 例如: -query=mx 的查詢方法! #範例一:找出www.google.com的IP [root@www ~]# nslookup www.google.com Server: 168.95.1.1 Address: 168.95.1.1#53 Non-authoritative answer: www.google.com canonical name = www.l.google.com. Name: www.l.google.com Address: 74.125.71.106 ....(底下省略).... #範例二:找出168.95.1.1的主機名稱 [root@www ~]# nslookup 168.95.1.1 Server: 168.95.1.1 Address: 168.95.1.1#53 1.1.95.168.in-addr.arpa name = dns.hinet.net. 

如何,看起來與host差很少吧!不過,這個nslookup還能夠由IP找出主機名稱喔!例如那個範例二,他的主機名稱是: dns.hinet.net哩!目前你們都建議使用dig這個指令來取代nslookup ,咱們會在第十九章DNS伺服器那時再來好好談一談吧!


大標題的圖示5.3 遠端連線指令與即時通信軟體

啥是遠端連線呢?其實就是在不一樣的電腦之間進行登入的狀況啦!咱們能夠透過telnet, ssh 或者是ftp 等協定來進行遠端主機的登入。底下咱們就分別來介紹一下這些基本的指令吧!這裏僅是談到用戶端功能喔, 相關的伺服器咱們則會在後續進行說明的。


小標題的圖示 5.3.1 終端機與BBS 連線: telnet

telnet是早期咱們在我的電腦上面要連結到伺服器工做時,最重要的一個軟體了!他不但能夠直接鏈接到伺服器上頭,還能夠用來連結BBS呢!很是棒!不過, telnet自己的資料在傳送的時候是使用明碼(原始的資料,沒有加密) ,因此資料在Internet上面跑的時候,會比較危險一點(就怕被別人監聽啊)。更詳細的資料咱們會在第十一章遠端連線伺服器內作介紹的。

[root@www ~]# telnet [host|IP [port]]

#範例一:連結到臺灣至關熱門的PTT BBS站ptt.cc [root@www ~]# yum install telnet <==預設沒有安裝這軟體 [root@www ~]# telnet ptt.cc 歡迎來到批踢踢實業坊目前有【100118】名使用者與您一同對抗炎炎夏日。 請輸入代號,或以guest 參觀,或以new 註冊: [高手召集令] 臺灣駭客年會暑假與你駭翻南港http://reg.hitcon.org/hit2011 要學電腦,首選臺灣大學資訊訓練班! http://tinyurl.com/3z42apw 

如上所示,咱們能夠透過telnet輕易的連結到BBS上面,而若是你的主機有開啓telnet伺服器服務的話,一樣的利用『 telnet IP 』而且輸入賬號與密碼以後,就可以登入主機了。另外,在Linux上的telnet軟體還提供了Kerberos的認證方式,有興趣的話請自行參閱man telnet的說明。

除了連結到伺服器以及連結到BBS 站以外, telnet 還能夠用來連結到某個port (服務) 上頭吶!舉例來講,咱們能夠用telnet 鏈接到port 110 ,看看這個port 是否有正確的啓動呢?

#範例二:偵測本機端的110這個port是否正確啓動?
[root@www ~]# telnet localhost 110 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused # 若是出現這樣的訊息,表明這個port 沒有啓動或者是這個連線有問題, # 由於你看到那個refused 嘛! [root@www ~]# telnet localhost 25 Trying ::1... Connected to localhost. Escape character is '^]'. 220 www.centos.vbird ESMTP Postfix ehlo localhost 250-www.centos.vbird 250-PIPELINING 250-SIZE 10240000 ....(中間省略).... 250 DSN quit 221 2.0.0 Bye Connection closed by foreign host. 

瞧!根據輸出的結果,咱們就可以知道這個通信協定(port number 提供的通信協定功能) 是否有成功的啓動吶!而在每一個port 所監聽的服務都有其特殊的指令,例如上述的port 25 就是在本機介面所提供的電子郵件服務, 那個服務所支援的指令就如同上面使用的資料同樣,可是其餘的port 就不見得支援這個『 ehlo 』的命令, 由於不一樣的port 有不一樣的程式嘛!因此固然支援的命令就不一樣囉!


小標題的圖示5.3.2 FTP 連線軟體: ftp, lftp

如今的人們因爲有高容量的email 能夠用,所以傳送檔案能夠很輕鬆的透過email 。不過email 仍是有單封信件容量限制, 若是想要一口氣傳送個幾百MB 的檔案,恐怕仍是得要透過FTP 這個通信協定才行啊!文字介面的FTP 軟體主要有ftp, lftp 兩個,圖形介面的呢?在CentOS 上面預設有gftp 這個好用的東東。在這裏咱們僅介紹文字介面的兩個指令而已。 


  • ftp

ftp 這個指令很簡單,用在處理FTP 伺服器的下載資料啦。因爲鳥哥所在的位置在崑山科大,所以這裏使用崑山科大的FTP 伺服器爲例:

[root@www ~]# ftp [host|IP] [port]

#範例一:連線到崑山科大去看看 [root@www ~]# yum install ftp [root@www ~]# ftp ftp.ksu.edu.tw Connected to ftp.ksu.edu.tw (120.114.150.21). 220---------- Welcome to Pure-FTPd [privsep] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 16:25. Server port: 21. 220-Only anonymous FTP is allowed here <==訊息要看啊!這個FTP僅支援匿名 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 5 minutes of inactivity. Name (ftp.ksu.edu.tw:root): anonymous <==鳥哥這裏用匿名登入! 230 Anonymous user logged in <==嗯!確實是匿名登入了! Remote system type is UNIX. Using binary mode to transfer files. ftp> <==最終登入的結果看起來是這樣! ftp> help <==提供須要的指令說明,能夠常參考! ftp> dir <==顯示遠端伺服器的目錄內容(檔名列表) ftp> cd /pub <==變換目錄到/pub當中 ftp> get filename <==下載單一檔案,檔名爲filename ftp> mget filename* <==下載多個檔案,可以使用萬用字元* ftp> put filename <==上傳filename這個檔案到伺服器上 ftp> delete file <==刪除主機上的file這個檔案 ftp> mkdir dir   <==創建dir這個目錄 ftp> lcd /home <==切換『本地端主機』的工做目錄 ftp> passive <==啓動或關閉passive模式 ftp> binary <==資料傳輸模式設定爲binary格式 ftp> bye <==結束ftp軟體的使用 

FTP其實算是一個很麻煩的協定,由於他使用兩個port分別進行命令與資料的交流,詳細的資料咱們會在第二十一章的FTP伺服器內詳談,這裏咱們先單純的介紹一下如何使用ftp這個軟體。首先咱們固然是須要登入囉,因此在上頭的表格當中咱們固然須要填入賬號與密碼了。不過因爲崑山科大僅提供匿名登入,而匿名登入者的賬號就是『 anonymous 』因此直接填寫那個賬號便可。若是是私人的FTP時,才須要提供一組完整的賬號與密碼啦!

登入FTP 主機後,就可以使用ftp 軟體的功能進行上傳與下載的動做,幾個經常使用的ftp 內指令如上表,不過,鳥哥建議你能夠連到大學的FTP 網站後,使用help (或問號? ) 來參考可用的指令,而後嘗試下載以測試使用一下這個指令吧!這樣之後沒有瀏覽器的時候,你也能夠到ftp 下載了呢!不錯吧!另外你要注意的是,離開ftp 軟體時,得要輸入『 bye 』喔!不是『 exit 』啦!

若是因爲某些理由,讓你的FTP 主機的port 開在非正規的埠口時,那你就能夠利用底下的方式來鏈接到該部主機喔!

[root@www ~]# ftp hostname 318 
#假設對方主機的ftp服務開啓在318這個port啊! 


  • lftp (自動化腳本)

單純使用ftp 老是以爲很麻煩,有沒有更快速的ftp 用戶軟體呢?讓咱們能夠使用相似網址列的方式來登入FTP 伺服器啊?有的,那就是lftp 的功能了!lftp 預設使用匿名登入FTP 伺服器,能夠使用相似網址列的方式取得資料, 使用上比單純的ftp 要好用些。此外,因爲可在指令列輸入賬號/密碼,能夠輔助進行程式腳本的設計喔!

[root@www ~]# lftp [-p port] [-u user[,pass]] [host|IP] 
[root@www ~]# lftp -f filename [root@www ~]# lftp -c "commands " 選項與參數: -p :後面能夠直接接上遠端FTP 主機提供的port -u :後面則是接上賬號與密碼,就可以鏈接上遠端主機了 若是沒有加賬號密碼, lftp 預設會使用anonymous 嘗試匿名登入 -f :能夠將指令寫入腳本中,這樣能夠幫助進行shell script 的自動處理喔! -c :後面直接加上所須要的指令。 #範例一:利用lftp登入崑山科大的FTP伺服器 [root@www ~]# yum install lftp [root@www ~]# lftp ftp.ksu.edu.tw lftp ftp.ksu.edu.tw:~> #瞧!一會兒就登入了!很快樂吧!^_^!你一樣可以使用help去查閱相關內部指令 

至於登入FTP 主機後,同樣能夠使用『help』來顯示出能夠執行的指令,與ftp 很相似啦!不過多了書籤的功能,並且也很是的相似bash 吶!很不錯呦!除了這個好用的文字介面的FTP 軟體以外,事實上還有不少圖形介面的好用軟體呢!最多見的就是gftp 了,很是的容易上手喔!CentOS 自己就有提供gftp 了,你能夠拿出原版的光碟來安裝,而後進入X Window 後, 啓動一個shell ,輸入『 gftp 』就可以發現他的好用啦!

若是你想要定時的去捉下崑山科大FTP 網站下的/pub/CentOS/RPM-GPG* 的檔案時,那麼那個腳本應該要怎麼寫呢?咱們嘗試來寫寫看吧!

#使用檔案配合lftp去處理時: 
[root@www ~]# mkdir lftp; cd lftp [root@www lftp]# vim lftp.ksu.sh open ftp.ksu.edu.tw cd /pub/CentOS/ mget -c -d RPM-GPG* bye [root@www lftp]# lftp -f lftp.ksu.sh [root@www lftp]# ls lftp.ksu.sh RPM-GPG-KEY-CentOS-3 RPM-GPG-KEY-CentOS-4 RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-beta RPM-GPG-KEY-centos4 RPM-GPG-KEY-CentOS-5 #直接將要處理的動做加入lftp指令中 [root@www lftp]# vim lftp.ksu.sh lftp -c "open ftp.ksu.edu.tw cd /pub/CentOS/ mget -c -d RPM-GPG* bye" [root@www lftp]# sh lftp.ksu.sh 

若爲非匿名登入時,則能夠使用『 open -u username,password hostname 』修改lftp.ksu.sh 的第一行!若是再將這個腳本寫入crontab 當中,你就能夠定時的以FTP 進行上傳/下載的功能囉!這就是文字指令的好處!


小標題的圖示5.3.3 圖形介面的即時通信軟體: pidgin (gaim 的延伸)

如今應該你們都知道什麼是MSN, 雅虎即時​​通以及其餘的通信軟體吧?那麼要連上這些伺服器時,該怎麼處理哪?很簡單,在X Window 底下使用pidgin 就行了!簡直簡單到不行~請先進入X Window 系統,而後通過『應用程式』--> 『網際網路』-->『Pidgin 網路即時通』啓動他便可(請注意你必須​​已經安裝了pidgin 了,可用yum install pidgin 處理)。

不過,傷腦筋的是,咱們所安裝的basic server 類型的CentOS 6.x 主要作爲伺服器之用,因此連圖形介面也沒有給咱們。因此,鳥哥又用另一部主機安裝成Desktop 的模式,利用該部主機來測試pidgin 這玩意兒的!所以, 底下的練習你也能夠先略過,等到你安裝另外一部Desktop linux 時再來玩玩!

pidgin 的歡迎畫面
圖5.3-一、pidgin 的歡迎畫面

在上圖中按下『新增』,而後你會看到以下的畫面:

pidgin 支援的即時通信資料
圖5.3-二、pidgin 支援的即時通信資料

很神奇的是, pidgin 支援的通信有夠多的!咱們使用MSN 來做個解釋好了:

設定MSN 的賬號示意圖
圖5.3-三、設定MSN 的賬號示意圖

如上圖,在畫面中輸入你的賬號與密碼,若是是在公用的電腦上,千萬不要按下『記住密碼』項目喔!按下新增後, pidgin 預設就會嘗試登入了!登入後的畫面以下所示:

使用pidgin 的MSN 方式進行連天囉
圖5.3-四、使用pidgin 的MSN 方式進行連天囉

若是想要登出了,那麼就按下圖5.3-4 最右邊那個視窗,將『啓動』的那個方框勾選取消,你就直接登出囉!


大標題的圖示5.4 文字介面網頁瀏覽

什麼?文字界面居然有瀏覽器!別逗了好很差?呵呵!誰有那個時間在逗你呦!真的啦!有這個東西, 是在文字界面下上網瀏覽的好工具!分別是links 及wget 這兩個寶貝蛋,可是,你必須要肯定你已經安裝了這兩個套件才行。好佳在的是,CentOS 預設這兩個玩意兒都有安裝喔!底下就讓咱們來聊一聊這兩個好用的傢伙吧!


小標題的圖示 5.4.1 文字瀏覽器:links

其實早期鳥哥最常使用的是lynx 這個文字瀏覽器,不過CentOS 從5.x 之後預設使用的文字瀏覽器是links 這一支,這兩支的使用方式又很是的相似,所以,在這一版當中,咱們就僅介紹links 囉!若對lynx 有興趣的話, 本身man 一下吧!

這個指令可讓咱們來瀏覽網頁,但鳥哥認爲,這個檔案最大的功能是在『 查閱Linux本機上面以HTML語法寫成的文件資料(document)』怎麼說呢?若是你曾經到Linux本機底下的/usr/share/doc這個目錄看過文件資料的話,就會經常發現一些網頁檔案,使用vi去查閱時,總是看到一堆HTML的語法!有礙閱讀啊~這時候使用links就是個好方法啦!能夠看的清清楚楚啊!^_^

[root@www ~]# links [options] [URL] 
選項與參數: -anonymous [0|1]:是否使用匿名登入的意思; -dump [0|1] :是否將網頁的資料直接輸出到standard out 而非links 軟體功能 -dump_charset :後面接想要透過dump 輸出到螢幕的語系編碼,big5 使用cp950 喔 #範例一:瀏覽Linux kernel網站 [root@www ~]# links http://www.kernel.org 

當我直接輸入links 網站網址後,就會出現以下的圖示:

使用links 查詢網頁資料的顯示結果
圖5.4-一、使用links 查詢網頁資料的顯示結果

上面這個畫面的基本說明以下:

  • 進入畫面以後,因爲是文字型態,因此編排可能會有點位移!不過不打緊!不會影響咱們看咚咚!
  • 這個時候能夠使用『上下鍵』來讓遊標在上面的選項當中(如信箱、書籤等等的),按下Enter 就進入該頁面
  • 能夠使用『左右鍵』來移動『上一頁或下一頁』
  • 一些常見功能按鍵:
    • h:history ,曾經瀏覽過的URL 就顯示到畫面中
    • g:Goto URL,按g 後輸入網頁位址(URL) 如:http://www.abc.edu/等
    • d:download,將該連結資料下載到本機成爲檔案;
    • q:Quit,離開links 這個軟體;
    • o:Option,進入功能參數的設定值修改中,最終可寫入~/.elinks/elinks.conf 中
    • Ctrl+C :強迫切斷links 的執行。
    • 方向鍵:
      • 上:移動遊標至本頁中"上一個可連結點" .
      • 下:移動遊標至本頁中"下一個可連結點" .
      • 左:back. 跳回上一頁.
      • 右:進入反白遊標所連結之網頁.
      • ENTER 同滑鼠"右" 鍵.

至於若是是瀏覽Linux 本機上面的網頁檔案,那就能夠使用以下的方式:

[root@www ~]# links /usr/share/doc/HTML/index.html

在鳥哥的CentOS 6.x 當中,有這麼一個檔案,我就能夠利用links 來取出察看吶!顯示的結果有點像底下這樣:

使用links 查詢本機的HTML 文件檔案
圖5.4-二、使用links 查詢本機的HTML 文件檔案

固然啦!由於你的環境多是在Linux 本機的tty1~tty6 ,因此沒法顯示出中文,這個時候你就得要設定爲: 『LANG=en_US』之類的語系設定才行喔!另外,若是某些時刻你必須上網點選某個網站以自動取得更新時。舉例來講,早期的自動線上更新主機名稱系統,僅支援網頁更新,那你如何進行更新呢?嘿嘿!能夠使用links 喔!利用 -dump 這個參數處理先:

#透過links將tw.yahoo.com的網頁內容整個抓下來儲存 
[root@www ~]# links -dump http://tw.yahoo.com > yahoo.html #某個網站透過GET功能能夠上傳賬號爲user密碼爲pw ,用文字介面處理爲: [root@www ~]# links -dump \ > http://some.site.name/web.php?name= user&password=pw > testfile 

上面的網站後面有加個問號(?) 對吧?後面接的則是利用網頁的『 GET 』功能取得的各項變數資料, 利用這個功能,咱們就能夠直接點選到該網站上囉!很是的方便吧!並且會將執行的結果輸出到testfile 檔案中,不過若是網站提供的資料是以『 POST 』爲主的話,那鳥哥就不知道如何搞定了。GET 與POST 是WWW 通信協定中,用來將資料透過瀏覽器上傳到伺服器端的一種方式, 通常來講,目前討論區或部落格等,大多使用能夠支援較多資料的POST 方式上傳啦!關於GET 與POST 的相關資訊咱們會在第二十章WWW 伺服器當中再次的說起!


小標題的圖示5.4.2 文字介面下載器: wget

若是說links 是在進行網頁的『瀏覽』,那麼wget 就是在進行『網頁資料的取得』。舉例來講,咱們的Linux 核心是放置在www.kernel.org 內,主要同時提供ftp 與http 來下載。咱們知道能夠使用lftp 來下載資料,但若是想要用瀏覽器來下載呢?那就利用wget 吧!

[root@www ~]# wget [option] [網址] 
選項與參數: 若想要連線的網站有提供賬號與密碼的保護時,能夠利用這兩個參數來輸入喔! --http-user=usrname --http-password=password --quiet :不要顯示wget 在抓取資料時候的顯示訊息 更多的參數請自行參考man wget 吧!^_^ #範例一:請下載2.6.39版的核心 [root@www ~]# wget \ > http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar. bz2 --2011-07-18 16:58:26-- http://www.kernel.org/pub/linux/kernel/v2.6/.. Resolving www.kernel.org... 130.239.17.5, 149.20.4.69, 149.20.20.133, ... Connecting to www.kernel.org|130.239.17.5|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 76096559 (73M) [application/x-bzip2] Saving to: `linux-2.6.39.tar.bz2' 88% [================================> ] 67,520,536 1.85M/s eta 7s 

你瞧瞧~很可愛吧!沒必要透過瀏覽器,只要知道網址後,當即能夠進行檔案的下載, 又快速又方便,還能夠透過proxy 的幫助來下載呢!透過修改/etc/wgetrc 來設定你的代理伺服器:

[root@www ~]# vim /etc/wgetrc 
#http_proxy = http://proxy.yoyodyne.com:18023/   <==找到底下這幾行,大約在78行 #ftp_proxy = http://proxy.yoyodyne.com:18023/ #use_proxy = on #將他改爲相似底下的模樣,記得,你必需要有可接受的proxy主機才行! http_proxy = http://proxy.ksu.edu.tw:3128/ use_proxy = on 

大標題的圖示5.5 封包擷取功能

不少時候因爲咱們的網路連線出現問題,使用相似ping的軟體功能卻又沒法找出問題點,最多見的是由於路由與IP轉遞後所產生的一些困擾(請參考防火牆與NAT主機部分),這個時候要怎麼辦?最簡單的方法就是『分析封包的流向』囉!透過度析封包的流向,咱們能夠了解一條連線應該是如何進行雙向的連線的動做,也就會清楚的瞭解到可能發生的問題所在了!底下咱們就來談一談這個tcpdump與圖形介面的封包分析軟體吧!


小標題的圖示 5.5.1 文字介面封包擷取器: tcpdump

說實在的,對於tcpdump這個軟體來講,你甚至能夠說這個軟體其實就是個駭客軟體,由於他不但能夠分析封包的流向,連封包的內容也能夠進行『監聽』,若是你使用的傳輸資料是明碼的話,不得了,在router或hub上面就可能被人家監聽走了!咱們在第二章談到的CSMA/CD 流程中,不是說過有所謂的『監聽軟體』嗎?這個tcpdump就是啦!很可怕吶!因此,咱們也要來了解一下這個軟體啊!(注:這個tcpdump必須使用root的身份執行)

[root@www ~]# tcpdump [-AennqX] [-i介面] [-w儲存檔名] [-c次數] \ 
               [-r檔案] [所欲擷取的封包資料格式] 選項與參數: -A :封包的內容以ASCII 顯示,一般用來捉取WWW 的網頁封包資料。 -e :使用資料鏈接層(OSI 第二層) 的MAC 封包資料來顯示; -nn:直接以IP 及port number 顯示,而非主機名與服務名稱 -q :僅列出較爲簡短的封包資訊,每一行的內容比較精簡 -X :能夠列出十六進位(hex) 以及ASCII 的封包內容,對於監聽封包​​內容頗有用 -i :後面接要『監聽』的網路介面,例如eth0, lo, ppp0 等等的介面; -w :若是你要將監聽所得的封包資料儲存下來,用這個參數就對了!後面接檔名 -r :從後面接的檔案將封包資料讀出來。那個『檔案』是已經存在的檔案, 而且這個『檔案』是由-w 所製做出來的。 -c :監聽的封包數,若是沒有這個參數, tcpdump 會持續不斷的監聽, 直到使用者輸入[ctrl]-c 爲止。 所欲擷取的封包資料格式:咱們能夠專門針對某些通信協定或者是IP 來源進行封包擷取, 那就能夠簡化輸出的結果,並取得最有用的資訊。常見的表示方法有: 'host foo', 'host 127.0.0.1' :針對單部主機來進行封包擷取 'net 192.168' :針對某個網域來進行封包的擷取; 'src host 127.0.0.1' 'dst net 192.168':同時加上來源(src)或目標(dst)限制 'tcp port 21':還能夠針對通信協定偵測,如tcp, udp, arp, ether 等 還能夠利用and 與or 來進行封包資料的整合顯示呢! #範例一:以IP與port number捉下eth0這個網路卡上的封包,持續3秒 [root@www ~]# tcpdump -i eth0 -nn tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 17:01:47.360523 IP 192.168.1.101.1937 > 192.168.1.100.22: Flags [.], ack 196, win 65219, 17:01:47.362139 IP 192.168.1.100.22 > 192.168.1.101.1937: Flags [P.], seq 196:472, ack 1, 17:01:47.363201 IP 192.168.1.100.22 > 192.168.1.101.1937: Flags [P.], seq 472:636, ack 1, 17:01:47.363328 IP 192.168.1.101.1937 > 192.168.1.100.22: Flags [.], ack 636, win 64779, <==按下[ctrl]-c以後結束 6680 packets captured <==捉下來的封包數量 14250 packets received by filter <==由過濾所得的總封包數量 7512 packets dropped by kernel <==被核心所丟棄的封包 

若是你是第一次看tcpdump的man page時,確定一個頭兩個大,由於tcpdump幾乎都是分析封包的表頭資料,使用者若是沒有簡易的網路封包基礎,要看懂粉難吶!因此,至少你得要回到網路基礎裏面去將TCP封包的表頭資料理解理解纔好啊!^_^!至於那個範例一所產生的輸出範例中,咱們能夠約略區分爲數個欄位,咱們以範例一當中那個特殊字體行來講明一下:

  • 17:01:47.362139:這個是此封包被擷取的時間,『時:分:秒』的單位;
  • IP:透過的通信協定是IP ;
  • 192.168.1.100.22 >:傳送端是192.168.1.100這個IP,而傳送的port number爲22,你必需要了解的是,那個大於(>)的符號指的是封包的傳輸方向喔!
  • 192.168.1.101.1937:接收端的IP是192.168.1.101,且該主機開啓port 1937來接收;
  • [P.], seq 196:472:這個封包帶有PUSH的資料傳輸標誌,且傳輸的資料爲總體資料的196~472 byte;
  • ack 1:ACK的相關資料。

最簡單的說法,就是該封包是由192.168.1.100傳到192.168.1.101,透過的port是由22到1937 ,使用的是PUSH的旗標,而不是SYN之類的主動連線標誌。呵呵!不容易看的懂吧!因此說,上頭纔講請務必到TCP表頭資料的部分去瞧一瞧的啊!

再來,一個網路狀態很忙的主機上面,你想要取得某部主機對你連線的封包資料而已時, 使用tcpdump 配合管線命令與正規表示法也能夠,不過,畢竟很差捉取!咱們能夠透過tcpdump 的表示法功能,就可以輕易的將所須要的資料獨立的取出來。在上面的範例一當中,咱們僅針對eth0 作監聽,因此整個eth0 介面上面的資料都會被顯示到螢幕上, 很差分析啊!那麼咱們能夠簡化嗎?例如只取出port 21 的連線封包,能夠這樣作:

[root@www ~]# tcpdump -i eth0 -nn port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:54:37.96 IP 192.168.1.101.1240 > 192.168.1.100. 21 : . ack 1 win 65535 01:54:37.96 IP 192.168.1.100. 21 > 192.168.1.101.1240: P 1:21(20) ack 1 win 5840 01:54:38.12 IP 192.168.1.101.1240 > 192.168.1.100. 21 : . ack 21 win 65515 01:54:42.79 IP 192.168.1.101.1240 > 192.168.1.100. 21 : P 1:17(16) ack 21 win 65515 01:54:42.79 IP 192.168.1.100. 21 > 192.168.1.101.1240: . ack 17 win 5840 01:54:42.79 IP 192.168.1.100. 21 > 192.168.1.101.1240: P 21:55(34) ack 17 win 5840 

瞧!這樣就僅提出port 21 的資訊而已,且仔細看的話,你會發現封包的傳遞都是雙向的, client 端發出『要求』而server 端則予以『迴應』,因此,固然是有去有回啊!而咱們也就能夠通過這個封包的流向來了解到封包運做的過程。舉例來講:

  1. 咱們先在一個終端機視窗輸入『 tcpdump -i lo -nn 』 的監聽,
  2. 再另開一個終端機視窗來對本機(127.0.0.1) 登入『ssh localhost』

那麼輸出的結果會是如何?

[root@www ~]# tcpdump -i lo -nn 
1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes 3 ​​11: 02:54.253777 IP 127.0.0.1. 32936 > 127.0.0.1.22: S 933696132:933696132(0) win 32767 <mss 16396,sackOK,timestamp 236681316 0,nop,wscale 2> 4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936: S 920046702:920046702(0) ack 933696133 win 32767 <mss 16396,sackOK,timestamp 236681316 236681316,nop, wscale 2> 5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192 <nop, nop,timestamp 236681316 236681316> 6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936: P 1:23(22) ack 1 win 8192 <nop,nop,timestamp 236681334 236681316> 7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192 <nop, nop,timestamp 236681334 236681334> 

上表顯示的頭兩行是tcpdump 的基本說明,而後:

  • 第3 行顯示的是『來自client 端,帶有SYN 主動連線的封包』,
  • 第4 行顯示的是『來自server 端,除了迴應client 端以外(ACK),還帶有SYN 主動連線的標誌;
  • 第5 行則顯示client 端迴應server 肯定連線創建(ACK)
  • 第6 行之後則開始進入資料傳輸的步驟。

從第3-5行的流程來看,熟不熟悉啊?沒錯!那就是三向交握的基礎流程啦!夠有趣吧!不過tcpdump之因此被稱爲駭客軟體之一可不止上頭介紹的功能吶!上面介紹的功能能夠用來做爲咱們主機的封包連線與傳輸的流程分析,這將有助於咱們瞭解到封包的運做,同時瞭解到主機的防火牆設定規則是否有須要修訂的地方。

更神奇的使用要來啦!若是咱們使用tcpdump 在router 上面監聽『明碼』的傳輸資料時, 例如FTP 傳輸協定,你以爲會發生什麼問題呢?咱們先在主機端下達『 tcpdump -i lo port 21 -nn -X 』而後再以ftp 登入本機,並輸入賬號與密碼, 結果你就能夠發現以下的情況:

[root@www ~]# tcpdump -i lo -nn -X 'port 21'
    0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@.......
    0x0010: 7f00 0001 0015 80ab 8355 2149 835c d825 .........U!I.\.%
    0x0020: 8018 2000 fe3c 0000 0101 080a 0e2e 0b67 .....<.........g
    0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.( vsFTPd. 0x0040: 322e 302e 3129 0d0a 2.0.1).. 0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..AK@.@.iY.... 0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d .........\.%.U!] 0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7 0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER. dmtsai . 0x0040: 0a . 0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..JO@.@.iL.... 0x0010: 7f00 0001 80ab 0015 835c d832 8355 217f .........\.2.U!. 0x0020: 8018 2000 fe3e 0000 0101 080a 0e2e 3227 .....>........2' 0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS. mypassw 0x0040: 6f72 6469 7379 6f75 0d0a ordisyou .. 

上面的輸出結果已經被簡化過了,你必需要自行在你的輸出結果當中搜尋相關的字串才行。從上面輸出結果的特殊字體中,咱們能夠發現『該FTP軟體使用的是vsftpd ,而且使用者輸入dmtsai這個賬號名稱,且密碼是mypasswordisyou』嘿嘿!你說可不可怕啊!若是使用的是明碼的方式來傳輸你的網路資料?因此咱們才經常在講啊,網路是很不安全滴!

另外你得了解,爲了讓網路介面可讓tcpdump 監聽,因此執行tcpdump 時網路介面會啓動在『錯亂模式(promiscuous)』,因此你會在/var/log/messages 裏面看到不少的警告訊息, 通知你說你的網路卡被設定成爲錯亂模式!別擔憂,那是正常的。至於更多的應用,請參考man tcpdump 囉!

例題:
如何使用tcpdump 監聽(1)來自eth0 介面卡且(2)通信協定爲port 22 ,(3)封包來源爲192.168.1.101 的封包資料?
答:
tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.101'

小標題的圖示5.5.2 圖形介面封包擷取器: wireshark

tcpdump是文字介面的封包擷取器,那麼有沒有圖形介面的?有啊!那就是wireshark ( 注1 )這套軟體。這套軟體早期稱爲ethereal ,目前同時提供文字介面的tethereal以及圖形介面的wireshark兩個咚咚。因爲咱們當初安裝時預設並無裝這套,所以妳必需要先使用yum去網路安裝喔!也能夠拿出光碟來安裝啦!有兩套須要安裝,分別是文字介面的wireshark以及圖形介面的wireshark-gnome軟體。安裝方式以下:

[root@www ~]# yum install wireshark wireshark-gnome

啓動這套軟體的方法很簡單,你必需要在X Window 底下,透過『應用程式』-->『網際網路』-->『wireshark network analyzer』就能夠啓動啦!啓動的畫面以下所示:

wireshark 的使用示意圖
圖5.5-一、wireshark 的使用示意圖

其實這一套軟體功能很是強大!鳥哥這裏僅講簡單的用法,如有特殊需求,就得要本身找找資料囉。想要開始擷取封包前,得要設定一下監聽的介面之類的,所以點選圖5.5-1 畫面中的網路卡小圖示吧!就會出現以下的畫面給你選擇了。

wireshark 的使用示意圖
圖5.5-二、wireshark 的使用示意圖

在上圖中,你得先選擇想要監聽的介面,鳥哥這裏由於擔憂外部的封包太多致使畫面很亂,所以這裏使用內部的lo 介面來做爲範例。你得要注意, lo 平時是很安靜的!因此,鳥哥在點選了『start』以後,還有打開終端機, 以後使用『 ssh localhost 』來嘗試登入本身,這樣纔可以得到封包喔!以下圖所示:

wireshark 的使用示意圖
圖5.5-三、wireshark 的使用示意圖

若沒有問題,等到你擷取了足夠的封包想要進行分析以後,按下圖5.5-3 畫面中的中止小圖示,那麼封包擷取的動做就會終止, 接下來,就讓咱們來開始分析一下封包吧!

wireshark 的使用示意圖
圖5.5-四、wireshark 的使用示意圖

整個分析的畫面如上所示,畫面總共分爲三大區塊,你能夠將滑鼠遊標移動到每一個區塊中間的移動棒, 就能夠調整每一個區塊的範圍大小了。第一區塊主要顯示的是封包的標頭資料,內容就有點相似tcpdump 的顯示結果,第二區塊則是詳細的表頭資料,包括訊框的內容、通信協定的內容以及socket pair 等等資訊。第三區塊則是16 進位與ASC​​II 碼的顯示結果(詳細的封包內容)。

若是你以爲某個封包有問題,在畫面1 的地方點選該封包(圖例中是第6 個封包),那麼畫面2 與3 就會跟着變更!因爲鳥哥測試的封包是加密資料的封包,所以畫面2 顯示出封包表頭,但畫面3 的封包內容就是亂碼啦!透過這個wireshark 你就能夠一口氣獲得所須要的全部封包內容啦!並且仍是圖形介面的,很方便吧!


小標題的圖示5.5.3 任意啓動TCP/UDP 封包的埠口連線: nc, netcat

這個nc 指令能夠用來做爲某些服務的檢測,由於他能夠鏈接到某個port 來進行溝通,此外,還能夠自行啓動一個port 來傾聽其餘用戶的連線吶!很是的不錯用!若是在編譯nc 軟體的時候給予『GAPING_SECURITY_HOLE』參數的話,嘿嘿!這個軟體還能夠用來取得用戶端的bash 哩!可怕吧!咱們的CentOS 預設並無給予上面的參數, 因此咱們不可以用來做爲駭客軟體~可是nc 用來取代telnet 也是個很棒的功能了!(有的系統將執行檔nc 更名爲netcat 啦!)

[root@www ~]# nc [-u] [IP|host] [port] 
[root@www ~]# nc -l [IP|host] [port] 選項與參數: -l :做爲監聽之用,亦即開啓一個port 來監聽用戶的連線; -u :不使用TCP 而是使用UDP 做爲連線的封包狀態 #範例一:與telnet相似,鏈接本地端的port 25查閱相關訊息 [root@www ~]# yum install nc [root@www ~]# nc localhost 25 

這個最簡單的功能與telnet 幾乎同樣吧!能夠去檢查某個服務啦!不過,更神奇的在後面, 咱們能夠創建兩個連線來傳訊喔!舉個例子來講,咱們先在伺服器端啓動一個port 來進行傾聽:

#範例二:啓動一個port 20000來監聽使用者的連線要求 
[root@www ~]# nc -l localhost 20000 & [root@www ~]# netstat -tlunp | grep nc tcp 0 0 ::1: 20000 :::* LISTEN 5433/nc #啓動一個port 20000在本機上! 

接下來你再開另一個終端機來看看,也利用nc 來連線伺服器,而且輸入一些指令看看喔!

[root@www ~]# nc localhost 20000 
   <==這裏能夠開始輸入字串了! 

此時,在用戶端咱們能夠打入一些字,你會發如今伺服器端會同時出現你輸入的字眼吶!若是你同時給予一些額外的參數,例如利用標準輸入與輸出(stdout, stdin) 的話,那麼就能夠透過這個連線來做不少事情了!固然nc 的功能不僅如此,你還能夠發現不少的用途喔!請自行到你主機內的/usr/share/doc/nc-1.84/scripts/ 目錄下看看這些script ,有幫助的吶!不過,若是你須要額外的編譯出含有GAPING_SECURITY_HOLE 功能, 以使兩端連線能夠進行額外指令的執行時,就得要自行下載原始碼來編譯了!


大標題的圖示5.6 重點回顧

  • 修改網路介面的硬體相關參數,能夠使用ifconfig 這個指令,包括MTU 等等;
  • ifup 與ifdown 其實只是script ,在使用時,會主動去/etc/sysconfig/network-scripts 下找到相對應的裝置設定檔,纔可以正確的啓動與關閉;
  • 路由的修改與查閱能夠使用route 來查詢,此外, route 亦可進行新增、刪除路由的工做;
  • ip 指令能夠用來做爲整個網路環境的設定,利用ip link 能夠修改『網路裝置的硬體相關功能』, 包括MTU 與MAC 等等,能夠使用ip address 修改TCP/IP 方面的參數,包括IP以及網域參數等等, ip route 則能夠修改路由!
  • ping 主要是透過ICMP 封包來進行網路環境的檢測工做,而且能夠使用ping 來查詢總體網域可接受最大的MTU 值;
  • 偵察每一個節點的連線情況,能夠使用traceroute 這個指令來追蹤!
  • netstat 除了能夠觀察本機的啓動介面外,還能夠觀察Unix socket 的傳統插槽介面資料;
  • host 與nslookup 預設都是透過/etc/resolv.conf 內設定的DNS 主機來進行主機名稱與IP 的查詢;
  • lftp 能夠用來匿名登入遠端的FTP 主機;
  • links 主要的功能是『瀏覽』,包括本機上HTML 語法的檔案, wget 則主要在用來下載WWW 的資料;
  • 擷取封包以分析封包的流向,可以使用tcpdump ,至於圖形介面的wireshark 則能夠進行更爲詳細的解析。
  • 透過tcpdump 分析三向交握,以及分析明碼傳輸的資料,可發現網路加密的重要性。
  • nc 可用來取代telnet 進行某些服務埠口的檢測工做。

大標題的圖示5.7 本章習題

  • 暫時將你的eth0 這張網路卡的IP 設定爲192.168.1.100 ,如何進行?
    ifconfig eth0 192.168.1.100
  • 我要增長一個路由規則,以eth0 鏈接192.168.100.100/24​​ 這個網域,應該如何下達指令?
    route add -net 192.l68.100.0 netmask 255.255.255.0 dev eth0
  • 個人網路停頓的很厲害,尤爲是鏈接到tw.yahoo.com 的時候,那麼我應該如何檢查那個環節出了問題?
    traceroute tw.yahoo.com
  • 我發現個人Linux 主機上面有個連線很怪異,想要將他斷線,應該如何進行?
    以root 的身份進行『netstat -anp |more』查出該連線的PID,而後以『 kill -9 PID 』踢掉該連線。
  • 你如何知道green.ev.ncku.edu.tw 這部主機的IP ?
    方法不少,能夠利用host green.ev.ncku.edu.tw 或dig green.ev.ncku.edu.tw 或nslookup green.ev.ncku.edu.tw 等方法找出
  • 請找出你的機器上面最適當的MTU 應該是多少?
    請利用『ping -c 3 -M do -s MTU yourIP 』找出你的IP 的MTU 數值。事實上,你還能夠先以ip 設定網路卡較大的MTU 後,在進行上述的動做,纔可以找出網域內適合的MTU。
  • 如何在終端機介面上面進行WWW 瀏覽?又該如何下載WWW 上面提供的檔案?
    要瀏覽能夠使用links 或​​lynx ,至於要下載則使用wget 這個軟體。
  • 在終端機介面中,如何鏈接bbs.sayya.org 這個BBS ?
    利用telnet bbs.sayya.org 便可鏈接上
  • 請自行以tcpdump 觀察本機端的ssh 連線時,三向交握的內容
  • 請自行回答:爲什麼使用明碼傳輸的網路連線資料較爲危險?並自行以軟體將封包取出,並與同窗討論封包的資訊
  • 請自行至Internet 下載nc(netcat) 的原始碼,而且編譯成爲具備GAPING_SECURITY_HOLE 的參數, 而後創建一條連線使用-e /bin/bash 嘗試將本地端的bash 丟給目的端執行(特殊功能,可以讓client 取得來自主機的bash)。

大標題的圖示5.8 參考資料與延伸閱讀

相關文章
相關標籤/搜索