5.2.1 ping
5.2.1 ping
這個ping是很重要的命令,ping主要經過ICMP數據包來進行整個網絡的情況報告,固然,最重要的就是ICMP type 0、8這兩個類型,分別是要求回報與主動回報網絡狀態是否存在的特性。要特別注意的是,ping須要經過IP數據包來傳送ICMP數據包,而IP數據包裏有個至關重要的TTL(Time To Live)屬性,這是一個很重要的路由特性,詳細的IP與ICMP表頭數據請參考網絡基礎的詳細介紹。
[root@linux ~]# ping [-bcstnM] IP
參數:
-b,後面接的是 broadcast 的 IP,用在你「須要對整個網段的主機進行 ping 」時;
-c,後面接的是執行 ping 的次數,例如 -c 5 ;
-n,不進行 IP 與主機名稱的反查,直接使用 IP ;
-s,發送出去的 ICMP 數據包大小,默認爲 56(bytes),再加 8 bytes 的 ICMP 表頭資料。
-t,TTL 的數值,默認是 255,每通過一個節點就會少
-M [do|dont] :主要在檢測網絡的 MTU 數值大小,兩個常見的項目是:
do,表明傳送一個 DF (Don't Fragment) 旗標,讓數據包不能從新拆包與打包;
dont,表明不要傳送 DF 標記,表示數據包能夠在其餘主機上拆包與打包。
範例一:檢測一下 168.95.1.1 這部 DNS 主機是否存在?
[root@linux ~]# 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=0 ttl=243 time=9.16 ms
64 bytes from 168.95.1.1: icmp_seq=1 ttl=243 time=8.98 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=243 time=8.80 ms
--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 8.807/8.986/9.163/0.164 ms, pipe 2
|
ping最簡單的功能就是傳送ICMP數據包去要求對方主機響應是否存在於網絡環境中。上面的響應信息當中,幾個重要的項目以下。
· 64 Bytes:表示此次傳送的ICMP數據包大小爲64 Bytes,這是默認值。在某些特殊場合中,例如,要搜索整個網絡內最大的MTU時,可使用-s 2000之類的數值來取代。
· icmp_seq=0:ICMP所檢測進行的次數,第一次編號爲0。
· ttl=243:TTL與IP數據包內的TTL是相同的,每通過一個帶有MAC的節點(node)時,例如router、bridge時,TTL就會減小1,默認的TTL爲255,你能夠經過 -t 150之類的方法來從新設置默認TTL數值。
· time=9.16 ms:響應時間,單位有ms(0.001秒)及µs(0.000001秒),通常來講,響應時間越小,表示兩臺主機之間的網絡聯機越良好。
若是你忘記加上 -c 3這樣的規定檢測次數,那就得要使用 [ctrl]-c將它結束掉了。
範例二:針對整個網段進行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address <==會告知危險。
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
# 當針對整臺主機做 ping 的檢測時,能夠利用 -b 這個參數。
# 請特別注意,當使用 ping -b 時,會對整個網段進行檢測。沒事別亂用。
# 例如上面的範例中,區網內的 192.168.10.20... 等主機會被檢測到。
|
若是想要了解網內有多少臺主機存活着,那麼使用ping -b broadcast就可以知道了。而沒必要一臺一臺主機來檢測。另外要特別注意一下,若是你的主機與待檢測主機並不在同一個網段內,那麼TTL默認使用255,若是是同一個網段內,那麼TTL默認則使用64。看看上面的輸出便可明白。
咱們在前幾章的網絡基礎裏面談到加大幀(frame)時,對於網絡性能是有幫助的,由於數據包打包的次數會減小,加上若是整個傳輸的媒介都可以接受這個frame而不須要從新進行數據包的拆解與重組的話,那麼性能固然會更好,修改frame大小的參數就是MTU。好了,如今咱們知道網卡的MTU能夠經過ifconfig或者是ip等來實現,那麼追蹤整個網絡傳輸的最大MTU時,又該如何查詢?最簡單的方法固然是經過ping傳送一個大數據包,而且不準中繼的路由器或Switch將該數據包重組,這就可以處理了:
範例三:找出最大的 MTU 數值
[root@linux ~]# ping -c 2 -s 1000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data.
1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms
# 若是有響應,那就是能夠接受這個數據包,若是無響應,那就表示這個 MTU 太大了
[root@linux ~]# ping -c 2 -s 8000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data.
ping: local error: Message too long, mtu=1500
# 這個錯誤信息是說,本地端的 MTU 纔到 1500 而已,你要檢測 8000 的 MTU
# 根本就是沒法實現的。那如何是好?用前一小節介紹的 ip link 來進行 MTU 設置吧
|
不過,你須要知道的是,因爲IP數據包表頭(不含options)已經佔用了20Bytes,再加上ICMP的表頭有8Bytes,因此固然你在使用 -s size的時候,那個數據包就得要先扣除 (20+8=28)的大小了。所以若是要使用MTU爲1500時,就得要下達「ping -s 1472 -M do xx.yy.zz.ip」才行。另外,因爲本地端的網卡MTU也會影響到檢測,因此若是想要檢測整個傳輸媒介的MTU數值,那麼每一個能夠調整的主機就得要先使用ifcofig或ip將MTU調大,而後再去進行檢測,不然就會像上面提供的案例同樣,可能會出現「Message too long,mtu=1500」之類的字樣。若是檢測完畢後,想要調整最佳化的MTU,那麼請參考前一章節的內容來調整。
不過不要隨便調整MTU,除非真的有問題。一般是在以下狀況調整MTU。
· 由於所有的主機羣都是在內部的網段,例如羣集架構(Cluster)的環境下,因爲內部的網絡節點都是咱們能夠控制的,所以能夠經過修改MTU來改進網絡性能。
· 由於操做系統默認的MTU與你的網段不符,致使某些網站能夠順利聯機,某些網站則沒法聯機。以Windows操做系統做爲聯機分享的主機時,在Client端挺容易發生這個問題。
若是是要連上Internet的主機,注意不要隨便調整MTU,由於咱們沒法知道Internet上面的每臺機器可以支持的MTU到多大,由於這些也不是咱們可以管獲得的。
另外,其實每種聯機方式都有不一樣的MTU值,常見的各類接口的MTU值如表5-1所示。
表5-1 常見的各類接口的MTU值
網絡接口
|
MTU
|
Ethernet
|
1500
|
PPPoE
|
1492
|
Dial-up
(
Modem
)
|
576
|
5.2.1 ping
這個ping是很重要的命令,ping主要經過ICMP數據包來進行整個網絡的情況報告,固然,最重要的就是ICMP type 0、8這兩個類型,分別是要求回報與主動回報網絡狀態是否存在的特性。要特別注意的是,ping須要經過IP數據包來傳送ICMP數據包,而IP數據包裏有個至關重要的TTL(Time To Live)屬性,這是一個很重要的路由特性,詳細的IP與ICMP表頭數據請參考網絡基礎的詳細介紹。
[root@linux ~]# ping [-bcstnM] IP
參數:
-b,後面接的是 broadcast 的 IP,用在你「須要對整個網段的主機進行 ping 」時;
-c,後面接的是執行 ping 的次數,例如 -c 5 ;
-n,不進行 IP 與主機名稱的反查,直接使用 IP ;
-s,發送出去的 ICMP 數據包大小,默認爲 56(bytes),再加 8 bytes 的 ICMP 表頭資料。
-t,TTL 的數值,默認是 255,每通過一個節點就會少
-M [do|dont] :主要在檢測網絡的 MTU 數值大小,兩個常見的項目是:
do,表明傳送一個 DF (Don't Fragment) 旗標,讓數據包不能從新拆包與打包;
dont,表明不要傳送 DF 標記,表示數據包能夠在其餘主機上拆包與打包。
範例一:檢測一下 168.95.1.1 這部 DNS 主機是否存在?
[root@linux ~]# 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=0 ttl=243 time=9.16 ms
64 bytes from 168.95.1.1: icmp_seq=1 ttl=243 time=8.98 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=243 time=8.80 ms
--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 8.807/8.986/9.163/0.164 ms, pipe 2
|
ping最簡單的功能就是傳送ICMP數據包去要求對方主機響應是否存在於網絡環境中。上面的響應信息當中,幾個重要的項目以下。
· 64 Bytes:表示此次傳送的ICMP數據包大小爲64 Bytes,這是默認值。在某些特殊場合中,例如,要搜索整個網絡內最大的MTU時,可使用-s 2000之類的數值來取代。
· icmp_seq=0:ICMP所檢測進行的次數,第一次編號爲0。
· ttl=243:TTL與IP數據包內的TTL是相同的,每通過一個帶有MAC的節點(node)時,例如router、bridge時,TTL就會減小1,默認的TTL爲255,你能夠經過 -t 150之類的方法來從新設置默認TTL數值。
· time=9.16 ms:響應時間,單位有ms(0.001秒)及µs(0.000001秒),通常來講,響應時間越小,表示兩臺主機之間的網絡聯機越良好。
若是你忘記加上 -c 3這樣的規定檢測次數,那就得要使用 [ctrl]-c將它結束掉了。
範例二:針對整個網段進行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address <==會告知危險。
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
# 當針對整臺主機做 ping 的檢測時,能夠利用 -b 這個參數。
# 請特別注意,當使用 ping -b 時,會對整個網段進行檢測。沒事別亂用。
# 例如上面的範例中,區網內的 192.168.10.20... 等主機會被檢測到。
|
若是想要了解網內有多少臺主機存活着,那麼使用ping -b broadcast就可以知道了。而沒必要一臺一臺主機來檢測。另外要特別注意一下,若是你的主機與待檢測主機並不在同一個網段內,那麼TTL默認使用255,若是是同一個網段內,那麼TTL默認則使用64。看看上面的輸出便可明白。
咱們在前幾章的網絡基礎裏面談到加大幀(frame)時,對於網絡性能是有幫助的,由於數據包打包的次數會減小,加上若是整個傳輸的媒介都可以接受這個frame而不須要從新進行數據包的拆解與重組的話,那麼性能固然會更好,修改frame大小的參數就是MTU。好了,如今咱們知道網卡的MTU能夠經過ifconfig或者是ip等來實現,那麼追蹤整個網絡傳輸的最大MTU時,又該如何查詢?最簡單的方法固然是經過ping傳送一個大數據包,而且不準中繼的路由器或Switch將該數據包重組,這就可以處理了:
範例三:找出最大的 MTU 數值
[root@linux ~]# ping -c 2 -s 1000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data.
1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms
# 若是有響應,那就是能夠接受這個數據包,若是無響應,那就表示這個 MTU 太大了
[root@linux ~]# ping -c 2 -s 8000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data.
ping: local error: Message too long, mtu=1500
# 這個錯誤信息是說,本地端的 MTU 纔到 1500 而已,你要檢測 8000 的 MTU
# 根本就是沒法實現的。那如何是好?用前一小節介紹的 ip link 來進行 MTU 設置吧
|
不過,你須要知道的是,因爲IP數據包表頭(不含options)已經佔用了20Bytes,再加上ICMP的表頭有8Bytes,因此固然你在使用 -s size的時候,那個數據包就得要先扣除 (20+8=28)的大小了。所以若是要使用MTU爲1500時,就得要下達「ping -s 1472 -M do xx.yy.zz.ip」才行。另外,因爲本地端的網卡MTU也會影響到檢測,因此若是想要檢測整個傳輸媒介的MTU數值,那麼每一個能夠調整的主機就得要先使用ifcofig或ip將MTU調大,而後再去進行檢測,不然就會像上面提供的案例同樣,可能會出現「Message too long,mtu=1500」之類的字樣。若是檢測完畢後,想要調整最佳化的MTU,那麼請參考前一章節的內容來調整。
不過不要隨便調整MTU,除非真的有問題。一般是在以下狀況調整MTU。
· 由於所有的主機羣都是在內部的網段,例如羣集架構(Cluster)的環境下,因爲內部的網絡節點都是咱們能夠控制的,所以能夠經過修改MTU來改進網絡性能。
· 由於操做系統默認的MTU與你的網段不符,致使某些網站能夠順利聯機,某些網站則沒法聯機。以Windows操做系統做爲聯機分享的主機時,在Client端挺容易發生這個問題。
若是是要連上Internet的主機,注意不要隨便調整MTU,由於咱們沒法知道Internet上面的每臺機器可以支持的MTU到多大,由於這些也不是咱們可以管獲得的。
另外,其實每種聯機方式都有不一樣的MTU值,常見的各類接口的MTU值如表5-1所示。
表5-1 常見的各類接口的MTU值
網絡接口
|
MTU
|
Ethernet
|
1500
|
PPPoE
|
1492
|
Dial-up
(
Modem
)
|
576
|
5.2.2 traceroute
咱們前面談到的命令大多數都是針對主機的網絡參數設置所須要的,而ping是兩臺主機之間的迴應與否的判斷,那麼有沒有命令能夠追蹤兩臺主機之間經過的各個節點(Node)通訊情況的好壞呢?若是咱們聯機到yahoo的速度比日常慢,你以爲是本身的網絡環境有問題,仍是外部的Internet有問題?若是是前者的話,咱們固然須要檢查本身的網絡環境,看看到底是誰中毒了?但若是是Internet的問題呢?那只有「等等等」了。判斷是這個問題就得要使用traceroute這個命令。
[root@linux ~]# traceroute [-nwig] IP
參數:
-n,能夠沒必要進行主機的名稱解析,只用 IP ,速度較快。
-w,若對方主機在幾秒鐘內沒有回聲就宣告不治...默認是 5 秒。
-i,用在比較複雜的環境,若是你的網絡接口不少很複雜時,纔會用到這個參數。
例如,你有兩條 ADSL 能夠鏈接到外部,那你的主機會有兩個 ppp。
你可使用 -i 來選擇是 ppp0 仍是 ppp1 啦。
-g,與 -i 的參數相仿,只是 -g 後面接的是 gateway 的 IP 。
範例一:
[root@linux ~]# traceroute -n tw.yahoo.com
traceroute to tw.yahoo-ap1.akadns.net (203.84.202.164), 30 hops max,
38 byte packets
1 61.59.121.1 42.174 ms 41.690 ms 41.058 ms
2 139.175.172.2 40.962 ms 41.978 ms 40.973 ms
3 192.72.122.130 40.983 ms 41.930 ms 41.003 ms
4 139.175.58.210 42.956 ms 41.997 ms 42.337 ms
5 139.175.58.153 47.591 ms 47.972 ms 48.748 ms
6 139.175.56.30 48.193 ms 47.970 ms 47.986 ms
7 139.175.57.94 47.959 ms 47.951 ms 47.985 ms
8 139.175.56.138 48.363 ms 47.586 ms 47.995 ms
9 139.175.58.42 49.256 ms 50.668 ms 47.490 ms
10 61.58.33.133 201.882 ms 201.565 ms 200.973 ms
11 61.58.33.50 199.910 ms 199.019 ms 198.961 ms
12 203.84.200.226 202.391 ms 202.567 ms 209.283 ms
|
這個traceroute挺有意思的,這個命令會針對你想要鏈接的目的地的全部Router進行ICMP的超時等待,例如上面的例子當中,由鳥哥的主機鏈接到Yahoo時,它會通過12個節點,traceroute會主動對這12個節點作ICMP的迴應等待,並檢測回覆的時間,每一個節點會檢測三次。因此像上面顯示的結果,發現每一個節點其實回覆的時間大約在200 ms之內,算是Internet的環境還能夠了。並且由上面的信息來看,在61.58.33.133這個節點後的傳輸延遲較久,至於以前的9個節點則有不錯的表現。經過這種分析,可讓你瞭解到這條聯線是哪一個環節出了問題。
另外,若是在默認的5秒鐘以內traceroute聽不到節點的迴應,那麼屏幕上就會出現一個「*」的符號,告知該節點沒法有順利的響應。因爲咱們的traceroute用的是ICMP數據包,有些防火牆或者主機可能會將ICMP數據包扔掉,所以就會形成等不到迴應的情況。另外,有些Gateway原本就不支持traceroute的功能,所以也會產生「*」的情況,因此分析時要注意一下。
5.2.3 netstat
若是你以爲某個網絡服務明明啓動了,可是卻沒法聯機的話,應該怎麼辦?首先應該查詢一下本身的網絡接口所監聽的端口(port),看看是否真的有啓動,由於有時候屏幕上面顯示的OK並不必定真的OK了。
[root@linux ~]# netstat -[rn] <==與路由有關的參數
[root@linux ~]# 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 每5秒更新一次網絡狀態的顯示
範例一:列出目前的路由表狀態,且以 IP 及 Port Number 顯示:
[root@linux ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.10.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.10.30 0.0.0.0 UG 0 0 0 eth0
# 其實這個參數就跟 route -n 如出一轍,對吧。這不是 netstat 的主要功能
範例二:列出目前的全部網絡聯機狀態,使用 IP 與 Port Number
[root@linux ~]# netstat -an
Active Internet connections (Servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::ffff:192.168.10.100:25 ::ffff:192.168.10.200:57509 TIME_WAIT
tcp 0 52 ::ffff:192.168.10.100:22 ::ffff:192.168.10.210:1504 ESTABLISHED
udp 0 0 127.0.0.1:53 0.0.0.0:*
Active UNIX domain sockets (Servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 4792 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 4799 private/rewrite
……(下面省略)……
|
netstat的輸出主要分爲兩大部分,分別是TCP/IP的網絡接口部分,以及傳統的Unix socket部分。還記得咱們在《鳥哥的Linux私房菜——基礎學習篇》裏面曾經談到文件的類型嗎?那個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格式有兩種,一種是IPv4的標準,便是4組十進制的數字加上冒號「:」後,接着Port Number。一種是IPv6,前面的IP加上不少冒號「:」的格式。能夠由這個顯示的數據看出這個服務是開放在哪個接口,例如上例當中,port 22是開放在0.0.0.0,即全部接口均可以連到port 22,至於port 53則僅開放在本機的127.0.0.1這個接口而已,因此是不對外部接口開放的。
· Foreign Address:遠程的主機IP與Port Number。
· stat:狀態列,主要的狀態有以下幾項。
Ø ESTABLISED:已創建聯機的狀態。
Ø SYN_SENT:發出主動聯機(SYN標誌)的聯機數據包。
Ø SYN_RECV:接收到一個要求聯機的主動聯機數據包。
Ø FIN_WAIT1:該聯機正在斷線當中。
Ø FIN_WAIT2:該聯機已掛斷,但正在等待對方主機響應斷線確認的數據包。
Ø TIME_WAIT:該聯機已掛斷,但socket還在網絡上等待結束。
Ø LISTEN:一般用在服務的監聽port。可以使用「-l」參數查閱。
基本上,咱們經常談到netstat的功能,能夠用來觀察網絡的聯機狀態,而網絡聯機狀態中,又以觀察「我目前開了多少port在等待客戶端的聯機」以及「目前個人網絡聯機狀態中,有多少聯機已創建或產生問題」最多見。那你如何瞭解與觀察呢?一般鳥哥是這樣處理的:
範例三:顯示出目前已經啓動的網絡服務
[root@linux ~]# 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:25 0.0.0.0:* LISTEN 2141/master
tcp 0 0 :::22 :::* LISTEN 1924/sshd
tcp 0 0 :::25 :::* LISTEN 2141/master
udp 0 0 127.0.0.1:53 0.0.0.0:* 1911/named
# 上面最重要的實際上是那個 -l 的參數,由於能夠列出只有在 Listen 的 port
|
你能夠在上面的範例中發現,個人網絡聯機僅對外開放port 25以及port 22(由於針對0.0.0.0開放),至於port 53則僅針對內部的127.0.0.1開放,因此是不對Internet開放這個服務的。而其中port 2二、port 25都是使用TCP數據包,至於port 53則是開放在UDP數據包的狀態。再仔細地看,每一行輸出的最右邊,你能夠發現鳥哥的主機port 22是由sshd這個程序所啓動的,而且它的PID是1924。看到這裏,聰明的你應該知道,我該如何關閉這個port了吧?使用kill或killall便可。
範例四:觀察本機上頭全部的網絡聯機狀態
[root@linux ~]# netstat -atunp
Active Internet connections (Servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2141/master
tcp 0 0 :::22 :::* LISTEN 1924/sshd
tcp 0 0 :::25 :::* LISTEN 2141/master
tcp 0 68 192.168.1.100:22 192.168.1.210:1504 ESTABLISHED 30417/sshd:
udp 0 0 127.0.0.1:53 0.0.0.0:* 1911/named
|
注意範例四的特殊字體,表明目前已經創建聯機的一條網絡鏈接,它是由遠程主機192.168.1.210啓動一個大於1024的端口,向本地端主機192.168.1.100的port 22進行聯機的一條鏈接,你須要想起來的是:Client端是隨機取一個大於1024的port進行聯機,此外只有root能夠啓動小於1023的port,這樣就能明白上面的那條鏈接了。若是你想要斷開這條鏈接的話,查看最右邊的30417/sshd後直接kill就能夠了。
至於傳統的Unix socket的數據,使用man netstat查閱一下吧。這個Unix socket一般用於一些僅在本機上運行的程序所打開的接口文件,例如X Window不都是在本機上運行嗎?那何須啓動網絡的port呢?固然可使用Unix socket了,另外,例如Postfix這一類的網絡服務器,因爲不少操做都是在本機上完成的,因此會佔用不少的Unix socket。
5.2.4 host
這個命令能夠用來查出某個主機名稱的IP。例如,咱們想要知道tw.yahoo.com的IP時,能夠這樣作:
[root@linux ~]# host [-a] hostname [Server]
參數:
-a,列出該主機詳細的各項主機名稱設置數據
[Server] :可使用不是 /etc/resolv.conf 的 DNS 主機來查詢
範例一:列出 tw.yahoo.com 的 IP
[root@linux ~]# host tw.yahoo.com
tw.yahoo.com is an alias for tw.yahoo-ap1.akadns.net.
tw.yahoo-ap1.akadns.net has address 202.43.195.52
|
IP是202.43.195.52,很簡單就能夠查詢到IP了。那這個IP是向誰查詢到的呢?其實就是寫在 /etc/resolv.conf文件裏的DNS主機。若是不想要使用該文件裏的主機來查詢,也能夠這樣作:
[root@linux ~]# 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.yahoo-ap1.akadns.net.
tw.yahoo-ap1.akadns.net has address 202.43.195.52 |
上例告訴咱們用來查詢的主機是哪一臺了,這樣清楚了吧。至於更詳細的host用法,咱們會在DNS主機那個章節中再來好好介紹
5.2.5 nslookup
這條命令的用途與host基本上是同樣的,就是用來做爲IP與主機名稱對應的檢查,一樣是使用 /etc/resolv.conf這個文件做爲DNS服務器的來源選擇。
[root@linux ~]# nslookup [-query=[type]] [hostname|IP]
參數:
-query=type:查詢的類型,除了傳統的 IP 與主機名稱對應外,DNS 還有不少信息
因此咱們能夠查詢不少不一樣的信息,包括mx、cname 等
例如: -query=mx 的查詢方法。
範例一:找出 www.google.com.tw 的 IP
[root@linux ~]# nslookup www.google.com.tw
Server: 168.95.1.1
Address: 168.95.1.1#53
Non-authoritative answer:
www.google.com.tw canonical name = www.google.com.
www.google.com canonical name = www.l.google.com.
Name: www.l.google.com
Address: 64.233.189.104
範例二:找出 168.95.1.1 的主機名稱
[root@linux ~]# 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 Telnet
Telnet是早期我的計算機鏈接到服務器主機上工做時最重要的一個軟件了。它不但能夠直接鏈接到服務器上,還能夠用來鏈接BBS呢。很是棒!不過,Telnet自己的數據在傳送的時候是使用明文(原始的數據,沒有加密),因此數據在Internet上面跑的時候,會比較危險一點(就怕被別人監聽)。更詳細的內容咱們會在「遠程聯機服務器」章節裏作介紹的。
[root@linux ~]# Telnet [host|IP] [port]
範例一:鏈接到成大夢之大地這個 BBS 站
[root@linux ~]# Telnet bbs.dorm.ncku.edu.tw
bbs.ccns.ncku.edu.tw ⊙
⊙ 140.116.250.3 [DreamBBS Ver.040223]
歡迎光臨。系統負載:0.16 0.16 0.16 [負載正常]
╭─┼────┼─╮ ╭╮ ┌┤夢之大地├────────────┐
╭──┬──┬──╮╭───┴┴───┬╮ │ │
╰──┴──┴──╯ │ │ 夢之大地由 │
╭────────╮ ╭─╯ │ 【計算機網絡愛好社‧CCNS】 │
╭───┬───╮ ╭──╯ │ 維護管理 │
│ │ ╭─╯ │ │
╰───┴───╯ ╰┴───────╯ └───────────┤By BenHe├┘
┌┤本站站長羣├────────┐ ╭ ╭ ╭ ╮
│站長: billcho │ ╭────┼────╮╭─┼─╭┼──┼╮
│系統: cat │ │ │ │ ││
│站務: muwell ianwolf │ ╭╯╮ │ │ ││
│ renn999 GG │ ╭╯ ╰╮ │ │ │╯
│ │ ╭╯ ╰╮ │╭ │
└───────────────┘ ╰╯ ╰─╯╰─┴╯ ╰───╯
參觀用帳號:guest,申請新帳號:new。目前在線人數 [2183/5000] 人。
請輸入代號:
|
如上所示,咱們能夠經過Telnet輕易地鏈接到BBS上面,而若是你的主機有開啓Telnet服務的話,一樣地利用Telnet IP而且輸入帳號與密碼以後,就可以登陸主機了。另外,在Linux上的Telnet軟件還提供了Kerberos的認證方式,有興趣的話請自行參閱man Telnet的說明。
除了鏈接到服務器以及鏈接到BBS站以外,Telnet還能夠用來鏈接到某個port(服務)上。例如,咱們能夠用Telnet鏈接到port 110,看看這個port是否正確啓動了。
範例二:檢測本機端的port 110 是否正確啓動?
[root@linux ~]# Telnet localhost 110
Trying 127.0.0.1...
Telnet: connect to address 127.0.0.1: Connection refused
# 若是出現這樣的信息,表明這個 port 沒有啓動或者是這個聯機有問題
# 由於你看到那個 refused
[root@linux ~]# Telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '_]'.
220 vbird.vbird.idv.tw ESMTP Postfix
ehlo localhost
250-linux.dm.tsai
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.
|
根據輸出的結果,咱們就可以知道這個通訊協議(Port Number提供的通訊協議功能)是否已經成功地啓動了。而每一個port所監聽的服務都有其特殊的命令,例如,上述的port 25就是本機接口提供的電子郵件服務,那個服務所支持的命令就如同上面使用的數據同樣,可是其餘的port就不見得支持這個ehlo命令,由於不一樣的port有不一樣的程序嘛,固然支持的命令就不一樣了。與Mail Server有關的Telnet用法,咱們將在郵件服務器內提到。
5.3.2 FTP
經常會聽到FTP這個服務。若是你想要下載Linux的光盤燒錄映象文件時,能夠到FTP網站,它們都是FTP提供者啊。那咱們要如何去下載呢?固然就是經過FTP的客戶端軟件了。在Linux下面,咱們能夠經過FTP這個軟件,也能夠經過下一小節會提到的LFTP軟件。
[root@linux ~]# FTP [-p] [host|IP] [port]
參數:
-p :啓動被動式模式 (passive、PASV);
範例一:聯機看看
[root@linux ~]# FTP FTP.isu.edu.tw
Connected to FTP.isu.edu.tw (140.127.177.17).
220-歡迎光臨義守大學文件服務器
220-
220-本站提供如下軟件可供下載:
220-********************************************************************
220-/pub/BeOS/ BeOS 操做系統
220-/pub/Linux/ Linux 操做系統
....(其餘省略)....
220-********************************************************************
Name (FTP.isu.edu.tw:dmtsai): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
FTP>
FTP> help <==提供更多的可用命令,能夠常參考。
FTP> cd /pub <==變換目錄到 /pub 當中
FTP> dir <==顯示遠程主機的目錄內容
FTP> get file <==下載 file 這個文件
FTP> mget file <==下載 file 這個目錄或文件
FTP> put file <==上傳 file 這個文件到服務器上
FTP> delete file <==刪除主機上的 file 這個文件
FTP> mkdir dir <==創建 dir 這個目錄
FTP> lcd /home <==切換「本地端主機」的工做目錄
FTP> passive <==啓動或關閉 passive 模式
FTP> binary <==數據傳輸模式設置爲 binary 格式
|
FTP實際上是一個很麻煩的協議,由於它使用兩個port分別進行命令與數據的通訊,詳細的內容咱們會在後續的FTP服務器內詳談,這裏咱們先簡單介紹一下如何使用FTP這個軟件。首先固然須要登陸了,因此在上面的代碼中填入帳號與密碼。因爲提供匿名登陸,而匿名登陸者的帳號就是anonymous,因此直接填寫那個帳號便可。若是是私人的FTP,可能須要提供一組完整的帳號與密碼。
登陸FTP主機後,就可以使用FTP軟件的功能進行上傳與下載的操做,幾個經常使用的FTP內命令如上述代碼所示,不過,鳥哥建議你能夠連到大學的FTP網站後,使用help(或問號 ?)來查詢可用的命令,而後嘗試下載以測試使用一下這個命令吧。這樣之後沒有瀏覽器的時候,你也能夠直接鏈接下載FTP了。
另外,若是因爲某些緣由,讓你的FTP主機的port開在非正規的端口,那你就能夠利用下面的方式來鏈接到該臺主機。
[root@linux ~]# FTP hostname 318
# 假設對方主機的 FTP 服務開啓在 318 這個 port 。
|
5.3.3 LFTP
早期當咱們要登陸提供匿名登陸的主機時,不少時候都是使用ncFTP這個軟件,不過,如今有更棒的選擇,那就是LFTP。這個軟件甚至能夠在FTP裏面使用相似Bash的指令功能,實在是很是的完美。並且整個使用的方法與上面提到的FTP又很是相似。
[root@linux ~]# LFTP [-p port] [-u user[,pass]] [host|IP]
參數:
-p,後面能夠直接接上遠程 FTP 主機提供的 port
-u,後面則是接上 帳號與密碼 ,就可以鏈接上遠程主機了
若是沒有加帳號密碼, lFTP 默認會使用 anonymous 嘗試匿名登陸
範例一:利用 LFTP 登陸義守大學
[root@linux ~]# LFTP FTP.isu.edu.tw
lFTP FTP.isu.edu.tw:~>
# 瞧。一會兒就登陸了
|
至於登陸FTP主機後,同樣可使用help來顯示出能夠執行的命令,與FTP很相似。不過多了書籤的功能,並且也很是的相似於bash,這個功能很不錯。除了這個好用的文本界面的FTP軟件以外,事實上還有不少圖形界面的好用軟件呢。最多見的就是gFTP了。不可是圖形界面,並且與cute FTP很是像,很是容易上手。Cent OS自己就有提供gFTP了,你能夠拿出原版的光盤來安裝,而後進入X Window後,啓動一個Shell,輸入gFTP就可以發現它的好用了。下面咱們再來介紹一下實時通訊吧
5.3.4 Gaim
我想,如今你們應該都知道什麼是MSN、雅虎實時通以及其餘的通訊軟件吧。那麼要連上這些服務器時,該怎麼處理哪?很簡單,在X Window下面使用Gaim就好了,太方便了。請先進入X Window系統,而後開啓一個終端機窗口,接着直接輸入Gaim(請注意你必須已經安裝了Gaim了),而後就會出現如圖5-1所示的窗口。
|
圖5-1 Gaim使用範例圖 |
輸入你的帳號與密碼,並選擇相對應的實時通訊服務器(如MSN或Yahoo實時通),就能夠進入到如圖5-2所示的界面
|
圖5-2 Gaim使用範例圖 |
當一切都沒有問題後,按下「登陸」按鈕,這樣就能夠在Linux上使用實時通訊軟件了,方便得很。
5.4 文本網頁瀏覽
什麼?文本界面居然有瀏覽器!別逗了好很差?呵呵!誰有那個時間在逗你。真的有這個東西,是在文本界面下上網瀏覽的好工具,他們分別是lynx及wget這兩個寶貝,可是,你必須肯定你已經安裝了這兩個軟件才行。下面就讓咱們來聊一聊這兩個好用的傢伙吧。
5.4.1 lynx
這個命令最大的做用就是讓咱們在文本模式下使用這個瀏覽器來瀏覽網頁。但鳥哥認爲,這個文檔最大的功能是查閱Linux本機上面以HTML語法寫成的文件信息(Document),怎麼說呢?若是你曾經在Linux本機下面的 /usr/share/doc這個目錄看過文件信息的話,就會經常發現一些網頁文件,使用vi去查閱時,老是看到一堆HTML的語法,妨礙閱讀啊。這時候使用lynx就是個好方法了,內容能夠看得清清楚楚。
[root@linux ~]# lynx [options] [website]
參數:
options 指的是一些慣用的參數,可使用 man lynx 查閱,常見的有:
-anonymous :默認使用匿名登陸。
-assume_charset=big5 :設置默認的語系數據爲 big5 ,用在中文網頁很方便。
範例一:瀏覽 Linux kernel 網站
[root@linux ~]# LANG=zh_TW.big5
[root@linux ~]# lynx http://www.kernel.org
|
輸入LANG=zh_TW.big5是當你想要瀏覽中文網站時,那麼終端機就得要有相對應的顯示編碼才行,不然會有一堆亂碼產生。當我直接輸入lynx網站的網址後,就會出現如圖5-3所示界面。
|
圖5-3 lynx使用範例圖 |
在圖5-3中,特殊字體的部分是咱們可使用Tab按鍵來進行超級連接的切換。而上圖最下面一行則顯示出一些熱鍵,能夠按上述的熱鍵來參考一些常見的命令功能。不過有些地方你仍是要知道一下:
· 進入界面以後,因爲是文本模式,因此編排可能會有點位移。不過沒關係,不會影響咱們查看信息。
· 這個時候可使用「上下鍵」讓光標停在上面的選項當中(如信箱、書籤等),再按下Enter就進入該頁面。
· 可使用左右鍵來移動「上一頁」或「下一頁」。
· 能夠經過修改 /etc/lynx.cfg來設置顯示的字符編碼(中國臺灣地區能夠選擇Big5編碼)。
· 其餘的設置可使用上面的範例中最下面那一行的說明。
一些常見功能以下:
· h:Help,求助功能,在線說明書。
· g:Goto URL,按g後輸入網頁地址(URL)如:
http://www.abc.edu/ 等。
· d:download,下載文件。
· q:Quit,退出lynx 。
· Ctrl+C:強迫停止lynx的執行。
· 方向鍵以下:
Ø 上:移動光標至本頁中「上一個可連接點」。
Ø 下:移動光標至本頁中「下一個可連接點」。
Ø 左:back,跳回上一頁。
Ø 右:進入反白光標所連接的網頁。
Ø Enter:等同「右」鍵。
至於若是是瀏覽Linux本機上面的網頁文件,那就可使用以下的方式:
[root@linux ~]# cd /usr/share/doc/samba-3.0.10/htmldocs
[root@linux htmldocs]# lynx index.html
|
在鳥哥的Cent OS 4.3當中,有這麼一個文件,我就能夠利用lynx來取得查看。顯示的結果如圖5-4所示。
|
圖5-4 lynx使用範例圖 |
固然,由於你的環境多是在Linux本機的tty1~tty6,因此沒法顯示出中文,這個時候你就得要進行LANG=en_US之類的語言設置才行。而若是你經常須要瀏覽中文語系的網頁,那就能夠直接修改配置文件,例如 /etc/lynx.cfg這個文件內容:
[root@linux ~]# vi /etc/lynx.cfg
CHARACTER_SET:utf-8 <==約在 399 行
#ASSUME_CHARSET:iso-8859-1 <==約在 414 行
#PREFERRED_LANGUAGE:en <==約在 542 行
# 你能夠將它改爲以下所示:
CHARACTER_SET:big5
ASSUME_CHARSET:big5
PREFERRED_LANGUAGE:zh_TW
|
另外,若是有時候你必須上網點選某個網站來自動取得更新時。例如,早期的自動在線更新主機名稱系統,僅支持網頁更新,那你如何進行更新呢?可使用lynx!利用 -dump這個參數先處理:
[root@linux ~]# lynx -dump \
> http://some.site.name/web.php?name=user&password=pw > testfile
|
上面的網站後面有加個問號(?)對吧?後面接的則是利用網頁的GET功能取得的各項變量數據,利用這個功能,咱們就能夠直接登陸到該網站上了。很是方便吧。並且會將執行的結果輸出到testfile文件中,不過若是網站提供的數據是以POST爲主的話,那鳥哥就不知道如何搞定了。關於GET與POST的相關信息咱們會在WWW服務器當中再次說起。別緊張啊。
5.4.2 wget
若是說lynx是在進行網頁的「瀏覽」,那麼wget就是在進行「網頁數據的讀取」。舉例來講,咱們的Linux核心是放置在
www.kernel.ort內,主要是同時提供FTP與HTTP下載。咱們知道可使用LFTP來下載資料,但若是想要用瀏覽器來下載呢?那就利用wget吧。
[root@linux ~]# wget [option] [網址]
參數:
若想要聯機的網站提供帳號與密碼的保護,能夠利用這兩個參數來輸入。
--http-user=usrname
--http-password=password
--quiet :不要顯示 wget 在獲取數據時候的顯示信息
更多的參數請自行參考 man wget
範例一:請下載 2.6.17 版的核心
[root@linux ~]# wget \
> http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
--16:06:10--
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
=> `linux-2.6.17.tar.gz'
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51,700,445 (49M) [application/x-gzip]
3% [==> ] 1,890,568 220.69K/s ETA 04:12
|
你看,多好啊!沒必要經過瀏覽器,只要知道網址後,當即能夠進行文件的下載,又快速又方便,還能夠經過proxy的幫助來下載呢。經過修改 /etc/wgetrc來設置你的代理服務器:
[root@linux ~]# vi /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.ncku.edu.tw:3128/
use_proxy = no
|
5.4.2 wget
若是說lynx是在進行網頁的「瀏覽」,那麼wget就是在進行「網頁數據的讀取」。舉例來講,咱們的Linux核心是放置在
www.kernel.ort內,主要是同時提供FTP與HTTP下載。咱們知道可使用LFTP來下載資料,但若是想要用瀏覽器來下載呢?那就利用wget吧。
[root@linux ~]# wget [option] [網址]
參數:
若想要聯機的網站提供帳號與密碼的保護,能夠利用這兩個參數來輸入。
--http-user=usrname
--http-password=password
--quiet :不要顯示 wget 在獲取數據時候的顯示信息
更多的參數請自行參考 man wget
範例一:請下載 2.6.17 版的核心
[root@linux ~]# wget \
> http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
--16:06:10--
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
=> `linux-2.6.17.tar.gz'
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51,700,445 (49M) [application/x-gzip]
3% [==> ] 1,890,568 220.69K/s ETA 04:12
|
你看,多好啊!沒必要經過瀏覽器,只要知道網址後,當即能夠進行文件的下載,又快速又方便,還能夠經過proxy的幫助來下載呢。經過修改 /etc/wgetrc來設置你的代理服務器:
[root@linux ~]# vi /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.ncku.edu.tw:3128/
use_proxy = no
|
Ctrl+Enter 發佈java
發佈node
取消linux