鸟哥的Linux私房菜(服务器)- 第五章、 Linux 常用网络指令
最近更新日期:2011/07/18
| Linux 的網(wǎng)絡(luò)功能相當(dāng)?shù)膹?qiáng)悍,一時(shí)之間我們也無法完全的介紹所有的網(wǎng)絡(luò)指令,這個(gè)章節(jié)主要的目的在介紹一些常見的網(wǎng)絡(luò)指令而已。 至于每個(gè)指令的詳細(xì)用途將在后續(xù)服務(wù)器架設(shè)時(shí),依照指令的相關(guān)性來進(jìn)行說明。當(dāng)然,在這個(gè)章節(jié)的主要目的是在于將所有的指令匯整在一起, 比較容易了解啦!這一章還有個(gè)相當(dāng)重要的重點(diǎn),那就是封包擷取的指令。若不熟悉也沒關(guān)系,先放著,全部讀完后再回來這一章仔細(xì)練習(xí)啊! |
5.1?網(wǎng)絡(luò)參數(shù)設(shè)定使用的指令
5.1.1?手動/自動設(shè)定與啟動/關(guān)閉 IP 參數(shù):ifconfig,?ifup, ifdown
5.1.2?路由修改: route
5.1.3?網(wǎng)絡(luò)參數(shù)綜合指令: ip
5.1.4?無線網(wǎng)絡(luò): iwlist, iwconfig
5.1.5?手動使用 DHCP 自動取得 IP 參數(shù):dhclient
5.2?網(wǎng)絡(luò)偵錯(cuò)與觀察指令
5.2.1?兩部主機(jī)兩點(diǎn)溝通: ping,?用 ping 追蹤路徑中的最大 MTU 數(shù)值
5.2.2?兩主機(jī)間各節(jié)點(diǎn)分析: traceroute
5.2.3?察看本機(jī)的網(wǎng)絡(luò)聯(lián)機(jī)與后門: netstat
5.2.4?偵測主機(jī)名與 IP 對應(yīng):?host,?nslookup
5.3?遠(yuǎn)程聯(lián)機(jī)指令與實(shí)時(shí)通訊軟件
5.3.1?終端機(jī)與 BBS 聯(lián)機(jī): telnet
5.3.2?FTP 聯(lián)機(jī)軟件:?ftp,?lftp (自動化腳本)
5.3.3?圖形接口的實(shí)時(shí)通訊軟件: pidgin (gaim 的延伸)
5.4?文字接口網(wǎng)頁瀏覽
5.4.1?文字瀏覽器: links
5.4.2?文字接口下載器: wget
5.5?封包擷取功能
5.5.1?文字接口封包擷取器: tcpdump
5.5.2?圖形接口封包擷取器: wireshark
5.5.3?任意啟動 TCP/UDP 封包的埠口聯(lián)機(jī): nc, netcat
5.6?重點(diǎn)回顧
5.7?本章習(xí)題
5.8?參考數(shù)據(jù)與延伸閱讀
5.9?針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=26123
5.1 網(wǎng)絡(luò)參數(shù)設(shè)定使用的指令
任何時(shí)刻如果你想要做好你的網(wǎng)絡(luò)參數(shù)設(shè)定,包括 IP 參數(shù)、路由參數(shù)與無線網(wǎng)絡(luò)等等,就得要了解底下這些相關(guān)的指令才行!其中以 ifconfig 及 route 這兩支指令算是較重要的喔! ^_^!當(dāng)然,比較新鮮的作法,可以使用 ip 這個(gè)匯整的指令來設(shè)定 IP 參數(shù)啦!
- ifconfig ? ?:查詢、設(shè)定網(wǎng)絡(luò)卡與 IP 網(wǎng)域等相關(guān)參數(shù);
- ifup, ifdown:這兩個(gè)檔案是 script,透過更簡單的方式來啟動網(wǎng)絡(luò)接口;
- route ? ? ??:查詢、設(shè)定路由表 (route table)
- ip ? ? ? ? ?:復(fù)合式的指令, 可以直接修改上述提到的功能;
5.1.1 手動/自動設(shè)定與啟動/關(guān)閉 IP 參數(shù): ifconfig, ifup, ifdown
這三個(gè)指令的用途都是在啟動網(wǎng)絡(luò)接口,不過, ifup 與 ifdown 僅能就 /etc/sysconfig/network-scripts 內(nèi)的 ifcfg-ethX (X 為數(shù)字) 進(jìn)行啟動或關(guān)閉的動作,并不能直接修改網(wǎng)絡(luò)參數(shù),除非手動調(diào)整 ifcfg-ethX 檔案才行。至于 ifconfig 則可以直接手動給予某個(gè)接口 IP 或調(diào)整其網(wǎng)絡(luò)參數(shù)!底下我們就分別來談一談!
-
ifconfig
ifconfig 主要是可以手動的啟動、觀察與修改網(wǎng)絡(luò)接口的相關(guān)參數(shù),可以修改的參數(shù)很多啊,包括 IP 參數(shù)以及 MTU 等等都可以修改,他的語法如下:
| [root@www ~]# ifconfig {interface} {up|down} <== 觀察與啟動接口 [root@www ~]# ifconfig interface {options} <== 設(shè)定與修改接口 選項(xiàng)與參數(shù): interface:網(wǎng)絡(luò)卡接口代號,包括 eth0, eth1, ppp0 等等 options :可以接的參數(shù),包括如下:up, down :啟動 (up) 或關(guān)閉 (down) 該網(wǎng)絡(luò)接口(不涉及任何參數(shù))mtu :可以設(shè)定不同的 MTU 數(shù)值,例如 mtu 1500 (單位為 byte)netmask :就是子屏蔽網(wǎng)絡(luò);broadcast:就是廣播地址啊!# 范例一:觀察所有的網(wǎng)絡(luò)接口(直接輸入 ifconfig) [root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BDinet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:2555 errors:0 dropped:0 overruns:0 frame:0TX packets:70 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB) |
一般來說,直接輸入 ifconfig 就會列出目前已經(jīng)被啟動的卡,不論這個(gè)卡是否有給予 IP,都會被顯示出來。而如果是輸入 ifconfig eth0,則僅會秀出這張接口的相關(guān)數(shù)據(jù), 而不管該接口是否有啟動。所以如果你想要知道某張網(wǎng)絡(luò)卡的 Hardware Address,直接輸入『 ifconfig "網(wǎng)絡(luò)接口代號" 』即可喔! ^_^!至于上表出現(xiàn)的各項(xiàng)數(shù)據(jù)是這樣的(數(shù)據(jù)排列由上而下、由左而右):
- eth0:就是網(wǎng)絡(luò)卡的代號,也有 lo 這個(gè) loopback ;
- HWaddr:就是網(wǎng)絡(luò)卡的硬件地址,俗稱的 MAC 是也;
- inet addr:IPv4 的 IP 地址,后續(xù)的 Bcast, Mask 分別代表的是 Broadcast 與 netmask 喔!
- inet6 addr:是 IPv6 的版本的 IP ,我們沒有使用,所以略過;
- MTU:就是第二章談到的?MTU?啊!
- RX:那一行代表的是網(wǎng)絡(luò)由啟動到目前為止的封包接收情況, packets 代表封包數(shù)、errors 代表封包發(fā)生錯(cuò)誤的數(shù)量、 dropped 代表封包由于有問題而遭丟棄的數(shù)量等等
- TX:與 RX 相反,為網(wǎng)絡(luò)由啟動到目前為止的傳送情況;
- collisions:代表封包碰撞的情況,如果發(fā)生太多次, 表示你的網(wǎng)絡(luò)狀況不太好;
- txqueuelen:代表用來傳輸數(shù)據(jù)的緩沖區(qū)的儲存長度;
- RX bytes, TX bytes:總接收、發(fā)送字節(jié)總量
透過觀察上述的資料,大致上可以了解到你的網(wǎng)絡(luò)情況,尤其是那個(gè) RX, TX 內(nèi)的 error 數(shù)量, 以及是否發(fā)生嚴(yán)重的 collision 情況,都是需要注意的喔! ^_^
| # 范例二:暫時(shí)修改網(wǎng)絡(luò)接口,給予 eth0 一個(gè) 192.168.100.100/24 的參數(shù) [root@www ~]# ifconfig eth0 192.168.100.100 # 如果不加任何其他參數(shù),則系統(tǒng)會依照該 IP 所在的 class 范圍,自動的計(jì)算出 # netmask 以及 network, broadcast 等 IP 參數(shù),若想改其他參數(shù)則:[root@www ~]# ifconfig eth0 192.168.100.100 \ > netmask 255.255.255.128 mtu 8000 # 設(shè)定不同參數(shù)的網(wǎng)絡(luò)接口,同時(shí)設(shè)定 MTU 的數(shù)值![root@www ~]# ifconfig eth0 mtu 9000 # 僅修改該接口的 MTU 數(shù)值,其他的保持不動![root@www ~]# ifconfig eth0:0 192.168.50.50 # 仔細(xì)看那個(gè)界面是 eth0:0 喔!那就是在該實(shí)體網(wǎng)卡上,再仿真一個(gè)網(wǎng)絡(luò)接口, # 亦即是在一張網(wǎng)絡(luò)卡上面設(shè)定多個(gè) IP 的意思啦![root@www ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BDinet addr:192.168.100.100 Bcast:192.168.100.127 Mask:255.255.255.128inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1RX packets:2555 errors:0 dropped:0 overruns:0 frame:0TX packets:70 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB)eth0:0 Link encap:Ethernet HWaddr 08:00:27:71:85:BDinet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 # 仔細(xì)看,是否與硬件有關(guān)的信息都相同啊!沒錯(cuò)!因?yàn)槭峭粡埦W(wǎng)卡嘛! # 那如果想要將剛剛建立的那張 eth0:0 關(guān)閉就好,不影響原有的 eth0 呢?[root@www ~]# ifconfig eth0:0 down # 關(guān)掉 eth0:0 這個(gè)界面。那如果想用默認(rèn)值啟動 eth1:『ifconfig eth1 up』即可達(dá)成# 范例三:將手動的處理全部取消,使用原有的設(shè)定值重建網(wǎng)絡(luò)參數(shù): [root@www ~]# /etc/init.d/network restart # 剛剛設(shè)定的數(shù)據(jù)全部失效,會以 ifcfg-ethX 的設(shè)定為主! |
使用 ifconfig 可以暫時(shí)手動來設(shè)定或修改某個(gè)適配卡的相關(guān)功能,并且也可以透過 eth0:0 這種虛擬的網(wǎng)絡(luò)接口來設(shè)定好一張網(wǎng)絡(luò)卡上面的多個(gè) IP 喔!手動的方式真是簡單啊!并且設(shè)定錯(cuò)誤也不打緊,因?yàn)槲覀兛梢岳?/etc/init.d/network restart?來重新啟動整個(gè)網(wǎng)絡(luò)接口,那么之前手動的設(shè)定數(shù)據(jù)會全部都失效喔!另外, 要啟動某個(gè)網(wǎng)絡(luò)接口,但又不讓他具有 IP 參數(shù)時(shí),直接給他?ifconfig eth0 up?即可! 這個(gè)動作經(jīng)常在無線網(wǎng)卡當(dāng)中會進(jìn)行,因?yàn)槲覀儽仨氁獑訜o線網(wǎng)卡讓他去偵測 AP 存在與否啊!
-
ifup, ifdown
實(shí)時(shí)的手動修改一些網(wǎng)絡(luò)接口參數(shù),可以利用 ifconfig 來達(dá)成,如果是要直接以配置文件, 亦即是在 /etc/sysconfig/network-scripts 里面的 ifcfg-ethx 等檔案的設(shè)定參數(shù)來啟動的話, 那就得要透過 ifdown 或 ifup 來達(dá)成了。
| [root@www ~]# ifup {interface} [root@www ~]# ifdown {interface}[root@www ~]# ifup eth0 |
ifup 與 ifdown 真是太簡單了!這兩支程序其實(shí)是 script 而已,他會直接到 /etc/sysconfig/network-scripts 目錄下搜尋對應(yīng)的配置文件,例如 ifup?eth0?時(shí),他會找出 ifcfg-eth0?這個(gè)檔案的內(nèi)容,然后來加以設(shè)定。 關(guān)于 ifcfg-eth0 的設(shè)定則請參考第四章的說明。
不過,由于這兩支程序主要是搜尋配置文件 (ifcfg-ethx) 來進(jìn)行啟動與關(guān)閉的, 所以在使用前請確定 ifcfg-ethx 是否真的存在于正確的目錄內(nèi),否則會啟動失敗喔! 另外,如果以 ifconfig eth0 .... 來設(shè)定或者是修改了網(wǎng)絡(luò)接口后, 那就無法再以 ifdown eth0 的方式來關(guān)閉了!因?yàn)?ifdown 會分析比對目前的網(wǎng)絡(luò)參數(shù)與 ifcfg-eth0 是否相符,不符的話,就會放棄該次動作。因此,使用 ifconfig 修改完畢后,應(yīng)該要以 ifconfig eth0 down 才能夠關(guān)閉該界面喔!
5.1.2 路由修改: route
我們在第二章網(wǎng)絡(luò)基礎(chǔ)的時(shí)候談過關(guān)于路由的問題, 兩部主機(jī)之間一定要有路由才能夠互通 TCP/IP 的協(xié)議,否則就無法進(jìn)行聯(lián)機(jī)啊!一般來說,只要有網(wǎng)絡(luò)接口, 該接口就會產(chǎn)生一個(gè)路由,所以我們安裝的主機(jī)有一個(gè) eth0 的接口,看起來就會是這樣:
| [root@www ~]# route [-nee] [root@www ~]# route add [-net|-host] [網(wǎng)域或主機(jī)] netmask [mask] [gw|dev] [root@www ~]# route del [-net|-host] [網(wǎng)域或主機(jī)] netmask [mask] [gw|dev] 觀察的參數(shù):-n :不要使用通訊協(xié)議或主機(jī)名,直接使用 IP 或 port number;-ee :使用更詳細(xì)的信息來顯示 增加 (add) 與刪除 (del) 路由的相關(guān)參數(shù):-net :表示后面接的路由為一個(gè)網(wǎng)域;-host :表示后面接的為連接到單部主機(jī)的路由;netmask :與網(wǎng)域有關(guān),可以設(shè)定 netmask 決定網(wǎng)域的大小;gw :gateway 的簡寫,后續(xù)接的是 IP 的數(shù)值喔,與 dev 不同;dev :如果只是要指定由那一塊網(wǎng)絡(luò)卡聯(lián)機(jī)出去,則使用這個(gè)設(shè)定,后面接 eth0 等 # 范例一:單純的觀察路由狀態(tài) [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 |
由上面的例子當(dāng)中仔細(xì)觀察 route 與 route -n 的輸出結(jié)果,你可以發(fā)現(xiàn)有加 -n 參數(shù)的主要是顯示出 IP ,至于使用 route 而已的話,顯示的則是『主機(jī)名』喔!也就是說,在預(yù)設(shè)的情況下, route 會去找出該 IP 的主機(jī)名,如果找不到呢? 就會顯示的鈍鈍的(有點(diǎn)小慢),所以說,鳥哥通常都直接使用 route -n 啦! 由上面看起來,我們也知道?default = 0.0.0.0/0.0.0.0?, 而上面的信息有哪些你必須要知道的呢?
- Destination, Genmask:這兩個(gè)玩意兒就是分別是 network 與 netmask 啦!所以這兩個(gè)咚咚就組合成為一個(gè)完整的網(wǎng)域啰!
- Gateway:該網(wǎng)域是通過哪個(gè) gateway 連接出去的?如果顯示 0.0.0.0 表示該路由是直接由本機(jī)傳送,亦即可以透過局域網(wǎng)絡(luò)的 MAC 直接傳訊;如果有顯示 IP 的話,表示該路由需要經(jīng)過路由器 (通訊閘) 的幫忙才能夠傳送出去。
- Flags:總共有多個(gè)旗標(biāo),代表的意義如下:
- U (route is up):該路由是啟動的;
- H (target is a host):目標(biāo)是一部主機(jī) (IP) 而非網(wǎng)域;
- G (use gateway):需要透過外部的主機(jī) (gateway) 來轉(zhuǎn)遞封包;
- R (reinstate route for dynamic routing):使用動態(tài)路由時(shí),恢復(fù)路由信息的旗標(biāo);
- D (dynamically installed by daemon or redirect):已經(jīng)由服務(wù)或轉(zhuǎn) port 功能設(shè)定為動態(tài)路由
- M (modified from routing daemon or redirect):路由已經(jīng)被修改了;
- ! (reject route):這個(gè)路由將不會被接受(用來抵擋不安全的網(wǎng)域!)
- Iface:這個(gè)路由傳遞封包的接口。
此外,觀察一下上面的路由排列順序喔,依序是由小網(wǎng)域 (192.168.1.0/24 是 Class C),逐漸到大網(wǎng)域 (169.254.0.0/16 Class B) 最后則是預(yù)設(shè)路由 (0.0.0.0/0.0.0.0)。 然后當(dāng)我們要判斷某個(gè)網(wǎng)絡(luò)封包應(yīng)該如何傳送的時(shí)候,該封包會經(jīng)由這個(gè)路由的過程來判斷喔! 舉例來說,我上頭僅有三個(gè)路由,若我有一個(gè)傳往 192.168.1.20 的封包要傳遞,那首先會找 192.168.1.0/24 這個(gè)網(wǎng)域的路由,找到了!所以直接由 eth0 傳送出去;
如果是傳送到 Yahoo 的主機(jī)呢? Yahoo 的主機(jī) IP 是 119.160.246.241,我們通過判斷 1)不是 192.168.1.0/24, 2)不是 169.254.0.0/16 結(jié)果到達(dá) 3)0/0 時(shí),OK!傳出去了,透過 eth0 將封包傳給 192.168.1.254 那部 gateway 主機(jī)啊!所以說,路由是有順序的。
因此當(dāng)你重復(fù)設(shè)定多個(gè)同樣的路由時(shí), 例如在你的主機(jī)上的兩張網(wǎng)絡(luò)卡設(shè)定為相同網(wǎng)域的 IP 時(shí),會出現(xiàn)什么情況?會出現(xià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 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 |
也就是說,由于路由是依照順序來排列與傳送的, 所以不論封包是由那個(gè)界面 (eth0, eth1) 所接收,都會由上述的 eth0 傳送出去, 所以,在一部主機(jī)上面設(shè)定兩個(gè)相同網(wǎng)域的 IP 本身沒有什么意義!有點(diǎn)多此一舉就是了。 除非是類似虛擬機(jī) (Xen, VMware 等軟件) 所架設(shè)的多主機(jī)時(shí),才會有這個(gè)必要~
| # 范例二:路由的增加與刪除 [root@www ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0 # 上面這個(gè)動作可以刪除掉 169.254.0.0/16 這個(gè)網(wǎng)域! # 請注意,在刪除的時(shí)候,需要將路由表上面出現(xiàn)的信息都寫入 # 包括 netmask , dev 等等參數(shù)喔!注意注意[root@www ~]# route add -net 192.168.100.0 \ > netmask 255.255.255.0 dev eth0 # 透過 route add 來增加一個(gè)路由!請注意,這個(gè)路由的設(shè)定必須要能夠與你的網(wǎng)絡(luò)互通。 # 舉例來說,如果我下達(dá)底下的指令就會顯示錯(cuò)誤: # route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254 # 因?yàn)槲业闹鳈C(jī)內(nèi)僅有 192.168.1.11 這個(gè) IP ,所以不能直接與 192.168.200.254 # 這個(gè)網(wǎng)段直接使用 MAC 互通!這樣說,可以理解嗎?[root@www ~]# route add default gw 192.168.1.250 # 增加預(yù)設(shè)路由的方法!請注意,只要有一個(gè)預(yù)設(shè)路由就夠了喔! # 同樣的,那個(gè) 192.168.1.250 的 IP 也需要能與你的 LAN 溝通才行! # 在這個(gè)地方如果你隨便設(shè)定后,記得使用底下的指令重新設(shè)定你的網(wǎng)絡(luò) # /etc/init.d/network restart |
如果是要進(jìn)行路由的刪除與增加,那就得要參考上面的例子了,其實(shí),使用 man route 里面的數(shù)據(jù)就很豐富了!仔細(xì)查閱一下啰! 你只要記得,當(dāng)出現(xiàn)『SIOCADDRT: Network is unreachable』 這個(gè)錯(cuò)誤時(shí),肯定是由于 gw 后面接的 IP 無法直接與你的網(wǎng)域溝通 (Gateway 并不在你的網(wǎng)域內(nèi)), 所以,趕緊檢查一下是否輸入錯(cuò)誤啊!
| Tips: 一般來說,鳥哥如果接觸到一個(gè)新的環(huán)境內(nèi)的主機(jī),在不想要更動原系統(tǒng)的配置文件情況下,然后預(yù)計(jì)使用本書的網(wǎng)絡(luò)環(huán)境設(shè)定時(shí), 手動的處理就變成:『ifconfig eth0 192.168.1.100; route add default gw 192.168.1.254』這樣就搞定了! 直接聯(lián)網(wǎng)與測試。等到完成測試后,再給她 /etc/init.d/network restart 恢復(fù)原系統(tǒng)的網(wǎng)絡(luò)即可。 |
5.1.3 網(wǎng)絡(luò)參數(shù)綜合指令: ip
ip 是個(gè)指令喔!并不是那個(gè) TCP/IP 的 IP 啦!這個(gè) ip 指令的功能可多了!基本上,他就是整合了 ifconfig 與 route 這兩個(gè)指令啰~不過, ip 可以達(dá)成的功能卻又多更多!真是個(gè)相當(dāng)厲害的指令。如果你有興趣的話,請自行 vi /sbin/ifup ,就知道整個(gè) ifup 就是利用 ip 這個(gè)指令來達(dá)成的。好了,如何使用呢?讓我們來瞧一瞧先!
| [root@www ~]# ip [option] [動作] [指令] 選項(xiàng)與參數(shù): option :設(shè)定的參數(shù),主要有:-s :顯示出該裝置的統(tǒng)計(jì)數(shù)據(jù)(statistics),例如總接受封包數(shù)等; 動作:亦即是可以針對哪些網(wǎng)絡(luò)參數(shù)進(jìn)行動作,包括有:link :關(guān)于裝置 (device) 的相關(guān)設(shè)定,包括 MTU, MAC 地址等等addr/address :關(guān)于額外的 IP 協(xié)議,例如多 IP 的達(dá)成等等;route :與路由有關(guān)的相關(guān)設(shè)定 |
由上面的語法我們可以知道, ip 除了可以設(shè)定一些基本的網(wǎng)絡(luò)參數(shù)之外,還能夠進(jìn)行額外的 IP 協(xié)議,包括多 IP 的達(dá)成,真是太完美了!底下我們就分三個(gè)部分 (link, addr, route) 來介紹這個(gè) ip 指令吧!
-
關(guān)于裝置接口 (device) 的相關(guān)設(shè)定: ip link
ip link 可以設(shè)定與裝置 (device) 有關(guān)的相關(guān)參數(shù),包括 MTU 以及該網(wǎng)絡(luò)接口的 MAC 等等,當(dāng)然也可以啟動 (up) 或關(guān)閉 (down) 某個(gè)網(wǎng)絡(luò)接口啦!整個(gè)語法是這樣的:
| [root@www ~]# ip [-s] link show <== 單純的查閱該裝置相關(guān)的信息 [root@www ~]# ip link set [device] [動作與參數(shù)] 選項(xiàng)與參數(shù): show:僅顯示出這個(gè)裝置的相關(guān)內(nèi)容,如果加上 -s 會顯示更多統(tǒng)計(jì)數(shù)據(jù); set :可以開始設(shè)定項(xiàng)目, device 指的是 eth0, eth1 等等界面代號; 動作與參數(shù):包括有底下的這些動作:up|down :啟動 (up) 或關(guān)閉 (down) 某個(gè)接口,其他參數(shù)使用默認(rèn)的以太網(wǎng)絡(luò);address :如果這個(gè)裝置可以更改 MAC 的話,用這個(gè)參數(shù)修改!name :給予這個(gè)裝置一個(gè)特殊的名字;mtu :就是最大傳輸單元啊!# 范例一:顯示出所有的接口信息 [root@www ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWNlink/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 1000link/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 1000link/ether 08:00:27:2a:30:14 brd ff:ff:ff:ff:ff:ff 4: sit0: <NOARP> mtu 1480 qdisc noop state DOWNlink/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 1000link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ffRX: bytes packets errors dropped overrun mcast314685 3354 0 0 0 0TX: bytes packets errors dropped carrier collsns27200 199 0 0 0 0 |
使用 ip link show 可以顯示出整個(gè)裝置接口的硬件相關(guān)信息,如上所示,包括網(wǎng)卡地址(MAC)、MTU等等, 比較有趣的應(yīng)該是那個(gè) sit0 的接口了,那個(gè) sit0 的界面是用在 IPv4 及 IPv6 的封包轉(zhuǎn)換上的, 對于我們僅使用 IPv4 的網(wǎng)絡(luò)是沒有作用的。 lo 及 sit0 都是主機(jī)內(nèi)部所自行設(shè)定的。 而如果加上 -s 的參數(shù)后,則這個(gè)網(wǎng)絡(luò)卡的相關(guān)統(tǒng)計(jì)信息就會被列出來, 包括接收 (RX) 及傳送 (TX) 的封包數(shù)量等等,詳細(xì)的內(nèi)容與 ifconfig 所輸出的結(jié)果相同的。
| # 范例二:啟動、關(guān)閉與設(shè)定裝置的相關(guān)信息 [root@www ~]# ip link set eth0 up # 啟動 eth0 這個(gè)裝置接口;[root@www ~]# ip link set eth0 down # 阿就關(guān)閉啊!簡單的要命~[root@www ~]# ip link set eth0 mtu 1000 # 更改 MTU 的值,達(dá)到 1000 bytes,單位就是 bytes 啊! |
更新網(wǎng)絡(luò)卡的 MTU 使用 ifconfig 也可以達(dá)成啊!沒啥了不起,不過,如果是要更改『網(wǎng)絡(luò)卡代號、 MAC 地址的信息』的話,那可就得使用 ip 啰~不過,設(shè)定前可能得要先關(guān)閉該網(wǎng)絡(luò)卡,否則會不成功。 如下所示:
| # 范例三:修改網(wǎng)絡(luò)卡代號、MAC 等參數(shù) [root@www ~]# ip link set eth0 name vbird SIOCSIFNAME: Device or resource busy # 因?yàn)樵撗b置目前是啟動的,所以不能這樣做設(shè)定。你應(yīng)該要這樣做:[root@www ~]# ip link set eth0 down <==關(guān)閉界面 [root@www ~]# ip link set eth0 name vbird <==重新設(shè)定 [root@www ~]# ip link show <==觀察一下 2: vbird: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff # 怕了吧!連網(wǎng)絡(luò)卡代號都可以改變!不過,玩玩后記得改回來啊! # 因?yàn)槲覀兊?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 # 如果你的網(wǎng)絡(luò)卡支持硬件地址(MAC)可以更改的話,上面這個(gè)動作就可以更改 # 你的網(wǎng)絡(luò)卡地址了!厲害吧!不過,還是那句老話,測試完之后請立刻改回來啊! |
在這個(gè)裝置的硬件相關(guān)信息設(shè)定上面,包括 MTU, MAC 以及傳輸?shù)哪J降鹊?#xff0c;都可以在這里設(shè)定。 有趣的是那個(gè) address 的項(xiàng)目,那個(gè)項(xiàng)目后面接的可是硬件地址 (MAC) 而不是 IP 喔! 很容易搞錯(cuò)啊!切記切記!更多的硬件參數(shù)可以使用 man ip 查閱一下與 ip link 有關(guān)的設(shè)定。
-
關(guān)于額外的 IP 相關(guān)設(shè)定: ip address
如果說 ip link 是與?OSI 七層協(xié)定?的第二層資料連階層有關(guān)的話,那么 ip address (ip addr) 就是與第三層網(wǎng)絡(luò)層有關(guān)的參數(shù)啦! 主要是在設(shè)定與 IP 有關(guān)的各項(xiàng)參數(shù),包括 netmask, broadcast 等等。
| [root@www ~]# ip address show <==就是查閱 IP 參數(shù)啊! [root@www ~]# ip address [add|del] [IP參數(shù)] [dev 裝置名] [相關(guān)參數(shù)] 選項(xiàng)與參數(shù): show :單純的顯示出接口的 IP 信息啊; add|del :進(jìn)行相關(guān)參數(shù)的增加 (add) 或刪除 (del) 設(shè)定,主要有:IP 參數(shù):主要就是網(wǎng)域的設(shè)定,例如 192.168.100.100/24 之類的設(shè)定喔;dev :這個(gè) IP 參數(shù)所要設(shè)定的接口,例如 eth0, eth1 等等;相關(guān)參數(shù):主要有底下這些:broadcast:設(shè)定廣播地址,如果設(shè)定值是 + 表示『讓系統(tǒng)自動計(jì)算』label :亦即是這個(gè)裝置的別名,例如 eth0:0 就是了!scope :這個(gè)界面的領(lǐng)域,通常是這幾個(gè)大類:global :允許來自所有來源的聯(lián)機(jī);site :僅支持 IPv6 ,僅允許本主機(jī)的聯(lián)機(jī);link :僅允許本裝置自我聯(lián)機(jī);host :僅允許本主機(jī)內(nèi)部的聯(lián)機(jī);所以當(dāng)然是使用 global 啰!預(yù)設(shè)也是 global 啦!# 范例一:顯示出所有的接口之 IP 參數(shù): [root@www ~]# ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ffinet 192.168.1.100/24 brd 192.168.1.255 scope global eth0inet6 fe80::a00:27ff:fe71:85bd/64 scope linkvalid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 08:00:27:2a:30:14 brd ff:ff:ff:ff:ff:ff 4: sit0: <NOARP> mtu 1480 qdisc noop state DOWNlink/sit 0.0.0.0 brd 0.0.0.0 |
看到上面那個(gè)特殊的字體嗎?沒錯(cuò)!那就是 IP 參數(shù)啦!也是 ip address 最主要的功能。 底下我們進(jìn)一步來新增虛擬的網(wǎng)絡(luò)介面試看看:
| # 范例二:新增一個(gè)接口,名稱假設(shè)為 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 1000link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ffinet 192.168.1.100/24 brd 192.168.1.255 scope global eth0inet 192.168.50.50/24 brd 192.168.50.255 scope global eth0:vbirdinet6 fe80::a00:27ff:fe71:85bd/64 scope linkvalid_lft forever preferred_lft forever # 看到上面的特殊字體了吧?多出了一行新的接口,且名稱是 eth0:vbird # 至于那個(gè) broadcast + 也可以寫成 broadcast 192.168.50.255 啦![root@www ~]# ifconfig eth0:vbird Link encap:Ethernet HWaddr 08:00:27:71:85:BDinet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 # 如果使用 ifconfig 就能夠看到這個(gè)怪東西了!可愛吧! ^_^# 范例三:將剛剛的界面刪除 [root@www ~]# ip address del 192.168.50.50/24 dev eth0 # 刪除就比較簡單啊! ^_^ |
-
關(guān)于路由的相關(guān)設(shè)定: ip route
這個(gè)項(xiàng)目當(dāng)然就是路由的觀察與設(shè)定啰!事實(shí)上, ip route 的功能幾乎與 route 這個(gè)指令差不多,但是,他還可以進(jìn)行額外的參數(shù)設(shè)計(jì),例如 MTU 的規(guī)劃等等,相當(dāng)?shù)膹?qiáng)悍啊!
| [root@www ~]# ip route show <==單純的顯示出路由的設(shè)定而已 [root@www ~]# ip route [add|del] [IP或網(wǎng)域] [via gateway] [dev 裝置] 選項(xiàng)與參數(shù): show :單純的顯示出路由表,也可以使用 list ; add|del :增加 (add) 或刪除 (del) 路由的意思。IP或網(wǎng)域:可使用 192.168.50.0/24 之類的網(wǎng)域或者是單純的 IP ;via :從那個(gè) gateway 出去,不一定需要;dev :由那個(gè)裝置連出去,這就需要了!mtu :可以額外的設(shè)定 MTU 的數(shù)值喔!# 范例一:顯示出目前的路由資料 [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 |
如上表所示,最簡單的功能就是顯示出目前的路由信息,其實(shí)跟 route 這個(gè)指令相同啦! 指示必須要注意幾個(gè)小東西:
- proto:此路由的路由協(xié)議,主要有 redirect, kernel, boot, static, ra 等, 其中 kernel 指的是直接由核心判斷自動設(shè)定。
- scope:路由的范圍,主要是 link ,亦即是與本裝置有關(guān)的直接聯(lián)機(jī)。
再來看一下如何進(jìn)行路由的增加與刪除吧!
| # 范例二:增加路由,主要是本機(jī)直接可溝通的網(wǎng)域 [root@www ~]# ip route add 192.168.5.0/24 dev eth0 # 針對本機(jī)直接溝通的網(wǎng)域設(shè)定好路由,不需要透過外部的路由器 [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 # 仔細(xì)看喔,因?yàn)槲矣?192.168.5.0/24 的路由存在 (我的網(wǎng)卡直接聯(lián)系), # 所以才可以將 192.168.10.0/24 的路由丟給 192.168.5.100 # 那部主機(jī)來幫忙傳遞喔!與之前提到的 route 指令是一樣的限制!# 范例四:增加預(yù)設(shè)路由 [root@www ~]# ip route add default via 192.168.1.254 dev eth0 # 那個(gè) 192.168.1.254 就是我的預(yù)設(shè)路由器 (gateway) 的意思啊! ^_^ # 真的記得,只要一個(gè)預(yù)設(shè)路由就 OK !# 范例五:刪除路由 [root@www ~]# ip route del 192.168.10.0/24 [root@www ~]# ip route del 192.168.5.0/24 |
事實(shí)上,這個(gè) ip 的指令實(shí)在是太博大精深了!剛接觸 Linux 網(wǎng)絡(luò)的朋友,可能會看到有點(diǎn)暈~ 不要緊啦!你先會使用 ifconfig, ifup , ifdown 與 route 即可, 等以后有經(jīng)驗(yàn)了之后,再繼續(xù)回來玩 ip 這個(gè)好玩的指令吧! ^_^ 有興趣的話,也可以自行參考 ethtool 這個(gè)指令喔! (man ethtool)。
5.1.4 無線網(wǎng)絡(luò): iwlist, iwconfig
這兩個(gè)指令你必須要有無線網(wǎng)卡才能夠進(jìn)行喔!這兩個(gè)指令的用途是這樣的:
- iwlist:利用無線網(wǎng)卡進(jìn)行無線 AP 的偵測與取得相關(guān)的數(shù)據(jù);
- iwconfig:設(shè)定無線網(wǎng)卡的相關(guān)參數(shù)。
這兩個(gè)指令的應(yīng)用我們在第四章里面的無線網(wǎng)卡設(shè)定談了很多了, 所以這里我們不再詳談,有興趣的朋友應(yīng)該先使用 man iwlist 與 man iwconfig 了解一下語法, 然后再到前一章的無線網(wǎng)絡(luò)小節(jié)查一查相關(guān)的用法,就了解了啦! ^_^
5.1.5 手動使用 DHCP 自動取得 IP 參數(shù): dhclient
如果你是使用 DHCP 協(xié)議在局域網(wǎng)絡(luò)內(nèi)取得 IP 的話,那么是否一定要去編輯 ifcfg-eth0 內(nèi)的 BOOTPROTO 呢? 嘿嘿!有個(gè)更快速的作法,那就是利用 dhclient 這個(gè)指令~因?yàn)檫@個(gè)指令才是真正發(fā)送 dhcp 要求工作的程序啊!那要如何使用呢?很簡單!如果不考慮其他的參數(shù),使用底下的方法即可:
| [root@www ~]# dhclient eth0 |
夠簡單吧!這樣就可以立刻叫我們的網(wǎng)絡(luò)卡以 dhcp 協(xié)議去嘗試取得 IP 喔!
5.2 網(wǎng)絡(luò)偵錯(cuò)與觀察指令
在網(wǎng)絡(luò)的互助論壇中,最常聽到的一句話就是:『高手求救!我的 Linux 不能連上網(wǎng)絡(luò)了!』我的天吶!不能上網(wǎng)絡(luò)的原因多的很!而要完全搞懂也不是一件簡單的事情呢! 不過,事實(shí)上我們可以自己使用測試軟件來追蹤可能的錯(cuò)誤原因,而很多的網(wǎng)絡(luò)偵測指令其實(shí)在 Linux 里頭已經(jīng)都預(yù)設(shè)存在了,只要你好好的學(xué)一學(xué)基本的偵測指令,那么一些朋友在告訴你如何偵錯(cuò)的時(shí)候, 你應(yīng)該就立刻可以知道如何來搞定他啰!
其實(shí)我們在第四章談到的五個(gè)檢查步驟已經(jīng)是相當(dāng)詳細(xì)的網(wǎng)絡(luò)偵錯(cuò)流程了! 只是還有些重要的偵測指令也得要來了解一下才好!
5.2.1 兩部主機(jī)兩點(diǎn)溝通: ping
這個(gè) ping 是很重要的指令,ping 主要透過?ICMP 封包?來進(jìn)行整個(gè)網(wǎng)絡(luò)的狀況報(bào)告,當(dāng)然啦,最重要的就是那個(gè) ICMP type 0, 8 這兩個(gè)類型, 分別是要求回報(bào)與主動回報(bào)網(wǎng)絡(luò)狀態(tài)是否存在的特性。要特別注意的是, ping 還是需要透過?IP 封包來傳送 ICMP 封包的, 而 IP 封包里面有個(gè)相當(dāng)重要的 TTL 屬性,這是很重要的一個(gè)路由特性, 詳細(xì)的 IP 與 ICMP 表頭資料請參考第二章網(wǎng)絡(luò)基礎(chǔ)的詳細(xì)介紹。
| [root@www ~]# ping [選項(xiàng)與參數(shù)] IP 選項(xiàng)與參數(shù): -c 數(shù)值:后面接的是執(zhí)行 ping 的次數(shù),例如 -c 5 ; -n :在輸出數(shù)據(jù)時(shí)不進(jìn)行 IP 與主機(jī)名的反查,直接使用 IP 輸出(速度較快); -s 數(shù)值:發(fā)送出去的 ICMP 封包大小,預(yù)設(shè)為 56bytes,不過你可以放大此一數(shù)值; -t 數(shù)值:TTL 的數(shù)值,預(yù)設(shè)是 255,每經(jīng)過一個(gè)節(jié)點(diǎn)就會少一; -W 數(shù)值:等待響應(yīng)對方主機(jī)的秒數(shù)。 -M [do|dont] :主要在偵測網(wǎng)絡(luò)的 MTU 數(shù)值大小,兩個(gè)常見的項(xiàng)目是:do :代表傳送一個(gè) DF (Don't Fragment) 旗標(biāo),讓封包不能重新拆包與打包;dont:代表不要傳送 DF 旗標(biāo),表示封包可以在其他主機(jī)上拆包與打包# 范例一:偵測一下 168.95.1.1 這部 DNS 主機(jī)是否存在? [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 封包去要求對方主機(jī)回應(yīng)是否存在于網(wǎng)絡(luò)環(huán)境中,上面的響應(yīng)消息當(dāng)中,幾個(gè)重要的項(xiàng)目是這樣的:
- 64 bytes:表示這次傳送的 ICMP 封包大小為 64 bytes 這么大,這是默認(rèn)值, 在某些特殊場合中,例如要搜索整個(gè)網(wǎng)絡(luò)內(nèi)最大的 MTU 時(shí),可以使用 -s 2000 之類的數(shù)值來取代;
- icmp_seq=1:ICMP 所偵測進(jìn)行的次數(shù),第一次編號為 1 ;
- ttl=243:TTL 與 IP 封包內(nèi)的 TTL 是相同的,每經(jīng)過一個(gè)帶有 MAC 的節(jié)點(diǎn) (node) 時(shí),例如 router, bridge 時(shí), TTL 就會減少一,預(yù)設(shè)的 TTL 為 255 , 你可以透過 -t 150 之類的方法來重新設(shè)定預(yù)設(shè) TTL 數(shù)值;
- time=15.4 ms:響應(yīng)時(shí)間,單位有 ms(0.001秒)及 us(0.000001秒), 一般來說,越小的響應(yīng)時(shí)間,表示兩部主機(jī)之間的網(wǎng)絡(luò)聯(lián)機(jī)越良好!
如果你忘記加上 -c 3 這樣的規(guī)定偵測次數(shù),那就得要使用 [ctrl]-c 將他結(jié)束掉了!
| 例題: 寫一支腳本程序 ping.sh ,透過這支腳本程序,你可以用 ping 偵測整個(gè)網(wǎng)域的主機(jī)是否有響應(yīng)。此外,每部主機(jī)的偵測僅等待一秒鐘,也僅偵測一次。 答: 由于僅偵測一次且等待一秒,因此 ping 的選項(xiàng)為: -W1 -c1 ,而位于本機(jī)所在的區(qū)網(wǎng)為 192.168.1.0/24 ,所以可以這樣寫 (vim /root/bin/ping.sh): #!/bin/bash for siteip in $(seq 1 254) dosite="192.168.1.${siteip}"ping -c1 -W1 ${site} &> /dev/nullif [ "$?" == "0" ]; thenecho "$site is UP"elseecho "$site is DOWN"fi done |
特別注意一下,如果你的主機(jī)與待偵測主機(jī)并不在同一個(gè)網(wǎng)域內(nèi), 那么 TTL 預(yù)設(shè)使用 255 ,如果是同一個(gè)網(wǎng)域內(nèi),那么 TTL 預(yù)設(shè)則使用 64 喔!
- 用 ping 追蹤路徑中的最大 MTU 數(shù)值
我們由第二章的網(wǎng)絡(luò)基礎(chǔ)里面談到加大訊框 (frame) 時(shí), 對于網(wǎng)絡(luò)效能是有幫助的,因?yàn)榉獍虬拇螖?shù)會減少,加上如果整個(gè)傳輸?shù)拿襟w都能夠接受這個(gè) frame 而不需要重新進(jìn)行封包的拆解與重組的話,那么效能當(dāng)然會更好,那個(gè)修改 frame 大小的參數(shù)就是?MTU?啦!
好了,現(xiàn)在我們知道網(wǎng)絡(luò)卡的 MTU 修改可以透過?ifconfig?或者是?ip?等指令來達(dá)成,那么追蹤整個(gè)網(wǎng)絡(luò)傳輸?shù)淖畲?MTU 時(shí),又該如何查詢?呵呵!最簡單的方法當(dāng)然是透過 ping 傳送一個(gè)大封包, 并且不許中繼的路由器或 switch 將該封包重組,那就能夠處理啦!沒錯(cuò)!可以這樣的:
不過,你需要知道的是,由于?IP 封包表頭 (不含 options) 就已經(jīng)占用了 20 bytes?,再加上 ICMP 的表頭有 8 bytes ,所以當(dāng)然你在使用 -s size 的時(shí)候,那個(gè)封包的大小就得要先扣除 (20+8=28) 的大小了。 因此如果要使用 MTU 為 1500 時(shí),就得要下達(dá)『 ping -s 1472 -M do xx.yy.zz.ip 』才行啊!# 范例二:找出最大的 MTU 數(shù)值 [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 # 如果有響應(yīng),那就是可以接受這個(gè)封包,如果無響應(yīng),那就表示這個(gè) 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) # 這個(gè)錯(cuò)誤訊息是說,本地端的 MTU 才到 1500 而已,你要偵測 8000 的 MTU # 根本就是無法達(dá)成的!那要如何是好?用前一小節(jié)介紹的 ip link 來進(jìn)行 MTU 設(shè)定吧!
另外,由于本地端的網(wǎng)絡(luò)卡 MTU 也會影響到偵測,所以如果想要偵測整個(gè)傳輸媒體的 MTU 數(shù)值, 那么每個(gè)可以調(diào)整的主機(jī)就得要先使用 ifcofig 或 ip 先將 MTU 調(diào)大,然后再去進(jìn)行偵測, 否則就會出現(xiàn)像上面提供的案例一樣,可能會出現(xiàn)錯(cuò)誤訊息的!
不過這個(gè) MTU 不要隨便調(diào)整啊!除非真的有問題。通常調(diào)整 MTU 的時(shí)間是在這個(gè)時(shí)候:
- 因?yàn)槿康闹鳈C(jī)群都是在內(nèi)部的區(qū)網(wǎng),例如叢集架構(gòu) (cluster) 的環(huán)境下, 由于內(nèi)部的網(wǎng)絡(luò)節(jié)點(diǎn)都是我們可以控制的,因此可以透過修改 MTU 來增進(jìn)網(wǎng)絡(luò)效能;
- 因?yàn)椴僮飨到y(tǒng)默認(rèn)的 MTU 與你的網(wǎng)域不符,導(dǎo)致某些網(wǎng)站可以順利聯(lián)機(jī),某些網(wǎng)站則無法聯(lián)機(jī)。 以 Windows 操作系統(tǒng)作為聯(lián)機(jī)分享的主機(jī)時(shí),在 Client 端挺容易發(fā)生這個(gè)問題;
如果是要連上 Internet 的主機(jī),注意不要隨便調(diào)整 MTU ,因?yàn)槲覀儫o法知道 Internet 上面的每部機(jī)器能夠支持的 MTU 到多大,因?yàn)?.....不是我們能夠管的到的嘛 ^_^! 另外,其實(shí)每種聯(lián)機(jī)方式都有不同的 MTU 值,常見的各種接口的 MTU 值分別為︰
網(wǎng)絡(luò)接口 MTU Ethernet 1500 PPPoE 1492 Dial-up(Modem) 576
5.2.2 兩主機(jī)間各節(jié)點(diǎn)分析: traceroute
我們前面談到的指令大多數(shù)都是針對主機(jī)的網(wǎng)絡(luò)參數(shù)設(shè)定所需要的,而 ping 是兩部主機(jī)之間的回聲與否判斷, 那么有沒有指令可以追蹤兩部主機(jī)之間通過的各個(gè)節(jié)點(diǎn) (node) 通訊狀況的好壞呢?舉例來說,如果我們聯(lián)機(jī)到 yahoo 的速度比平常慢,你覺得是 (1)自己的網(wǎng)絡(luò)環(huán)境有問題? (2)還是外部的 Internet 有問題?如果是 (1) 的話,我們當(dāng)然需要檢查自己的網(wǎng)絡(luò)環(huán)境啊,看看是否又有誰中毒了?但如果是 Internet 的問題呢?那只有『等等等』啊! 判斷是 (1) 還是 (2) 就得要使用 traceroute 這個(gè)指令啦!
| [root@www ~]# traceroute [選項(xiàng)與參數(shù)] IP 選項(xiàng)與參數(shù): -n :可以不必進(jìn)行主機(jī)的名稱解析,單純用 IP ,速度較快! -U :使用 UDP 的 port 33434 來進(jìn)行偵測,這是預(yù)設(shè)的偵測協(xié)議; -I :使用 ICMP 的方式來進(jìn)行偵測; -T :使用 TCP 來進(jìn)行偵測,一般使用 port 80 測試 -w :若對方主機(jī)在幾秒鐘內(nèi)沒有回聲就宣告不治...預(yù)設(shè)是 5 秒 -p 埠號:若不想使用 UDP 與 TCP 的預(yù)設(shè)埠號來偵測,可在此改變埠號。 -i 裝置:用在比較復(fù)雜的環(huán)境,如果你的網(wǎng)絡(luò)接口很多很復(fù)雜時(shí),才會用到這個(gè)參數(shù);舉例來說,你有兩條 ADSL 可以連接到外部,那你的主機(jī)會有兩個(gè) ppp,你可以使用 -i 來選擇是 ppp0 還是 ppp1 啦! -g 路由:與 -i 的參數(shù)相仿,只是 -g 后面接的是 gateway 的 IP 就是了。# 范例一:偵測本機(jī)到 yahoo 去的各節(jié)點(diǎn)聯(lián)機(jī)狀態(tài) [root@www ~]# traceroute -n tw.yahoo.com traceroute to tw.yahoo.com (119.160.246.241), 30 hops max, 40 byte packets1 192.168.1.254 0.279 ms 0.156 ms 0.169 ms2 172.20.168.254 0.430 ms 0.513 ms 0.409 ms3 10.40.1.1 0.996 ms 0.890 ms 1.042 ms4 203.72.191.85 0.942 ms 0.969 ms 0.951 ms5 211.20.206.58 1.360 ms 1.379 ms 1.355 ms6 203.75.72.90 1.123 ms 0.988 ms 1.086 ms7 220.128.24.22 11.238 ms 11.179 ms 11.128 ms8 220.128.1.82 12.456 ms 12.327 ms 12.221 ms9 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 * * * <==可能有防火墻裝置等情況發(fā)生所致 |
這個(gè) traceroute 挺有意思的,這個(gè)指令會針對欲連接的目的地之所有 node 進(jìn)行 UDP 的逾時(shí)等待, 例如上面的例子當(dāng)中,由鳥哥的主機(jī)連接到 Yahoo 時(shí),他會經(jīng)過 12 個(gè)節(jié)點(diǎn)以上,traceroute 會主動的對這 12 個(gè)節(jié)點(diǎn)做 UDP 的回聲等待,并偵測回復(fù)的時(shí)間,每節(jié)點(diǎn)偵測三次,最終回傳像上頭顯示的結(jié)果。 你可以發(fā)現(xiàn)每個(gè)節(jié)點(diǎn)其實(shí)回復(fù)的時(shí)間大約在 50 ms 以內(nèi),算是還可以的 Internet 環(huán)境了。
比較特殊的算是第 10/12 個(gè),會回傳星號的,代表該 node 可能設(shè)有某些防護(hù)措施,讓我們發(fā)送的封包信息被丟棄所致。 因?yàn)槲覀兪侵苯油高^路由器轉(zhuǎn)遞封包,并沒有進(jìn)入路由器去取得路由器的使用資源,所以某些路由器僅支持封包轉(zhuǎn)遞, 并不會接受來自客戶端的各項(xiàng)偵測啦!此時(shí)就會出現(xiàn)上述的問題。因?yàn)?traceroute 預(yù)設(shè)使用 UDP 封包,如果你想嘗試使用其他封包, 那么 -I 或 -T 可以試看看啰!
由于目前 UDP/ICMP 的攻擊層出不窮,因此很多路由器可能就此取消這兩個(gè)封包的響應(yīng)功能。所以我們可以使用 TCP 來偵測呦! 例如使用同樣的方法,透過等待時(shí)間 1 秒,以及 TCP 80 埠口的情況下,可以這樣做:
| [root@www ~]# traceroute -w 1 -n -T tw.yahoo.com |
5.2.3 察看本機(jī)的網(wǎng)絡(luò)聯(lián)機(jī)與后門: netstat
如果你覺得你的某個(gè)網(wǎng)絡(luò)服務(wù)明明就啟動了,但是就是無法造成聯(lián)機(jī)的話,那么應(yīng)該怎么辦? 首先你應(yīng)該要查詢一下自己的網(wǎng)絡(luò)接口所監(jiān)聽的端口 (port) 來看看是否真的有啟動,因?yàn)橛袝r(shí)候屏幕上面顯示的 [OK] 并不一定是 OK 啊! ^_^
| [root@www ~]# netstat -[rn] <==與路由有關(guān)的參數(shù) [root@www ~]# netstat -[antulpc] <==與網(wǎng)絡(luò)接口有關(guān)的參數(shù) 選項(xiàng)與參數(shù): 與路由 (route) 有關(guān)的參數(shù)說明: -r :列出路由表(route table),功能如同 route 這個(gè)指令; -n :不使用主機(jī)名與服務(wù)名稱,使用 IP 與 port number ,如同 route -n 與網(wǎng)絡(luò)接口有關(guān)的參數(shù): -a :列出所有的聯(lián)機(jī)狀態(tài),包括 tcp/udp/unix socket 等; -t :僅列出 TCP 封包的聯(lián)機(jī); -u :僅列出 UDP 封包的聯(lián)機(jī); -l :僅列出有在 Listen (監(jiān)聽) 的服務(wù)之網(wǎng)絡(luò)狀態(tài); -p :列出 PID 與 Program 的檔名; -c :可以設(shè)定幾秒鐘后自動更新一次,例如 -c 5 每五秒更新一次網(wǎng)絡(luò)狀態(tài)的顯示;# 范例一:列出目前的路由表狀態(tài),且以 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 # 其實(shí)這個(gè)參數(shù)就跟 route -n 一模一樣,對吧!這不是 netstat 的主要功能啦!# 范例二:列出目前的所有網(wǎng)絡(luò)聯(lián)機(jī)狀態(tài),使用 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 的網(wǎng)絡(luò)接口部分,以及傳統(tǒng)的 Unix socket 部分。 還記得我們在基礎(chǔ)篇里面曾經(jīng)談到檔案的類型嗎?那個(gè) socket 與 FIFO 檔案還記得吧? 那就是在 Unix 接口用來做為程序數(shù)據(jù)交流的接口了,也就是上頭表格內(nèi)看到的 Active Unix domain sockets 的內(nèi)容啰~
通常鳥哥都是建議加上『 -n 』這個(gè)參數(shù)的,因?yàn)榭梢员苓^主機(jī)名與服務(wù)名稱的反查,直接以 IP 及端口號碼 (port number) 來顯示,顯示的速度上會快很多!至于在輸出的訊息當(dāng)中, 我們先來談一談關(guān)于網(wǎng)絡(luò)聯(lián)機(jī)狀態(tài)的輸出部分,他主要是分為底下幾個(gè)大項(xiàng):
- Proto:該聯(lián)機(jī)的封包協(xié)議,主要為 TCP/UDP 等封包;
- Recv-Q:非由用戶程序連接所復(fù)制而來的總 bytes 數(shù);
- Send-Q:由遠(yuǎn)程主機(jī)所傳送而來,但不具有 ACK 標(biāo)志的總 bytes 數(shù), 意指主動聯(lián)機(jī) SYN 或其他標(biāo)志的封包所占的 bytes 數(shù);
- Local Address:本地端的地址,可以是 IP (-n 參數(shù)存在時(shí)), 也可以是完整的主機(jī)名。使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差異。 如上所示,在 port 22 的接口中,使用的 :::22 就是針對 IPv6 的顯示,事實(shí)上他就相同于 0.0.0.0:22 的意思。 至于 port 25 僅針對 lo 接口開放,意指 Internet 基本上是無法連接到我本機(jī)的 25 埠口啦!
- Foreign Address:遠(yuǎn)程的主機(jī) IP 與 port number
- stat:狀態(tài)欄,主要的狀態(tài)含有:
- ESTABLISED:已建立聯(lián)機(jī)的狀態(tài);
- SYN_SENT:發(fā)出主動聯(lián)機(jī) (SYN 標(biāo)志) 的聯(lián)機(jī)封包;
- SYN_RECV:接收到一個(gè)要求聯(lián)機(jī)的主動聯(lián)機(jī)封包;
- FIN_WAIT1:該插槽服務(wù)(socket)已中斷,該聯(lián)機(jī)正在斷線當(dāng)中;
- FIN_WAIT2:該聯(lián)機(jī)已掛斷,但正在等待對方主機(jī)響應(yīng)斷線確認(rèn)的封包;
- TIME_WAIT:該聯(lián)機(jī)已掛斷,但 socket 還在網(wǎng)絡(luò)上等待結(jié)束;
- LISTEN:通常用在服務(wù)的監(jiān)聽 port !可使用『 -l 』參數(shù)查閱。
基本上,我們常常談到的 netstat 的功能,就是在觀察網(wǎng)絡(luò)的聯(lián)機(jī)狀態(tài)了,而網(wǎng)絡(luò)聯(lián)機(jī)狀態(tài)中, 又以觀察『我目前開了多少的 port 在等待客戶端的聯(lián)機(jī)』以及 『目前我的網(wǎng)絡(luò)聯(lián)機(jī)狀態(tài)中,有多少聯(lián)機(jī)已建立或產(chǎn)生問題』最常見。 那你如何了解與觀察呢?通常鳥哥是這樣處理的:
| # 范例三:秀出目前已經(jīng)啟動的網(wǎng)絡(luò)服務(wù) [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 ....(底下省略).... # 上面最重要的其實(shí)是那個(gè) -l 的參數(shù),因?yàn)榭梢詢H列出有在 Listen 的 port |
你可以發(fā)現(xiàn)很多的網(wǎng)絡(luò)服務(wù)其實(shí)僅針對本機(jī)的 lo 開放而已,因特網(wǎng)是連接不到該埠口與服務(wù)的。 而由上述的數(shù)據(jù)我們也可以看到,啟動 port 111 的,其實(shí)就是 rpcbind 那只程序,那如果想要關(guān)閉這個(gè)埠口, 你可以使用 kill 刪除 PID 969,也可以使用 killall 刪除 rpcbind 這個(gè)程序即可。如此一來, 很輕松的你就能知道哪個(gè)程序啟動了哪些端口啰!
| # 范例四:觀察本機(jī)上頭所有的網(wǎng)絡(luò)聯(lián)機(jī)狀態(tài) [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 ....(底下省略).... |
看到上頭的特殊字體吧?那代表目前已經(jīng)建立聯(lián)機(jī)的一條網(wǎng)絡(luò)聯(lián)機(jī),他是由遠(yuǎn)程主機(jī) 192.168.1.101 啟動一個(gè)大于 1024 的埠口向本地端主機(jī) 192.168.1.100 的 port 22 進(jìn)行的一條聯(lián)機(jī), 你必須要想起來的是:『Client 端是隨機(jī)取一個(gè)大于 1024 以上的 port 進(jìn)行聯(lián)機(jī)』,此外『只有 root 可以啟動小于 1024 以下的 port?』,那就看的懂上頭那條聯(lián)機(jī)啰!如果這條聯(lián)機(jī)你想要砍掉他的話, 看到最右邊的 4716 了沒? kill 會用吧! ^_^
至于傳統(tǒng)的 Unix socket 的數(shù)據(jù),記得使用 man netstat 查閱一下吧! 這個(gè) Unix socket 通常是用在一些僅在本機(jī)上運(yùn)作的程序所開啟的插槽接口文件, 例如 X Window 不都是在本機(jī)上運(yùn)作而已嗎?那何必啟動網(wǎng)絡(luò)的 port 呢?當(dāng)然可以使用 Unix socket 啰,另外,例如 Postfix 這一類的網(wǎng)絡(luò)服務(wù)器,由于很多動作都是在本機(jī)上頭來完成的, 所以以會占用很多的 Unix socket 喔!
| 例題: 請說明服務(wù)名稱與 port number 的對應(yīng)在 Linux 當(dāng)中,是用那個(gè)檔案來設(shè)定對應(yīng)的? 答: /etc/services |
5.2.4 偵測主機(jī)名與 IP 對應(yīng): host, nslookup
關(guān)于主機(jī)名與 IP 的對應(yīng)中,我們主要介紹的是 DNS 客戶端功能的 dig 這個(gè)指令。不過除了這個(gè)指令之外, 其實(shí)還有兩個(gè)更簡單的指令,那就是 host 與 nslookup 啦!底下讓我們來聊聊這兩個(gè)指令吧!
-
host
這個(gè)指令可以用來查出某個(gè)主機(jī)名的 IP 喔!舉例來說,我們想要知道 tw.yahoo.com 的 IP 時(shí),可以這樣做:
| [root@www ~]# host [-a] hostname [server] 選項(xiàng)與參數(shù): -a :列出該主機(jī)詳細(xì)的各項(xiàng)主機(jī)名設(shè)定數(shù)據(jù) [server] :可以使用非為 /etc/resolv.conf 的 DNS 服務(wù)器 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 了!那么這個(gè) IP 是向誰查詢的呢?其實(shí)就是寫在?/etc/resolv.conf?那個(gè)檔案內(nèi)的 DNS 服務(wù)器 IP 啦!如果不想要使用該檔案內(nèi)的主機(jī)來查詢,也可以這樣做:
| [root@www ~]# host tw.yahoo.com 168.95.1.1 Using domain server: Name: 168.95.1.1 Address: 168.95.1.1#53 Aliases: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 |
會告訴我們所使用來查詢的主機(jī)是哪一部吶!這樣就夠清楚了吧!不過,再怎么清楚也比不過 dig 這個(gè)指令的,所以這個(gè)指令僅是參考參考啦!
-
nslookup
這玩意兒的用途與 host 基本上是一樣的,就是用來作為 IP 與主機(jī)名對應(yīng)的檢查, 同樣是使用?/etc/resolv.conf?這個(gè)檔案來作為 DNS 服務(wù)器的來源選擇。
| [root@www ~]# nslookup [-query=[type]] [hostname|IP] 選項(xiàng)與參數(shù): -query=type:查詢的類型,除了傳統(tǒng)的 IP 與主機(jī)名對應(yīng)外,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#53Non-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 的主機(jī)名 [root@www ~]# nslookup 168.95.1.1 Server: 168.95.1.1 Address: 168.95.1.1#531.1.95.168.in-addr.arpa name = dns.hinet.net. |
如何,看起來與 host 差不多吧!不過,這個(gè) nslookup 還可以由 IP 找出主機(jī)名喔! 例如那個(gè)范例二,他的主機(jī)名是: dns.hinet.net 哩!目前大家都建議使用 dig 這個(gè)指令來取代 nslookup ,我們會在第十九章 DNS 服務(wù)器那時(shí)再來好好談一談吧!
5.3 遠(yuǎn)程聯(lián)機(jī)指令與實(shí)時(shí)通訊軟件
啥是遠(yuǎn)程聯(lián)機(jī)呢?其實(shí)就是在不同的計(jì)算機(jī)之間進(jìn)行登入的情況啦!我們可以透過 telnet, ssh 或者是 ftp 等協(xié)議來進(jìn)行遠(yuǎn)程主機(jī)的登入。底下我們就分別來介紹一下這些基本的指令吧!這里僅是談到客戶端功能喔, 相關(guān)的服務(wù)器我們則會在后續(xù)進(jìn)行說明的。
5.3.1 終端機(jī)與 BBS 聯(lián)機(jī): telnet
telnet 是早期我們在個(gè)人計(jì)算機(jī)上面要鏈接到服務(wù)器工作時(shí),最重要的一個(gè)軟件了!他不但可以直接連接到服務(wù)器上頭, 還可以用來連結(jié) BBS 呢!非常棒!不過, telnet 本身的數(shù)據(jù)在傳送的時(shí)候是使用明碼 (原始的數(shù)據(jù),沒有加密) , 所以數(shù)據(jù)在 Internet 上面跑的時(shí)候,會比較危險(xiǎn)一點(diǎn) (就怕被別人監(jiān)聽啊)。 更詳細(xì)的資料我們會在第十一章遠(yuǎn)程聯(lián)機(jī)服務(wù)器內(nèi)做介紹的。
| [root@www ~]# telnet [host|IP [port]]# 范例一:連結(jié)到臺灣相當(dāng)熱門的 PTT BBS 站 ptt.cc [root@www ~]# yum install telnet <==默認(rèn)沒有安裝這軟件 [root@www ~]# telnet ptt.cc歡迎來到 批踢踢實(shí)業(yè)坊 目前有【100118】名使用者與您一同對抗炎炎夏日。請輸入代號,或以 guest 參觀,或以 new 注冊: [高手召集令] 臺灣黑客年會 暑假與你駭翻南港 http://reg.hitcon.org/hit2011 要學(xué)計(jì)算機(jī),首選臺灣大學(xué)信息訓(xùn)練班! http://tinyurl.com/3z42apw |
如上所示,我們可以透過 telnet 輕易的連結(jié)到 BBS 上面,而如果你的主機(jī)有開啟 telnet 服務(wù)器服務(wù)的話,同樣的利用『 telnet IP 』并且輸入賬號與密碼之后,就能夠登入主機(jī)了。 另外,在 Linux 上的 telnet 軟件還提供了 Kerberos 的認(rèn)證方式,有興趣的話請自行參閱 man telnet 的說明。
除了連結(jié)到服務(wù)器以及連結(jié)到 BBS 站之外, telnet 還可以用來連結(jié)到某個(gè) port (服務(wù)) 上頭吶! 舉例來說,我們可以用 telnet 連接到 port 110 ,看看這個(gè) port 是否有正確的啟動呢?
| # 范例二:偵測本機(jī)端的 110 這個(gè) port 是否正確啟動? [root@www ~]# telnet localhost 110 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused # 如果出現(xiàn)這樣的訊息,代表這個(gè) port 沒有啟動或者是這個(gè)聯(lián)機(jī)有問題, # 因?yàn)槟憧吹侥莻€(gè) 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. |
瞧!根據(jù)輸出的結(jié)果,我們就能夠知道這個(gè)通訊協(xié)議 (port number 提供的通訊協(xié)議功能) 是否有成功的啟動吶! 而在每個(gè) port 所監(jiān)聽的服務(wù)都有其特殊的指令,例如上述的 port 25 就是在本機(jī)接口所提供的電子郵件服務(wù), 那個(gè)服務(wù)所支持的指令就如同上面使用的數(shù)據(jù)一樣,但是其他的 port 就不見得支持這個(gè)『 ehlo 』的命令, 因?yàn)椴煌?port 有不同的程序嘛!所以當(dāng)然支持的命令就不同啰!
5.3.2 FTP 聯(lián)機(jī)軟件: ftp, lftp
現(xiàn)在的人們由于有高容量的 email 可以用,因此傳送檔案可以很輕松的透過 email 。不過 email 還是有單封信件容量限制, 如果想要一口氣傳送個(gè)幾百 MB 的檔案,恐怕還是得要透過 FTP 這個(gè)通訊協(xié)議才行啊!文字接口的 FTP 軟件主要有 ftp, lftp 兩個(gè),圖形接口的呢?在 CentOS 上面預(yù)設(shè)有 gftp 這個(gè)好用的東東。在這里我們僅介紹文字接口的兩個(gè)指令而已。?
-
ftp
ftp 這個(gè)指令很簡單,用在處理 FTP 服務(wù)器的下載數(shù)據(jù)啦。由于鳥哥所在的位置在昆山科大,因此這里使用昆山科大的 FTP 服務(wù)器為例:
| [root@www ~]# ftp [host|IP] [port]# 范例一:聯(lián)機(jī)到昆山科大去看看 [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 <==訊息要看啊!這個(gè) 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 <==嗯!確實(shí)是匿名登錄了! Remote system type is UNIX. Using binary mode to transfer files. ftp> <==最終登入的結(jié)果看起來是這樣! ftp> help <==提供需要的指令說明,可以常參考! ftp> dir <==顯示遠(yuǎn)程服務(wù)器的目錄內(nèi)容 (文件名列表) ftp> cd /pub <==變換目錄到 /pub 當(dāng)中 ftp> get filename <==下載單一檔案,檔名為 filename ftp> mget filename* <==下載多個(gè)檔案,可使用通配符 * ftp> put filename <==上傳 filename 這個(gè)檔案到服務(wù)器上 ftp> delete file <==刪除主機(jī)上的 file 這個(gè)檔案 ftp> mkdir dir <==建立 dir 這個(gè)目錄 ftp> lcd /home <==切換『本地端主機(jī)』的工作目錄 ftp> passive <==啟動或關(guān)閉 passive 模式 ftp> binary <==數(shù)據(jù)傳輸模式設(shè)定為 binary 格式 ftp> bye <==結(jié)束 ftp 軟件的使用 |
FTP 其實(shí)算是一個(gè)很麻煩的協(xié)議,因?yàn)樗褂脙蓚€(gè) port 分別進(jìn)行命令與數(shù)據(jù)的交流,詳細(xì)的數(shù)據(jù)我們會在第二十一章的 FTP 服務(wù)器內(nèi)詳談,這里我們先單純的介紹一下如何使用 ftp 這個(gè)軟件。首先我們當(dāng)然是需要登入啰, 所以在上頭的表格當(dāng)中我們當(dāng)然需要填入賬號與密碼了。不過由于昆山科大僅提供匿名登錄,而匿名登錄者的賬號就是『 anonymous 』所以直接填寫那個(gè)賬號即可。如果是私人的 FTP 時(shí),才需要提供一組完整的賬號與密碼啦!
登入 FTP 主機(jī)后,就能夠使用 ftp 軟件的功能進(jìn)行上傳與下載的動作,幾個(gè)常用的 ftp 內(nèi)指令如上表,不過,鳥哥建議你可以連到大學(xué)的 FTP 網(wǎng)站后,使用 help (或問號 ?) 來參考可用的指令,然后嘗試下載以測試使用一下這個(gè)指令吧!這樣以后沒有瀏覽器的時(shí)候,你也可以到 ftp 下載了呢!不錯(cuò)吧!另外你要注意的是,離開 ftp 軟件時(shí),得要輸入『 bye 』喔!不是『 exit 』啦!
如果由于某些理由,讓你的 FTP 主機(jī)的 port 開在非正規(guī)的埠口時(shí),那你就可以利用底下的方式來連接到該部主機(jī)喔!
| [root@www ~]# ftp hostname 318 # 假設(shè)對方主機(jī)的 ftp 服務(wù)開啟在 318 這個(gè) port 啊! |
-
lftp (自動化腳本)
單純使用 ftp 總是覺得很麻煩,有沒有更快速的 ftp 用戶軟件呢?讓我們可以使用類似網(wǎng)址列的方式來登入 FTP 服務(wù)器啊?有的,那就是 lftp 的功能了! lftp 預(yù)設(shè)使用匿名登錄 FTP 服務(wù)器,可以使用類似網(wǎng)址列的方式取得數(shù)據(jù), 使用上比單純的 ftp 要好用些。此外,由于可在指令列輸入賬號/密碼,可以輔助進(jìn)行程序腳本的設(shè)計(jì)喔!
| [root@www ~]# lftp [-p port] [-u user[,pass]] [host|IP] [root@www ~]# lftp -f filename [root@www ~]# lftp -c "commands" 選項(xiàng)與參數(shù): -p :后面可以直接接上遠(yuǎn)程 FTP 主機(jī)提供的 port -u :后面則是接上賬號與密碼,就能夠連接上遠(yuǎn)程主機(jī)了如果沒有加賬號密碼, lftp 默認(rèn)會使用 anonymous 嘗試匿名登錄 -f :可以將指令寫入腳本中,這樣可以幫助進(jìn)行 shell script 的自動處理喔! -c :后面直接加上所需要的指令。# 范例一:利用 lftp 登入昆山科大的 FTP 服務(wù)器 [root@www ~]# yum install lftp [root@www ~]# lftp ftp.ksu.edu.tw lftp ftp.ksu.edu.tw:~> # 瞧!一下子就登入了!很快樂吧! ^_^!你同樣可使用 help 去查閱相關(guān)內(nèi)部指令 |
至于登入 FTP 主機(jī)后,一樣可以使用『help』來顯示出可以執(zhí)行的指令,與 ftp 很類似啦!不過多了書簽的功能,而且也非常的類似 bash 吶!很不錯(cuò)呦!除了這個(gè)好用的文字接口的 FTP 軟件之外,事實(shí)上還有很多圖形接口的好用軟件呢! 最常見的就是 gftp 了,非常的容易上手喔! CentOS 本身就有提供 gftp 了,你可以拿出原版的光盤來安裝,然后進(jìn)入 X Window 后, 啟動一個(gè) shell ,輸入『 gftp 』就能夠發(fā)現(xiàn)他的好用啦!
如果你想要定時(shí)的去捉下昆山科大 FTP 網(wǎng)站下的 /pub/CentOS/RPM-GPG* 的檔案時(shí),那么那個(gè)腳本應(yīng)該要怎么寫呢? 我們嘗試來寫寫看吧!
| # 使用檔案配合 lftp 去處理時(shí): [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 |
若為非匿名登錄時(shí),則可以使用『 open -u username,password hostname 』修改 lftp.ksu.sh 的第一行! 如果再將這個(gè)腳本寫入 crontab 當(dāng)中,你就可以定時(shí)的以 FTP 進(jìn)行上傳/下載的功能啰!這就是文字指令的好處!
5.3.3 圖形接口的實(shí)時(shí)通訊軟件: pidgin (gaim 的延伸)
現(xiàn)在應(yīng)該大家都知道什么是 MSN, 雅虎實(shí)時(shí)通以及其他的通訊軟件吧?那么要連上這些服務(wù)器時(shí),該怎么處理哪?很簡單,在 X Window 底下使用 pidgin 就好了!簡直簡單到不行~請先進(jìn)入 X Window 系統(tǒng),然后經(jīng)過『應(yīng)用程序』--> 『因特網(wǎng)』-->『Pidgin 網(wǎng)絡(luò)實(shí)時(shí)通』啟動他即可 (請注意你必須已經(jīng)安裝了 pidgin 了,可用 yum install pidgin 處理)。
不過,傷腦筋的是,我們所安裝的 basic server 類型的 CentOS 6.x 主要做為服務(wù)器之用,所以連圖形接口也沒有給我們。 所以,鳥哥又用另外一部主機(jī)安裝成 Desktop 的模式,利用該部主機(jī)來測試 pidgin 這玩意兒的!因此, 底下的練習(xí)你也可以先略過,等到你安裝另一部 Desktop linux 時(shí)再來玩玩!
圖 5.3-1、pidgin 的歡迎畫面
在上圖中按下『新增』,然后你會看到如下的畫面:
圖 5.3-2、pidgin 支持的實(shí)時(shí)通訊數(shù)據(jù)
很神奇的是, pidgin 支持的通訊有夠多的!我們使用 MSN 來作個(gè)解釋好了:
圖 5.3-3、設(shè)定 MSN 的賬號示意圖
如上圖,在畫面中輸入你的賬號與密碼,如果是在公用的計(jì)算機(jī)上,千萬不要按下『記住密碼』項(xiàng)目喔!按下新增后, pidgin 預(yù)設(shè)就會嘗試登入了!登入后的畫面如下所示:
圖 5.3-4、使用 pidgin 的 MSN 方式進(jìn)行連天啰
如果想要注銷了,那么就按下圖 5.3-4 最右邊那個(gè)窗口,將『啟動』的那個(gè)方框勾選取消,你就直接注銷啰!
5.4 文字接口網(wǎng)頁瀏覽
什么?文字界面竟然有瀏覽器!別逗了好不好?呵呵!誰有那個(gè)時(shí)間在逗你呦!真的啦!有這個(gè)東西, 是在文字界面下上網(wǎng)瀏覽的好工具!分別是 links 及 wget 這兩個(gè)寶貝蛋,但是,你必需要確定你已經(jīng)安裝了這兩個(gè)套件才行。 好佳在的是,CentOS 預(yù)設(shè)這兩個(gè)玩意兒都有安裝喔!底下就讓我們來聊一聊這兩個(gè)好用的家伙吧!
5.4.1 文字瀏覽器:links
其實(shí)早期鳥哥最常使用的是 lynx 這個(gè)文字瀏覽器,不過 CentOS 從 5.x 以后默認(rèn)使用的文字瀏覽器是 links 這一支,這兩支的使用方式又非常的類似,因此,在這一版當(dāng)中,我們就僅介紹 links 啰!若對 lynx 有興趣的話, 自己 man 一下吧!
這個(gè)指令可以讓我們來瀏覽網(wǎng)頁,但鳥哥認(rèn)為,這個(gè)檔案最大的功能是在『?查閱 Linux 本機(jī)上面以 HTML 語法寫成的文件數(shù)據(jù) (document)』 怎么說呢?如果你曾經(jīng)到 Linux 本機(jī)底下的 /usr/share/doc 這個(gè)目錄看過文件數(shù)據(jù)的話, 就會常常發(fā)現(xiàn)一些網(wǎng)頁檔案,使用 vi 去查閱時(shí),老是看到一堆 HTML 的語法!有礙閱讀啊~ 這時(shí)候使用 links 就是個(gè)好方法啦!可以看的清清楚楚啊! ^_^
| [root@www ~]# links [options] [URL] 選項(xiàng)與參數(shù): -anonymous [0|1]:是否使用匿名登錄的意思; -dump [0|1] :是否將網(wǎng)頁的數(shù)據(jù)直接輸出到 standard out 而非 links 軟件功能 -dump_charset :后面接想要透過 dump 輸出到屏幕的語系編碼,big5 使用 cp950 喔# 范例一:瀏覽 Linux kernel 網(wǎng)站 [root@www ~]# links http://www.kernel.org |
當(dāng)我直接輸入 links 網(wǎng)站網(wǎng)址后,就會出現(xiàn)如下的圖示:
圖 5.4-1、使用 links 查詢網(wǎng)頁數(shù)據(jù)的顯示結(jié)果
上面這個(gè)畫面的基本說明如下:
- 進(jìn)入畫面之后,由于是文字型態(tài),所以編排可能會有點(diǎn)位移!不過不打緊!不會影響我們看咚咚!
- 這個(gè)時(shí)候可以使用『上下鍵』來讓光標(biāo)在上面的選項(xiàng)當(dāng)中(如信箱、書簽等等的),按下 Enter 就進(jìn)入該頁面
- 可以使用『左右鍵』來移動『上一頁或下一頁』
- 一些常見功能按鍵:
- h:history ,曾經(jīng)瀏覽過的 URL 就顯示到畫面中
- g:Goto URL,按 g 后輸入網(wǎng)頁地址(URL) 如 :http://www.abc.edu/等
- d:download,將該鏈接數(shù)據(jù)下載到本機(jī)成為檔案;
- q:Quit,離開 links 這個(gè)軟件;
- o:Option,進(jìn)入功能參數(shù)的設(shè)定值修改中,最終可寫入 ~/.elinks/elinks.conf 中
- Ctrl+C :強(qiáng)迫切斷 links 的執(zhí)行。
- 箭頭鍵:
- 上 :移動光標(biāo)至本頁中 "上一個(gè)可連結(jié)點(diǎn)" .
- 下 :移動光標(biāo)至本頁中 "下一個(gè)可連結(jié)點(diǎn)" .
- 左 :back. 跳回上一頁.
- 右 :進(jìn)入反白光標(biāo)所鏈接之網(wǎng)頁.
- ENTER 同鼠標(biāo) "右" 鍵.
至于如果是瀏覽 Linux 本機(jī)上面的網(wǎng)頁檔案,那就可以使用如下的方式:
| [root@www ~]# links /usr/share/doc/HTML/index.html |
在鳥哥的 CentOS 6.x 當(dāng)中,有這么一個(gè)檔案,我就可以利用 links 來取出察看吶!顯示的結(jié)果有點(diǎn)像底下這樣:
圖 5.4-2、使用 links 查詢本機(jī)的 HTML 文件檔案
當(dāng)然啦!因?yàn)槟愕沫h(huán)境可能是在 Linux 本機(jī)的 tty1~tty6 ,所以無法顯示出中文,這個(gè)時(shí)候你就得要設(shè)定為: 『LANG=en_US』之類的語系設(shè)定才行喔!另外,如果某些時(shí)刻你必須上網(wǎng)點(diǎn)選某個(gè)網(wǎng)站以自動取得更新時(shí)。 舉例來說,早期的自動在線更新主機(jī)名系統(tǒng),僅支持網(wǎng)頁更新,那你如何進(jìn)行更新呢?嘿嘿!可以使用 links 喔!利用 -dump 這個(gè)參數(shù)處理先:
| # 透過 links 將 tw.yahoo.com 的網(wǎng)頁內(nèi)容整個(gè)抓下來儲存 [root@www ~]# links -dump http://tw.yahoo.com > yahoo.html# 某個(gè)網(wǎng)站透過 GET 功能可以上傳賬號為 user 密碼為 pw ,用文字接口處理為: [root@www ~]# links -dump \ > http://some.site.name/web.php?name=user&password=pw > testfile |
上面的網(wǎng)站后面有加個(gè)問號 (?) 對吧?后面接的則是利用網(wǎng)頁的『 GET 』功能取得的各項(xiàng)變量數(shù)據(jù), 利用這個(gè)功能,我們就可以直接點(diǎn)選到該網(wǎng)站上啰!非常的方便吧!而且會將執(zhí)行的結(jié)果輸出到 testfile 檔案中,不過如果網(wǎng)站提供的數(shù)據(jù)是以『 POST 』為主的話,那鳥哥就不知道如何搞定了。 GET 與 POST 是 WWW 通訊協(xié)議中,用來將數(shù)據(jù)透過瀏覽器上傳到服務(wù)器端的一種方式, 一般來說,目前討論區(qū)或部落格等,大多使用可以支持較多數(shù)據(jù)的 POST 方式上傳啦! 關(guān)于 GET 與 POST 的相關(guān)信息我們會在第二十章 WWW 服務(wù)器當(dāng)中再次的提及!
5.4.2 文字接口下載器: wget
如果說 links 是在進(jìn)行網(wǎng)頁的『瀏覽』,那么 wget 就是在進(jìn)行『網(wǎng)頁數(shù)據(jù)的取得』。舉例來說,我們的 Linux 核心是放置在 www.kernel.org 內(nèi),主要同時(shí)提供 ftp 與 http 來下載。我們知道可以使用 lftp 來下載數(shù)據(jù),但如果想要用瀏覽器來下載呢?那就利用 wget 吧!
| [root@www ~]# wget [option] [網(wǎng)址] 選項(xiàng)與參數(shù): 若想要聯(lián)機(jī)的網(wǎng)站有提供賬號與密碼的保護(hù)時(shí),可以利用這兩個(gè)參數(shù)來輸入喔! --http-user=usrname --http-password=password --quiet :不要顯示 wget 在抓取數(shù)據(jù)時(shí)候的顯示訊息 更多的參數(shù)請自行參考 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 |
你瞧瞧~很可愛吧!不必透過瀏覽器,只要知道網(wǎng)址后,立即可以進(jìn)行檔案的下載, 又快速又方便,還可以透過 proxy 的幫助來下載呢!透過修改 /etc/wgetrc 來設(shè)定你的代理服務(wù)器:
| [root@www ~]# vim /etc/wgetrc #http_proxy = http://proxy.yoyodyne.com:18023/ <==找到底下這幾行,大約在 78 行 #ftp_proxy = http://proxy.yoyodyne.com:18023/ #use_proxy = on# 將他改成類似底下的模樣,記得,你必須要有可接受的 proxy 主機(jī)才行! http_proxy = http://proxy.ksu.edu.tw:3128/ use_proxy = on |
5.5 封包擷取功能
很多時(shí)候由于我們的網(wǎng)絡(luò)聯(lián)機(jī)出現(xiàn)問題,使用類似 ping 的軟件功能卻又無法找出問題點(diǎn),最常見的是因?yàn)槁酚膳c IP 轉(zhuǎn)遞后所產(chǎn)生的一些困擾 (請參考防火墻與 NAT 主機(jī)部分),這個(gè)時(shí)候要怎么辦?最簡單的方法就是『分析封包的流向』啰!透過分析封包的流向,我們可以了解一條聯(lián)機(jī)應(yīng)該是如何進(jìn)行雙向的聯(lián)機(jī)的動作, 也就會清楚的了解到可能發(fā)生的問題所在了!底下我們就來談一談這個(gè) tcpdump 與圖形接口的封包分析軟件吧!
5.5.1 文字接口封包擷取器: tcpdump
說實(shí)在的,對于 tcpdump 這個(gè)軟件來說,你甚至可以說這個(gè)軟件其實(shí)就是個(gè)黑客軟件, 因?yàn)樗坏梢苑治龇獍牧飨?#xff0c;連封包的內(nèi)容也可以進(jìn)行『監(jiān)聽』, 如果你使用的傳輸數(shù)據(jù)是明碼的話,不得了,在 router 或 hub 上面就可能被人家監(jiān)聽走了! 我們在第二章談到的 CSMA/CD?流程中,不是說過有所謂的『監(jiān)聽軟件』嗎?這個(gè) tcpdump 就是啦! 很可怕吶!所以,我們也要來了解一下這個(gè)軟件啊!(注:這個(gè) tcpdump 必須使用 root 的身份執(zhí)行)
| [root@www ~]# tcpdump [-AennqX] [-i 接口] [-w 儲存檔名] [-c 次數(shù)] \ [-r 檔案] [所欲擷取的封包數(shù)據(jù)格式] 選項(xiàng)與參數(shù): -A :封包的內(nèi)容以 ASCII 顯示,通常用來捉取 WWW 的網(wǎng)頁封包資料。 -e :使用資料連接層 (OSI 第二層) 的 MAC 封包數(shù)據(jù)來顯示; -nn:直接以 IP 及 port number 顯示,而非主機(jī)名與服務(wù)名稱 -q :僅列出較為簡短的封包信息,每一行的內(nèi)容比較精簡 -X :可以列出十六進(jìn)制 (hex) 以及 ASCII 的封包內(nèi)容,對于監(jiān)聽封包內(nèi)容很有用 -i :后面接要『監(jiān)聽』的網(wǎng)絡(luò)接口,例如 eth0, lo, ppp0 等等的界面; -w :如果你要將監(jiān)聽所得的封包數(shù)據(jù)儲存下來,用這個(gè)參數(shù)就對了!后面接檔名 -r :從后面接的檔案將封包數(shù)據(jù)讀出來。那個(gè)『檔案』是已經(jīng)存在的檔案,并且這個(gè)『檔案』是由 -w 所制作出來的。 -c :監(jiān)聽的封包數(shù),如果沒有這個(gè)參數(shù), tcpdump 會持續(xù)不斷的監(jiān)聽,直到使用者輸入 [ctrl]-c 為止。 所欲擷取的封包數(shù)據(jù)格式:我們可以專門針對某些通訊協(xié)議或者是 IP 來源進(jìn)行封包擷取,那就可以簡化輸出的結(jié)果,并取得最有用的信息。常見的表示方法有:'host foo', 'host 127.0.0.1' :針對單部主機(jī)來進(jìn)行封包擷取'net 192.168' :針對某個(gè)網(wǎng)域來進(jìn)行封包的擷取;'src host 127.0.0.1' 'dst net 192.168':同時(shí)加上來源(src)或目標(biāo)(dst)限制'tcp port 21':還可以針對通訊協(xié)議偵測,如 tcp, udp, arp, ether 等還可以利用 and 與 or 來進(jìn)行封包數(shù)據(jù)的整合顯示呢!# 范例一:以 IP 與 port number 捉下 eth0 這個(gè)網(wǎng)絡(luò)卡上的封包,持續(xù) 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 之后結(jié)束 6680 packets captured <==捉下來的封包數(shù)量 14250 packets received by filter <==由過濾所得的總封包數(shù)量 7512 packets dropped by kernel <==被核心所丟棄的封包 |
如果你是第一次看 tcpdump 的 man page 時(shí),肯定一個(gè)頭兩個(gè)大,因?yàn)?tcpdump 幾乎都是分析封包的表頭數(shù)據(jù),用戶如果沒有簡易的網(wǎng)絡(luò)封包基礎(chǔ),要看懂粉難吶! 所以,至少你得要回到網(wǎng)絡(luò)基礎(chǔ)里面去將 TCP 封包的表頭資料理解理解才好啊! ^_^!至于那個(gè)范例一所產(chǎn)生的輸出范例中,我們可以約略區(qū)分為數(shù)個(gè)字段, 我們以范例一當(dāng)中那個(gè)特殊字體行來說明一下:
- 17:01:47.362139:這個(gè)是此封包被擷取的時(shí)間,『時(shí):分:秒』的單位;
- IP:透過的通訊協(xié)議是 IP ;
- 192.168.1.100.22 >?:傳送端是 192.168.1.100 這個(gè) IP,而傳送的 port number 為 22,你必須要了解的是,那個(gè)大于 (>) 的符號指的是封包的傳輸方向喔!
- 192.168.1.101.1937:接收端的 IP 是 192.168.1.101, 且該主機(jī)開啟 port 1937 來接收;
- [P.], seq 196:472:這個(gè)封包帶有 PUSH 的數(shù)據(jù)傳輸標(biāo)志, 且傳輸?shù)臄?shù)據(jù)為整體數(shù)據(jù)的 196~472 byte;
- ack 1:ACK 的相關(guān)資料。
最簡單的說法,就是該封包是由 192.168.1.100 傳到 192.168.1.101,透過的 port 是由 22 到 1937 , 使用的是 PUSH 的旗標(biāo),而不是 SYN 之類的主動聯(lián)機(jī)標(biāo)志。呵呵!不容易看的懂吧!所以說,上頭才講請務(wù)必到?TCP 表頭數(shù)據(jù)的部分去瞧一瞧的啊!
再來,一個(gè)網(wǎng)絡(luò)狀態(tài)很忙的主機(jī)上面,你想要取得某部主機(jī)對你聯(lián)機(jī)的封包數(shù)據(jù)而已時(shí), 使用 tcpdump 配合管線命令與正規(guī)表示法也可以,不過,畢竟不好捉取! 我們可以透過 tcpdump 的表示法功能,就能夠輕易的將所需要的數(shù)據(jù)獨(dú)立的取出來。 在上面的范例一當(dāng)中,我們僅針對 eth0 做監(jiān)聽,所以整個(gè) eth0 接口上面的數(shù)據(jù)都會被顯示到屏幕上, 不好分析啊!那么我們可以簡化嗎?例如只取出 port 21 的聯(lián)機(jī)封包,可以這樣做:
| [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 的信息而已,且仔細(xì)看的話,你會發(fā)現(xiàn)封包的傳遞都是雙向的, client 端發(fā)出『要求』而 server 端則予以『響應(yīng)』,所以,當(dāng)然是有去有回啊! 而我們也就可以經(jīng)過這個(gè)封包的流向來了解到封包運(yùn)作的過程。舉例來說:
那么輸出的結(jié)果會是如何?
| [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 主動聯(lián)機(jī)的封包』,
- 第 4 行顯示的是『來自 server 端,除了響應(yīng) client 端之外(ACK),還帶有 SYN 主動聯(lián)機(jī)的標(biāo)志;
- 第 5 行則顯示 client 端響應(yīng) server 確定聯(lián)機(jī)建立 (ACK)
- 第 6 行以后則開始進(jìn)入數(shù)據(jù)傳輸?shù)牟襟E。
從第 3-5 行的流程來看,熟不熟悉啊?沒錯(cuò)!那就是三向交握的基礎(chǔ)流程啦!夠有趣吧! 不過 tcpdump 之所以被稱為黑客軟件之一可不止上頭介紹的功能吶! 上面介紹的功能可以用來作為我們主機(jī)的封包聯(lián)機(jī)與傳輸?shù)牧鞒谭治?#xff0c; 這將有助于我們了解到封包的運(yùn)作,同時(shí)了解到主機(jī)的防火墻設(shè)定規(guī)則是否有需要修訂的地方。
更神奇的使用要來啦!如果我們使用 tcpdump 在 router 上面監(jiān)聽『明碼』的傳輸數(shù)據(jù)時(shí), 例如 FTP 傳輸協(xié)議,你覺得會發(fā)生什么問題呢? 我們先在主機(jī)端下達(dá)『 tcpdump -i lo port 21 -nn -X 』然后再以 ftp 登入本機(jī),并輸入賬號與密碼, 結(jié)果你就可以發(fā)現(xiàn)如下的狀況:
| [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 .....<.........g0x0030: 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..A.K@.@.iY....0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d .........\.%.U!]0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........70x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai.0x0040: 0a .0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..J.O@.@.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.mypassw0x0040: 6f72 6469 7379 6f75 0d0a ordisyou.. |
上面的輸出結(jié)果已經(jīng)被簡化過了,你必須要自行在你的輸出結(jié)果當(dāng)中搜尋相關(guān)的字符串才行。 從上面輸出結(jié)果的特殊字體中,我們可以發(fā)現(xiàn)『該 FTP 軟件使用的是 vsftpd ,并且使用者輸入 dmtsai 這個(gè)賬號名稱,且密碼是 mypasswordisyou』 嘿嘿!你說可不可怕啊!如果使用的是明碼的方式來傳輸你的網(wǎng)絡(luò)數(shù)據(jù)? 所以我們才常常在講啊,網(wǎng)絡(luò)是很不安全滴!
另外你得了解,為了讓網(wǎng)絡(luò)接口可以讓 tcpdump 監(jiān)聽,所以執(zhí)行 tcpdump 時(shí)網(wǎng)絡(luò)接口會啟動在 『錯(cuò)亂模式 (promiscuous)』,所以你會在 /var/log/messages 里面看到很多的警告訊息, 通知你說你的網(wǎng)絡(luò)卡被設(shè)定成為錯(cuò)亂模式!別擔(dān)心,那是正常的。至于更多的應(yīng)用,請參考 man tcpdump 啰!
| 例題: 如何使用 tcpdump 監(jiān)聽 (1)來自 eth0 適配卡且 (2)通訊協(xié)議為 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 ,目前同時(shí)提供文字接口的 tethereal 以及圖形接口的 wireshark 兩個(gè)咚咚。由于我們當(dāng)初安裝時(shí)預(yù)設(shè)并沒有裝這套,因此妳必須要先使用 yum 去網(wǎng)絡(luò)安裝喔!也可以拿出光盤來安裝啦!有兩套需要安裝,分別是文字接口的 wireshark 以及圖形接口的 wireshark-gnome 軟件。安裝方式如下:
| [root@www ~]# yum install wireshark wireshark-gnome |
啟動這套軟件的方法很簡單,你必須要在 X Window 底下,透過『應(yīng)用程序』-->『因特網(wǎng)』-->『wireshark network analyzer』就可以啟動啦!啟動的畫面如下所示:
圖 5.5-1、wireshark 的使用示意圖
其實(shí)這一套軟件功能非常強(qiáng)大!鳥哥這里僅講簡單的用法,若有特殊需求,就得要自己找找數(shù)據(jù)啰。 想要開始擷取封包前,得要設(shè)定一下監(jiān)聽的接口之類的,因此點(diǎn)選圖 5.5-1 畫面中的網(wǎng)絡(luò)卡小圖標(biāo)吧! 就會出現(xiàn)如下的畫面給你選擇了。
圖 5.5-2、wireshark 的使用示意圖
在上圖中,你得先選擇想要監(jiān)聽的接口,鳥哥這里因?yàn)閾?dān)心外部的封包太多導(dǎo)致畫面很亂,因此這里使用內(nèi)部的 lo 接口來作為范例。你得要注意, lo 平時(shí)是很安靜的!所以,鳥哥在點(diǎn)選了『start』之后,還有打開終端機(jī), 之后使用『 ssh localhost 』來嘗試登入自己,這樣才能夠獲得封包喔!如下圖所示:
圖 5.5-3、wireshark 的使用示意圖
若沒有問題,等到你擷取了足夠的封包想要進(jìn)行分析之后,按下圖 5.5-3 畫面中的停止小圖示,那么封包擷取的動作就會終止, 接下來,就讓我們來開始分析一下封包吧!
圖 5.5-4、wireshark 的使用示意圖
整個(gè)分析的畫面如上所示,畫面總共分為三大區(qū)塊,你可以將鼠標(biāo)光標(biāo)移動到每個(gè)區(qū)塊中間的移動棒, 就可以調(diào)整每個(gè)區(qū)塊的范圍大小了。第一區(qū)塊主要顯示的是封包的標(biāo)頭資料,內(nèi)容就有點(diǎn)類似 tcpdump 的顯示結(jié)果,第二區(qū)塊則是詳細(xì)的表頭資料,包括訊框的內(nèi)容、通訊協(xié)議的內(nèi)容以及 socket pair 等等信息。 第三區(qū)塊則是 16 進(jìn)位與 ASCII 碼的顯示結(jié)果 (詳細(xì)的封包內(nèi)容)。
如果你覺得某個(gè)封包有問題,在畫面 1 的地方點(diǎn)選該封包 (圖例中是第 6 個(gè)封包),那么畫面 2 與 3 就會跟著變動!由于鳥哥測試的封包是加密數(shù)據(jù)的封包,因此畫面 2 顯示出封包表頭,但畫面 3 的封包內(nèi)容就是亂碼啦! 透過這個(gè) wireshark 你就可以一口氣得到所需要的所有封包內(nèi)容啦!而且還是圖形接口的,很方便吧!
5.5.3 任意啟動 TCP/UDP 封包的埠口聯(lián)機(jī): nc, netcat
這個(gè) nc 指令可以用來作為某些服務(wù)的檢測,因?yàn)樗梢赃B接到某個(gè) port 來進(jìn)行溝通,此外,還可以自行啟動一個(gè) port 來傾聽其他用戶的聯(lián)機(jī)吶!非常的不錯(cuò)用!如果在編譯 nc 軟件的時(shí)候給予『GAPING_SECURITY_HOLE』參數(shù)的話,嘿嘿! 這個(gè)軟件還可以用來取得客戶端的 bash 哩!可怕吧!我們的 CentOS 預(yù)設(shè)并沒有給予上面的參數(shù), 所以我們不能夠用來作為黑客軟件~但是 nc 用來取代 telnet 也是個(gè)很棒的功能了!(有的系統(tǒng)將執(zhí)行文件 nc 改名為 netcat 啦!)
| [root@www ~]# nc [-u] [IP|host] [port] [root@www ~]# nc -l [IP|host] [port] 選項(xiàng)與參數(shù): -l :作為監(jiān)聽之用,亦即開啟一個(gè) port 來監(jiān)聽用戶的聯(lián)機(jī); -u :不使用 TCP 而是使用 UDP 作為聯(lián)機(jī)的封包狀態(tài)# 范例一:與 telnet 類似,連接本地端的 port 25 查閱相關(guān)訊息 [root@www ~]# yum install nc [root@www ~]# nc localhost 25 |
這個(gè)最簡單的功能與 telnet 幾乎一樣吧!可以去檢查某個(gè)服務(wù)啦!不過,更神奇的在后面, 我們可以建立兩個(gè)聯(lián)機(jī)來傳訊喔!舉個(gè)例子來說,我們先在服務(wù)器端啟動一個(gè) port 來進(jìn)行傾聽:
| # 范例二:激活一個(gè) port 20000 來監(jiān)聽使用者的聯(lián)機(jī)要求 [root@www ~]# nc -l localhost 20000 & [root@www ~]# netstat -tlunp | grep nc tcp 0 0 ::1:20000 :::* LISTEN 5433/nc # 啟動一個(gè) port 20000 在本機(jī)上! |
接下來你再開另外一個(gè)終端機(jī)來看看,也利用 nc 來聯(lián)機(jī)服務(wù)器,并且輸入一些指令看看喔!
| [root@www ~]# nc localhost 20000 <==這里可以開始輸入字符串了! |
此時(shí),在客戶端我們可以打入一些字,你會發(fā)現(xiàn)在服務(wù)器端會同時(shí)出現(xiàn)你輸入的字眼吶! 如果你同時(shí)給予一些額外的參數(shù),例如利用標(biāo)準(zhǔn)輸入與輸出 (stdout, stdin) 的話,那么就可以透過這個(gè)聯(lián)機(jī)來作很多事情了! 當(dāng)然 nc 的功能不只如此,你還可以發(fā)現(xiàn)很多的用途喔! 請自行到你主機(jī)內(nèi)的 /usr/share/doc/nc-1.84/scripts/ 目錄下看看這些 script ,有幫助的吶! 不過,如果你需要額外的編譯出含有 GAPING_SECURITY_HOLE 功能, 以使兩端聯(lián)機(jī)可以進(jìn)行額外指令的執(zhí)行時(shí),就得要自行下載原始碼來編譯了!
5.6 重點(diǎn)回顧
- 修改網(wǎng)絡(luò)接口的硬件相關(guān)參數(shù),可以使用 ifconfig 這個(gè)指令,包括 MTU 等等;
- ifup 與 ifdown 其實(shí)只是 script ,在使用時(shí),會主動去 /etc/sysconfig/network-scripts 下找到相對應(yīng)的裝置配置文件,才能夠正確的啟動與關(guān)閉;
- 路由的修改與查閱可以使用 route 來查詢,此外, route 亦可進(jìn)行新增、刪除路由的工作;
- ip 指令可以用來作為整個(gè)網(wǎng)絡(luò)環(huán)境的設(shè)定,利用 ip link 可以修改『網(wǎng)絡(luò)裝置的硬件相關(guān)功能』, 包括 MTU 與 MAC 等等,可以使用 ip address 修改 TCP/IP 方面的參數(shù),包括 IP 以及網(wǎng)域參數(shù)等等, ip route 則可以修改路由!
- ping 主要是透過 ICMP 封包來進(jìn)行網(wǎng)絡(luò)環(huán)境的檢測工作,并且可以使用 ping 來查詢整體網(wǎng)域可接受最大的 MTU 值;
- 偵察每個(gè)節(jié)點(diǎn)的聯(lián)機(jī)狀況,可以使用 traceroute 這個(gè)指令來追蹤!
- netstat 除了可以觀察本機(jī)的啟動接口外,還可以觀察 Unix socket 的傳統(tǒng)插槽接口數(shù)據(jù);
- host 與 nslookup 預(yù)設(shè)都是透過 /etc/resolv.conf 內(nèi)設(shè)定的 DNS 主機(jī)來進(jìn)行主機(jī)名與 IP 的查詢;
- lftp 可以用來匿名登錄遠(yuǎn)程的 FTP 主機(jī);
- links 主要的功能是『瀏覽』,包括本機(jī)上 HTML 語法的檔案, wget 則主要在用來下載 WWW 的資料;
- 擷取封包以分析封包的流向,可使用 tcpdump ,至于圖形接口的 wireshark 則可以進(jìn)行更為詳細(xì)的解析。
- 透過 tcpdump 分析三向交握,以及分析明碼傳輸?shù)臄?shù)據(jù),可發(fā)現(xiàn)網(wǎng)絡(luò)加密的重要性。
- nc 可用來取代 telnet 進(jìn)行某些服務(wù)埠口的檢測工作。
5.7 本章習(xí)題
- 暫時(shí)將你的 eth0 這張網(wǎng)絡(luò)卡的 IP 設(shè)定為 192.168.1.100 ,如何進(jìn)行? ifconfig eth0 192.168.1.100
- 我要增加一個(gè)路由規(guī)則,以 eth0 連接 192.168.100.100/24 這個(gè)網(wǎng)域,應(yīng)該如何下達(dá)指令? route add -net 192.l68.100.0 netmask 255.255.255.0 dev eth0
- 我的網(wǎng)絡(luò)停頓的很厲害,尤其是連接到 tw.yahoo.com 的時(shí)候,那么我應(yīng)該如何檢查那個(gè)環(huán)節(jié)出了問題? traceroute tw.yahoo.com
- 我發(fā)現(xiàn)我的 Linux 主機(jī)上面有個(gè)聯(lián)機(jī)很怪異,想要將他斷線,應(yīng)該如何進(jìn)行? 以 root 的身份進(jìn)行『netstat -anp |more』查出該聯(lián)機(jī)的 PID,然后以『 kill -9 PID 』踢掉該聯(lián)機(jī)。
- 你如何知道 green.ev.ncku.edu.tw 這部主機(jī)的 IP ? 方法很多,可以利用 host green.ev.ncku.edu.tw 或 dig green.ev.ncku.edu.tw 或 nslookup green.ev.ncku.edu.tw 等方法找出
- 請找出你的機(jī)器上面最適當(dāng)?shù)?MTU 應(yīng)該是多少? 請利用『ping -c 3 -M do -s MTU yourIP 』找出你的 IP 的 MTU 數(shù)值。 事實(shí)上,你還可以先以 ip 設(shè)定網(wǎng)絡(luò)卡較大的 MTU 后,在進(jìn)行上述的動作,才能夠找出網(wǎng)域內(nèi)適合的 MTU。
- 如何在終端機(jī)接口上面進(jìn)行 WWW 瀏覽?又該如何下載 WWW 上面提供的檔案? 要瀏覽可以使用 links 或 lynx ,至于要下載則使用 wget 這個(gè)軟件。
- 在終端機(jī)接口中,如何連接 bbs.sayya.org 這個(gè) BBS ? 利用 telnet bbs.sayya.org 即可連接上
- 請自行以 tcpdump 觀察本機(jī)端的 ssh 聯(lián)機(jī)時(shí),三向交握的內(nèi)容
- 請自行回答:為何使用明碼傳輸?shù)木W(wǎng)絡(luò)聯(lián)機(jī)數(shù)據(jù)較為危險(xiǎn)?并自行以軟件將封包取出,并與同學(xué)討論封包的信息
- 請自行至 Internet 下載 nc(netcat) 的原始碼,并且編譯成為具有 GAPING_SECURITY_HOLE 的參數(shù), 然后建立一條聯(lián)機(jī)使用 -e /bin/bash 嘗試將本地端的 bash 丟給目的端執(zhí)行 (特殊功能,可讓 client 取得來自主機(jī)的 bash)。
5.8 參考數(shù)據(jù)與延伸閱讀
- 注1:wireshark 的官網(wǎng)網(wǎng)址:http://www.wireshark.org/
總結(jié)
以上是生活随笔為你收集整理的鸟哥的Linux私房菜(服务器)- 第五章、 Linux 常用网络指令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸟哥的Linux私房菜(服务器)- 第四
- 下一篇: 鸟哥的Linux私房菜(服务器)- 第六