linux常用網絡命令
linux下網絡命令是最需要掌握的一部分命令。下面由學習啦小編為大家整理了linux常用網絡的相關知識,希望大家喜歡!
linux常用網絡命令
所有時刻如果你想要做好自己的網絡參數設置,包括IP參數、路由參數和無線網絡等,就得要了解下面這些相關的命令才行。其中Route及ip這兩條命令是比較重要的。當然,比較早期的用法,我們都是使用ifconfig的。
? ifconfig:查詢、設置網卡和IP網段等相關參數。
? ifup、ifdown:這兩個文件是Script,通過更簡單的方式來啟動網絡接口。
? Route:查詢、設置路由表(Route table)。
? ip:復合式的命令,能直接修改上述命令提到的功能。
ifconfig、ifup、ifdown
這 3個命令的用途都是啟動網絡接口,不過,ifup和ifdown僅就 /etc/sysconfig/network- scripts內的ifcfg-ethx(x為數字)進行啟動或關閉的操作,并不能直接修改網絡參數,除非手動調整ifcfg-ethx文件才行。至于 ifconfig則能直接手動給予某個接口IP或調整其網絡參數。下面我們就分別來談一談。
linux常用網絡命令1. ifconfig
ifconfig主要是能手動啟動、觀察和修改網絡接口的相關參數,能修改的參數非常多,包括IP參數及MTU等都能修改,他的語法如下:
[root@linux ~]# ifconfig {interface} {up|down}
一 般來說,直接輸入ifconfig就會列出目前已被啟動的卡,不論這個卡是否有設置IP,都會被顯示出來。而如果是輸入ifconfig eth0,則會顯示出這個接口的相關數據,而不管該接口是否啟動。所以,如果你想要知道某個網卡的Hardware Address,直接輸入“ifconfig"網絡接口代號"”即可。至于上述代碼中出現的各項數據是這樣的(數據排列由上而下、由左而右)。
? eth0:網卡的代號,也有l(wèi)o這個loopback。
? HWaddr:網卡的硬件地址,習慣稱為MAC。
? inet addr:IPv4的IP地址,后續(xù)的Bcase、Mask分別代表的是Broadcast和Netmask。
? inet6 addr:是IPv6的版本的IP,我們沒有使用,所以略過。
? RX:那一行代表的是網絡由啟動到目前為止的數據包接收情況,packets代表數據包數、errors代表數據包發(fā)生錯誤的數量、dropped代表數據包由于有問題而遭丟棄的數量等。
? TX:和RX相反,為網絡由啟動到目前為止的傳送情況。
? collisions:代表數據包碰撞的情況,如果發(fā)生太多次,表示你的網絡狀況不太好。
? txqueuelen:代表用來傳輸數據的緩沖區(qū)的儲存長度。
? RX Bytes、TX Bytes:總傳送、接收的字節(jié)總量。
? Interrupt、Memory:網卡硬件的數據,IRQ岔斷和內存地址。
通過觀察上述的資料,大致上能了解到你的網絡情況,尤其是RX、TX內的error數量,及是否發(fā)生嚴重的collision情況,都是需要注意的。
范例二:暫時修改網絡接口
[root@linux ~]# ifconfig eth0 192.168.100.100
# 如果不加所有其他參數,則系統(tǒng)會依照該 IP 所在的 class 范圍,
# 自動地計算出 netmask 及 network, broadcast 等 IP 參數
[root@linux ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 \
> mtu 8000
# 設置網絡接口,同時設置 MTU 的數值
[root@linux ~]# ifconfig eth0 MTU 9000
# 僅修改該接口的 MTU 數值,其他的保持不動
[root@linux ~]# ifconfig eth0:0 192.168.50.50
# 仔細看那個接口, eth0:0 。那就是在該網絡接口上,再仿真一個網絡接口,
# 亦即是在一個網卡上面設置多個 IP 的意思啦
[root@linux ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3669 errors:0 dropped:0 overruns:0 frame:0
TX packets:2892 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:667547 (651.9 KiB) TX bytes:584799 (571.0 KiB)
Interrupt:209 Memory:fb000000-0
eth0:0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2
inet addr:192.168.200.2 Bcast:192.168.200.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:209 Memory:fb000000-0
# 仔細看,是否和硬件有關的信息都相同。沒錯。因為是同一個網卡。
[root@linux ~]# ifconfig eth0:0 down
# 關掉 eth0:0 這個接口。如果想要啟動 eth1 ,并且不設置所有網絡參數
# ifconfig eth1 up 就能實現
[root@linux ~]# /etc/init.d/network restart
# 剛剛設置的數據全部失效,會以 ifcfg-ethx 的設置為主
使 用ifconfig能暫時用手動來設置或修改某個適配卡的相關功能,并且也能通過eth0:0這種虛擬的網絡接口來設置一張網卡上面的多個IP。手動的方 式是比較簡單。而且設置錯誤也沒有關系,因為我們能利用 /etc/init.d/network restart來重新啟動整個網絡接口,那么之前手動的設置數據會全部失效。另外,要啟動某個網絡接口,但又不讓他具有IP參數時,直接給他 ifconfig eth0 up即可。這個操作經常在無線網卡當中進行,因為我們需要啟動無線網卡讓他去檢測AP存在和否。
linux常用網絡命令2. ifup、ifdown
實時地手動修改一些網絡接口參數,能利用ifconfig來實現,如果是要直接以設置文件,亦即是在 /etc/sysconfig/network-scripts里面的ifcfg-ethx等文件的設置參數來啟動的話,那就得要通過ifdown或ifup來實現了。
[root@linux ~]# ifup {interface}
[root@linux ~]# ifdown {interface}
[root@linux ~]# ifup eth0
ifup 和ifdown真是太簡單了。這兩個程式其實是script而已,他會直接到 /etc/ sysconfig/network-scripts目錄下搜索對應的設置文件,例如ifup eth0,他會找出ifcfg-eth0這個文件的內容,然后加以設置。關于ifcfg-eth0的設置請參考前一章連上Internet的說明。
不 過,由于這兩個程式主要是搜索設置文件(ifcfg-ethx)來進行啟動和關閉的,所以在使用前請確定ifcfg-ethx是否真的存在于正確的目錄 內,否則會啟動失敗。另外,如果以ifconfig eth0來設置或是修改了網絡接口后,就無法再以ifdown eth0的方式來關閉了。因為ifdown會分析比較目前的網絡參數和ifcfg-eth0是否相符,不符的話,就會放棄這次操作。因此,使用 ifconfig修改完畢后,應該要以ifconfig eth0 down才能夠關閉該接口。
路由修改route
我們在網絡基礎的時候談過關于路由的問題,兩臺主機之間一定要有路由才能夠互通TCP/IP的協議,否則就無法進行聯機。一般來說,只要有網絡接口,該接口就會產生一個路由,例如,在鳥哥實驗室內部的主機有一個eth0及l(fā)o,所以:
[root@linux ~]# route [-nee]
[root@linux ~]# route add [-net|-host] [網段或主機] netmask [mask] [gw|dev]
[root@linux ~]# route del [-net|-host] [網段或主機] netmask [mask] [gw|dev]
觀察的參數:
-n,不要使用通信協議或主機名稱,直接使用 IP 或 Port Number;
-ee,使用更周詳的信息來顯示;
增加 (add) 和刪除 (del) 路由的相關參數;
-net,表示后面接的路由為一個網段;
-host,表示后面接的為連接到單臺主機的路由;
Netmask,和網段有關,能設置 netmask 決定網段的大小;
Gw,gateway 的簡寫,后續(xù)接的是 IP 的數值,和 dev 不同;
Dev,如果只是要指定由哪一塊網卡聯機出去,則使用這個設置,后面接 eth0 等。
范例一:單純的觀察路由狀態(tài)
[root@linux ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use 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
[root@linux ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default Server.cluster 0.0.0.0 UG 0 0 0 eth0
在 上面的例子中仔細觀察route和route -n的輸出結果,你能發(fā)現有加-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):需要通過外部的主機來傳遞數據包。
Ø R(reinstate route for dynamic routing):使用動態(tài)路由時,恢復路由信息的標記。
Ø D(dynamically installed by daemon or redirect):已由服務器或轉port功能設置為動態(tài)路由。
Ø M(modified from routing daemon or redirect):路由已被修改了。
Ø!(reject route):這個路由將不會被接受(用來阻止不安全的網段)。
? Iface:這個路由傳遞數據包的接口。
此 外,觀察一下上面的路由排列順序,依序是由小網段(192.168.10.0/24是Class C),逐漸到大網段(169.254.0.0/16 是Class B),最后則是默認路由(0.0.0.0/0.0.0.0)。然后當我們要判斷某個網絡數據包應該怎么傳送的時候,該數據包會經由這個路由的過程來判斷。 例如,我上頭僅有三個路由,若我有一個傳往192.168.10.20的數據包要傳遞,那首先會找192.168.10.0/24這個網段的路由,找到 了,就直接由eth0傳送出去。
如果是傳送到Yahoo的主機呢?Yahoo的主機IP是202.43.195.52,我通過判斷不是 192.168.10.0/24,也不是169.254.0.0/16,結果到達0/0時,傳出去了,通過eth0將數據包傳給 192.168.10.30那臺Gateway主機。所以說,路由是有順序的。
因此當你重復設置多個同樣的路由時,例如,在你的主機上的兩張網卡設置為相同網段的IP時,會出現什么情況?會出現如下的情況:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
也就是說,由于路由是依照順序來排列和傳送的,所以不論數據包是由哪個接口(eth0、eth1)所接收,都會由上述的eth0傳送出去,所以,在一臺主機上面設置兩個相同網段的IP本身沒有什么意義。多此一舉。除非是類似虛擬主機(Xen、VMware等軟件)所架設的多主機,才會有這個必要。
范例二:路由的增加和刪除
[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0
# 上面這個操作能刪除掉 169.254.0.0/16 這個網段
# 請注意,在刪除的時候,需要將路由表上面出現的信息都寫入
# 包括netmask、dev 等參數
[root@linux ~]# 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
# 因為我的環(huán)境內僅有 192.168.10.100 這個 IP ,所以不能和 192.168.200.254
# 這個網段直接使用 MAC 互通
[root@linux ~]# route add default gw 192.168.10.30
# 增加默認路由的方法。請注意,只要有一個默認路由就夠了
# 在這個地方如果你隨便設置后,記得使用下面的命令重新設置你的網絡
# /etc/init.d/network restart
如 果是要進行路由的刪除和增加,那就能參考上面的例子了,其實,使用man route里面的信息就非常豐富了。仔細查閱一下。你只要記得,當出現“SIOCADDRT: Network is unreachable”這個錯誤時,肯定是由于gw后面接的IP無法直接和你的網段溝通(Gateway并不在你的網段內),所以,趕緊檢查一下輸入的 信息是否正確。
linux常用網絡命令3.ip
這里的ip是個命令,不是那個TCP/IP的IP。這個ip命令的功能可多了?;?本上,他就是集合了ifconfig和route這兩個命令了,不過ip能實現的功能卻又多得多,真是個相當厲害的命令。如果你有興趣的話,請自行vi /sbin/ifup,就知道整個ifup就是利用ip這個命令來實現的。好了,怎么使用呢?讓我們來看看。
[root@linux ~]# ip [option] [操作] [命令]
參數:
Option,設置的參數,主要有:
-s,顯示出該設備的統(tǒng)計數據(statistics),例如總接受數據包數等;
操作,亦即是能針對哪些網絡參數進行操作,包括有:
Link,關于設備(device) 的相關設置,包括MTU、MAC 地址等等
addr/address,關于額外的 IP 協議,例如多 IP 的實現等等;
route,和路由有關的相關設置
由上面的語法我們能知道,ip除了能設置一些基本的網絡參數之外,還能夠進行額外的IP協議,包括多IP的實現,真是太完美了。下面我們就分3個部分(link、addr、route)來介紹這個ip命令吧。
1. 關于設備接口(device)的相關設置:ip link
ip link能設置和設備(device)有關的相關設置,包括MTU及該網絡接口的MAC等,當然也能啟動(up)或關閉(down)某個網絡接口了。整個語法是這樣的:
[root@linux ~]# ip [-s] link show mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
3: sit0: mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
[root@linux ~]# ip -s link show eth0
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
484011792 2247372 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2914104290 2867753 0 0 0 0
使 用ip link show能顯示出整個設備接口的硬件相關信息,如上所示,包括網卡地址(MAC)、MTU等,比較有趣的應該是那個sit0的接口了,那個sit0的接口 是用在IPv4及IPv6的數據包轉換上的,對于我們僅使用IPv4的網絡是沒有作用的。lo及sit0都是主機內部所自行設置的。而如果加上 -s的參數后,則這個網卡的相關統(tǒng)計信息就會被列出來,包括接收(RX)及傳送(TX)的數據包數量等,周詳的內容和ifconfig輸出的結果是相同 的。
范例二:啟動、關閉和設置設備的相關信息
[root@linux ~]# ip link set eth0 up
# 啟動 eth0 這個設備接口。
[root@linux ~]# ip link set eth0 down
# 就關閉啊。簡單得要命
[root@linux ~]# ip link set eth0 mtu 1000
# 更改 MTU 的值,實現 1000 bytes,單位就是 bytes
使用ifconfig也能更新網卡的MTU,沒什么不相同的地方,不過,如果是要更改網卡代號、MAC地址的信息的話,那可就得使用ip了。不過,設置前得要先關閉該網卡,否則會不成功。如下所示:
范例三:修改網卡代號、MAC 等參數
[root@linux ~]# ip link set eth0 name vbird
SIOCSIFNAME: Device or resource busy
# 因為該設備目前是啟動的,所以不能這樣設置。你應該這樣做:
[root@linux ~]# ip link set eth0 down mtu 900 qdisc pfifo_fast qlen 1000
link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
# 怕了吧?連網卡代號都能改動。不過,玩玩后記得改回來
# 因為我們的 ifcfg-eth0 還是使用原本的設備代號。避免有問題,要改回來
[root@linux ~]# ip link set vbird name eth0
在這個設備的硬件相關信息設置上面,包括MTU、MAC及傳輸的模式等,都能在這里設置。有趣的是那個address的項目后面接的可是硬件地址(MAC)而不是IP。非常容易搞錯。切記切記。更多的硬件參數能使用man ip查閱一下和ip link有關的設置。
2. 關于額外的IP相關設置:ip address
如果說ip link是和OSI七層協議的第二層數據鏈路層有關的話,那么IP address(IP addr)就是和第三層網絡層有關的參數了。主要是在設置和IP有關的各項參數,包括netmask、broadcast等。
[root@linux ~]# ip address show mtu 16436 qdisc noqueue
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: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet6 fe80::250:fcff:fe22:9acb/64 scope link
valid_lft forever preferred_lft forever
3: sit0: mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
看到上面那個特別的字體嗎?沒錯,那就是IP參數,也是ip address最主要的功能。下面我們進一步來新增虛擬的網絡接口看看:
范例二:新增一個接口,名稱假設為 eth0:vbird
[root@linux ~]# ip address add 192.168.50.50/24 broadcast + \
> dev eth0 label eth0:vbird
[root@linux ~]# ip address show eth0
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:40:d0:13:c3:46 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::240:d0ff:fe13:c346/64 scope link
valid_lft forever preferred_lft forever
# 看到上面的特別字體了吧?多出了一行新的接口,且名稱是 eth0:vbird
# 至于那個 broadcast + 也能寫成 broadcast 192.168.50.255
[root@linux ~]# ifconfig
eth0:vbir Link encap:Ethernet HWaddr 00:40:D0:13:C3:46
inet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:5 Base address:0x3e00
# 如果使用 ifconfig 就能夠看到這個怪東西
范例三:將剛才的接口刪除
[root@linux ~]# ip address del 192.168.50.50/24 dev eth0
# 刪除就比較簡單
3. 關于路由的相關設置:ip route
這個項目當然就是路由的觀察和設置了。事實上,ip route的功能幾乎和route命令差不多,不過,他還能進行額外的參數設計,例如MTU的規(guī)劃等,功能相當強大。
[root@linux ~]# ip route show
如上述代碼所示,最簡單的功能就是顯示出目前的路由信息,其實跟route命令相同,只是需要注意幾個小細節(jié):
? proto:此路由的路由協議,主要有Redirect、Kernel、Boot、Static、Ra等,其中Kernel指的是直接由核心判斷自動設置。
? scope:路由的范圍,主要是link,即是和本設備有關的直接聯機。
再來看一下怎么進行路由的增加和刪除吧。
范例二:增加路由,主要是本機直接可溝通的網段
[root@linux ~]# ip route add 192.168.5.0/24 dev eth0
# 針對本機直接溝通的網段設置好路由,不必通過外部的路由器
[root@linux ~]# ip route show
192.168.5.0/24 dev eth0 scope link
……以下省略……
范例三:增加能通往外部的路由,需通過 router
[root@linux ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@linux ~]# 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@linux ~]# ip route add default via 192.168.1.2 dev eth0
# 那個 192.168.1.2 就是我的默認路由器 (gateway) 的意思
# 真的記得,只要一個默認路由就 OK 。
范例五:刪除路由
[root@linux ~]# ip route del 192.168.10.0/24
[root@linux ~]# ip route del 192.168.5.0/24
事 實上,這個ip的命令實在是太博大精深了。剛接觸Linux網絡的朋友,可能會有點暈,沒有關系。你先會使用ifconfig、ifup、ifdown和 route即可,等以后有了經驗之后,再繼續(xù)回來用ip吧。有興趣的話,也能自行參考ethtool命令(man ethtool)。
iwlist、iwconfig
這兩個命令需要你有無線網卡才能夠進行使用。其用法如下:
? iwlist:利用無線網卡進行無線AP的檢測和取得相關的數據。
? iwconfig:設置無線網卡的相關參數。
5.1.5 dhClient
如 果你是使用DHCP協議在局域網內取得IP的話,那么是否一定要去編輯ifcfg-eth0內的BOOTPROTO呢?有個更快速的做法,就是利用 dhClient這個命令。因為這個命令才是真正發(fā)送DHCP請求的。如果不考慮其他的參數,他的用法非常簡單,使用下面的方法即可:
[root@linux ~]# dhClient eth0
非常簡單吧。這樣就能即時讓我們的網卡以DHCP協議去嘗試取得IP。不過在SuSE Distribution里面,他僅有dhcpcd這個程式,他和dhClient是相同的東西。
linux常用網絡命令4.ping
這 個ping是非常重要的命令,ping主要通過ICMP數據包來進行整個網絡的狀況報告,當然,最重要的就是ICMP type 0、8這兩個類型,分別是需求回報和主動回報網絡狀態(tài)是否存在的特性。要特別注意的是,ping需要通過IP數據包來傳送ICMP數據包,而IP數據包里 有個相當重要的TTL(Time To Live)屬性,這是個非常重要的路由特性,周詳的IP和ICMP表頭數據請參考網絡基礎的周詳介紹。
[root@linux ~]# ping [-bcstnM] IP
參數:
-b,后面接的是 broadcast 的 IP,用在你“需要對整個網段的主機進行 ping ”時;
-c,后面接的是執(zhí)行 ping 的次數,例如 -c 5 ;
-n,不進行 IP 和主機名稱的反查,直接使用 IP ;
-s,發(fā)送出去的 ICMP 數據包大小,默認為 56(bytes),再加 8 bytes 的 ICMP 表頭資料。
-t,TTL 的數值,默認是 255,每經過一個節(jié)點就會少
-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數據包去需求對方主機響應是否存在于網絡環(huán)境中。上面的響應信息當中,幾個重要的項目如下。
? 64 Bytes:表示這次傳送的ICMP數據包大小為64 Bytes,這是默認值。在某些特別場合中,例如,要搜索整個網絡內最大的MTU時,能使用-s 2000之類的數值來取代。
? icmp_seq=0:ICMP所檢測進行的次數,第一次編號為0。
? ttl=243:TTL和IP數據包內的TTL是相同的,每經過一個帶有MAC的節(jié)點(node)時,例如router、bridge時,TTL就會減少1,默認的TTL為255,你能通過 -t 150之類的方法來重新設置默認TTL數值。
? time=9.16 ms:響應時間,單位有ms(0.001秒)及µs(0.000001秒),一般來說,響應時間越小,表示兩臺主機之間的網絡聯機越良好。
如果你忘記加上 -c 3這樣的規(guī)定檢測次數,那就得要使用 [ctrl]-c將他結束掉了。
范例二:針對整個網段進行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address
如 果想要了解網內有多少臺主機存活著,那么使用ping -b broadcast就能夠知道了。而不必一臺一臺主機來檢測。另外要特別注意一下,如果你的主機和待檢測主機并不在同一個網段內,那么TTL默認使用 255,如果是同一個網段內,那么TTL默認則使用64??纯瓷厦娴妮敵黾纯擅靼住?/p>
我們在前幾章的網絡基礎里面談到加大幀(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
# 根本就是無法實現的。那怎么是好?用前一小節(jié)介紹的 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,那么請參考前一章節(jié)的內容來調整。
不過不要隨便調整MTU,除非真的有問題。通常是在如下情況調整MTU。
? 因為全部的主機群都是在內部的網段,例如群集架構(Cluster)的環(huán)境下,由于內部的網絡節(jié)點都是我們能控制的,因此能通過修改MTU來改進網絡性能。
? 因為操作系統(tǒng)默認的MTU和你的網段不符,導致某些網站能順利聯機,某些網站則無法聯機。以視窗系統(tǒng)操作系統(tǒng)作為聯機分享的主機時,在Client端挺容易發(fā)生這個問題。
如果是要連上Internet的主機,注意不要隨便調整MTU,因為我們無法知道Internet上面的每臺機器能夠支持的MTU到多大,因為這些也不是我們能夠管得到的。
另外,其實每種聯機方式都有不同的MTU值,常見的各種接口的MTU值如表5-1所示。
表5-1 常見的各種接口的MTU值
網絡接口
MTU
Ethernet
1500
PPPoE
1492
Dial-up(Modem)
576
網絡上也有免費幫忙查詢MTU和傳輸相關數據的網站,例如下面這個網站:
http://forums.speedguide.net:8117/
連接上這個網站之前,請先取消你瀏覽器上的代理服務器(Proxy)的設置,才能顯示出正確的信息。如果在視窗系統(tǒng)的系統(tǒng)上想要修改MTU值的話,那就得要修改視窗系統(tǒng)的日志文件,在視窗系統(tǒng)上面對于MTU的檢測和修改的周詳做法能參考微軟的官方網站:
http://www.microsoft.com/taiwan/msclub/member/TIPS/Spring_2001
/tip1to3/tip1to3_2.htm
linux常用網絡命令5.traceroute
我 們前面談到的命令大多數都是針對主機的網絡參數設置所需要的,而ping是兩臺主機之間的回應和否的判斷,那么有沒有命令能追蹤兩臺主機之間通過的各個節(jié) 點(Node)通信狀況的好壞呢?如果我們聯機到y(tǒng)ahoo的速度比平常慢,你覺得是自己的網絡環(huán)境有問題,還是外部的Internet有問題?如果是前 者的話,我們當然需要檢查自己的網絡環(huán)境,看看究竟是誰中毒了?但如果是Internet的問題呢?那只有“等等等”了。判斷是這個問題就得要使用 traceroute這個命令。
[root@linux ~]# traceroute [-nwig] IP
參數:
-n,能不必進行主機的名稱解析,只用 IP ,速度較快。
-w,若對方主機在幾秒鐘內沒有回聲就宣告不治...默認是 5 秒。
-i,用在比較復雜的環(huán)境,如果你的網絡接口非常多非常復雜時,才會用到這個參數。
例如,你有兩條 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個節(jié)點,traceroute會主動對這12個節(jié)點做ICMP的回應等待,并檢測回復的時間,每個節(jié)點會檢測三次。所以像上 面顯示的結果,發(fā)現每個節(jié)點其實回復的時間大約在200 ms以內,算是Internet的環(huán)境還能了。而且由上面的信息來看,在61.58.33.133這個節(jié)點后的傳輸延遲較久,至于之前的9個節(jié)點則有不錯 的表現。通過這種分析,能讓你了解到這條聯線是哪個環(huán)節(jié)出了問題。
另外,如果在默認的5秒鐘之內traceroute聽不到節(jié)點的回應,那么屏幕 上就會出現一個“*”的符號,告知該節(jié)點無法有順利的響應。由于我們的traceroute用的是ICMP數據包,有些防火墻或主機可能會將ICMP數據 包扔掉,因此就會造成等不到回應的狀況。另外,有些Gateway本來就不支持traceroute的功能,因此也會產生“*”的狀況,所以分析時要注意 一下。
linux常用網絡命令6.nslookup
這條命令的用途和host基本上是相同的,就是用來作為IP和主機名稱對應的檢查,同樣是使用 /etc/resolv.conf這個文件作為DNS服務器的來源選擇。
[root@linux ~]# nslookup [-query=[type]] [hostname|IP]
參數:
-query=type:查詢的類型,除了傳統(tǒng)的 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
linux常用網絡命令7.Telnet
Telnet 是早期個人計算機連接到服務器主機上工作時最重要的一個軟件了。他不僅能直接連接到服務器上,還能用來連接BBS呢。非常棒!不過,Telnet本身的數 據在傳送的時候是使用明文(原始的數據,沒有加密),所以數據在Internet上面跑的時候,會比較危險一點(就怕被別人監(jiān)聽)。更周詳的內容我們會在 “遠程聯機服務器”章節(jié)里做介紹的。
[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]
歡迎光臨。系統(tǒng)負載:0.16 0.16 0.16 [負載正常]
?─┼────┼─? ?? ┌┤夢之大地├────────────┐
?──┬──┬──??───┴┴───┬? │ │
?──┴──┴──? │ │ 夢之大地由 │
?────────? ?─? │ 【計算機網絡愛好社‧CCNS】 │
?───┬───? ?──? │ 維護管理 │
│ │ ?─? │ │
?───┴───? ?┴───────? └───────────┤By BenHe├┘
┌┤本站站長群├────────┐ ? ? ? ?
│站長: billcho │ ?────┼────??─┼─?┼──┼?
│系統(tǒng): 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所監(jiān)聽的服務都有其特別的命令,例如,上述的port 25就是本機接口提供的電子郵件服務,那個服務所支持的命令就如同上面使用的數據相同,不過其他的port就不見得支持這個ehlo命令,因為不同的 port有不同的程式嘛,當然支持的命令就不同了
linux常用網絡命令8.FTP
常常會聽到FTP這個服務。如果你想要下載Linux的光盤燒錄映象文件時,能到FTP網站,他們都是FTP提供者啊。那我們要怎么去下載呢?當然就是通過FTP的客戶端軟件了。在Linux下面,我們能通過FTP這個軟件,也能通過下一小節(jié)會提到的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 操作系統(tǒng)
220-/pub/Linux/ Linux 操作系統(tǒng)
....(其他省略)....
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 cd /pub dir get file mget file put file delete file mkdir dir lcd /home passive binary
FTP其實是個非常麻煩的協議,因為他使用兩個port分別進行命令和數據的通信,周詳的內容我們會在后續(xù)的FTP 服務器內詳談,這里我們先簡單介紹一下怎么使用FTP這個軟件。首先當然需要登錄了,所以在上面的代碼中填入賬號和密碼。由于提供匿名登錄,而匿名登錄者 的賬號就是anonymous,所以直接填寫那個賬號即可。如果是私人的FTP,可能需要提供一組完整的賬號和密碼。
登錄FTP主機后,就能夠使 用FTP軟件的功能進行上傳和下載的操作,幾個常用的FTP內命令如上述代碼所示,不過,鳥哥建議你能連到大學的FTP網站后,使用help(或問號 ?)來查詢可用的命令,然后嘗試下載以測試使用一下這個命令吧。這樣以后沒有瀏覽器的時候,你也能直接連接下載FTP了。
另外,如果由于某些原因,讓你的FTP主機的port開在非正規(guī)的端口,那你就能利用下面的方式來連接到該臺主機。
[root@linux ~]# FTP hostname 318
# 假設對方主機的 FTP 服務開啟在 318 這個 port 。
linux常用網絡命令9.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來顯示出能執(zhí)行的命令,和FTP非常類似。不過多了書簽的功能,而且也非常的類似于bash,這個功能非常不錯。 除了這個好用的文本界面的FTP軟件之外,事實上更有非常多圖像界面的好用軟件呢。最常見的就是gFTP了。不僅是圖像界面,而且和cute FTP非常像,非常容易上手。Cent OS本身就有提供gFTP了,你能拿出原版的光盤來安裝,然后進入X Window后,啟動一個Shell,輸入gFTP就能夠發(fā)現他的好用了。下面我們再來介紹一下實時通信吧。
linux常用網絡命令9.Gaim
我想,目前大家應該都知道什么是MSN、雅虎實時通及其他的通信軟件吧。那么要連上這些服務器時,該怎么處理哪?非常簡單,在X Window下面使用Gaim就行了,太方便了。請先進入X Window系統(tǒng),然后開啟一個終端機窗口,接著直接輸入Gaim(請注意你必須已安裝了Gaim了),然后就會出現如圖5-1所示的窗口。
圖5-1 Gaim使用范例圖
輸入你的賬號和密碼,并選擇相對應的實時通信服務器(如MSN或Yahoo實時通),就能進入到如圖5-2所示的界面
圖5-2 Gaim使用范例圖
當一切都沒有問題后,按下“登錄”按鈕,這樣就能在Linux上使用實時通信軟件了,方便得非常。
文本網頁瀏覽
什么?文本界面竟然有瀏覽器!別逗了好不好?呵呵!誰有那個時間在逗你。真的有這個東西,是在文本界面下上網瀏覽的好工具,他們分別是lynx及wget這兩個寶貝,不過,你必須確定你已安裝了這兩個軟件才行。下面就讓我們來聊一聊這兩個好用的家伙吧。
5.4.1 lynx
這 個命令最大的作用就是讓我們在文本模式下使用這個瀏覽器來瀏覽網頁。但鳥哥認為,這個文件最大的功能是查閱Linux本機上面以HTML語法寫成的文件信 息(Document),怎么說呢?如果你原來在Linux本機下面的 /usr/share/doc這個目錄看過文件信息的話,就會常常發(fā)現一些網頁文件,使用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來設置顯示的字符編碼(中國臺灣地區(qū)能選擇Big5編碼)。
? 其他的設置能使用上面的范例中最下面那一行的說明。
一些常見功能如下:
? h:Help,求助功能,在線說明書。
? g:Goto URL,按g后輸入網頁地址(URL)如
http://www.abc.edu/
等。
? d:download,下載文件。
? q:Quit,退出lynx 。
? Ctrl+C:強迫中止lynx的執(zhí)行。
? 方向鍵如下:
Ø 上:移動光標至本頁中“上一個可鏈接點”。
Ø 下:移動光標至本頁中“下一個可鏈接點”。
Ø 左: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使用范例圖
當然,因為你的環(huán)境可能是在Linux本機的tty1~tty6,所以無法顯示出中文,這個時候你就得要進行LANG=en_US之類的語言設置才行。而如果你常常需要瀏覽中文語系的網頁,那就能直接修改設置文件,例如 /etc/lynx.cfg這個文件內容:
[root@linux ~]# vi /etc/lynx.cfg
CHARACTER_SET:utf-8
另外,如果有時候你必須上網點選某個網站來自動取得更新時。例如,早期的自動在線更新主機名稱系統(tǒng),僅支持網頁更新,那你怎么進行更新呢?能使用lynx!利用 -dump這個參數先處理:
[root@linux ~]# lynx -dump \
> http://some.site.name/web.php?name=user&password=pw > testfile
上 面的網站后面有加個問號(?)對吧?后面接的則是利用網頁的GET功能取得的各項變量數據,利用這個功能,我們就能直接登錄到該網站上了。非常方便吧。而 且會將執(zhí)行的結果輸出到testfile文件中,不過如果網站提供的數據是以POST為主的話,那鳥哥就不知道怎么搞定了。
linux常用網絡命令10.tcpdump
說 實在的,對于tcpdump這個軟件來說,你甚至能說這個軟件其實就是個黑客軟件,因為他不僅能分析數據包的流向,連數據包的內容也能進行監(jiān)聽,如果你使 用的傳輸數據是明文的話,在Router上就可能被人家監(jiān)聽走了。非??膳隆K?,我們也要來了解一下這個軟件(注:這個tcpdump必須使用root 的身份執(zhí)行)。
[root@linux ~]# tcpdump [-nn] [-i 接口] [-w 儲存檔名] [-c 次數] [-Ae]
[-qX] [-r 文件] [所欲捕捉的數據內容]
參數:
-nn,直接以 IP 及 Port Number 顯示,而非主機名和服務名稱。
-i,后面接要「監(jiān)聽」的網絡接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要將監(jiān)聽所得的數據包數據儲存下來,用這個參數就對了。后面接文件名。
-c,監(jiān)聽的數據包數,如果沒有這個參數, tcpdump 會持續(xù)不斷的監(jiān)聽,
直到用戶輸入 [ctrl]-c 為止。
-A,數據包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁數據包資料。
-e,使用資料連接層 (OSI 第二層) 的 MAC 數據包數據來顯示。
-q,僅列出較為簡短的數據包信息,每一行的內容比較精簡。
-X,能列出十六進制 (hex) 及 ASCII 的數據包內容,對于監(jiān)聽數據包內容非常有用。
-r,從后面接的文件將數據包數據讀出來。那個「文件」是已存在的文件,
并且這個「文件」是由 -w 所制作出來的。
所欲捕捉的數據內容:我們能專門針對某些通信協議或是 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 這個網卡上的數據包,持續(xù) 3 秒
[root@linux ~]# 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 96 bytes
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win
9648
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win
9648
如 果你是第一次看tcpdump的man page時,肯定會暈菜的,因為tcpdump幾乎都是分析數據包的表頭數據,用戶如果沒有簡單的網絡數據包基礎知識,要看懂非常困難。所以,至少你得要 回到第2章“網絡基礎”里面去好好理解一下TCP數據包的表頭信息才好。至于那個在范例一所產生的輸出中,我們能大概區(qū)分為幾個字段,現以范例一當中那行 特別字體行來說明一下:
? 01:33:40.41:這個是此數據包被捕捉的時間,“時:分:秒”的單位。
? IP:通過的通信協議是IP。
? 192.168.1.100.22>:傳送端是192.168.1.100這個IP,而傳送的Port Number為22,那個大于(>)的符號指的是數據包的傳輸方向。
? 192.168.1.11.1190:接收端的IP是192.168.1.11,且該主機開啟port 1190來接收。
? P 116:232(116):這個數據包帶有PUSH的數據傳輸標志,且傳輸的數據為整體數據的116~232 Byte,所以這個數據包帶有116 Bytes的數據量。
? ack 1 win 9648:ACK和Window size的相關資料。
最 簡單的說法,就是該數據包是由192.168.1.100傳到192.168.1.11,通過的port是由22到1190,且?guī)в?16 Bytes的數據量,使用的是PUSH的標記,而不是SYN之類的主動聯機標志。不容易看得懂吧。所以,我才會講請務必到“TCP表頭數據”的章節(jié)去看一 看。
接下來,在一個網絡狀態(tài)非常忙的主機上面,你想要取得某臺主機對你聯機的數據包數據時,使用tcpdump配合管線命令和正則表達式也能,不 過,畢竟不好捕捉。我們能通過tcpdump的表達式功能,就能夠輕易地將所需要的數據獨立的取出來。在上面的范例一當中,我們僅針對eth0做監(jiān)聽,所 以整個eth0接口上面的數據都會被顯示到屏幕上,但這樣不好分析,能簡化嗎?例如,只取出port 21的聯機數據包,能這樣做:
[root@linux ~]# 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.11.1240 > 192.168.1.100.21:. ack 1 win 65535
01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240:P 1:21(20) ack 1 win 5840
01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 21 win 65515
01:54:42.79 IP 192.168.1.11.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.11.1240: . ack 17 win 5840
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840
看!這樣就僅取出port 21的信息,如果仔細看的話,你會發(fā)現數據包的傳遞都是雙向的,Client端發(fā)出請求而Server端則予以響應,所以,當然是有去有回了。而我們也就能經過這個數據包的流向來了解到數據包運動的過程了。例如:
? 我們先在一個終端機窗口輸入“tcpdump-i lo-nn”的監(jiān)聽。
? 再另開一個終端機窗口來對本機(127.0.0.1)登錄“ssh localhost”,那么輸出的結果會是怎么?
[root@linux ~]# 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
4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936:
S 920046702:920046702(0)
ack 933696133 win 32767
5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192
6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936:
P 1:23(22) ack 1 win 8192
7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192
代碼顯示的頭兩行是tcpdump的基本說明,然后:
第3行顯示的是來自Client端帶有SYN主動聯機的數據包。
第4行顯示的是來自Server端,除了響應Client端之外(ACK),還帶有SYN主動聯機的標志。
第5行則顯示Client端響應Server確定聯機建立(ACK)。
第6行以后則開始進入數據傳輸的步驟。
從 第3~5行的流程來看,熟不熟悉啊?沒錯。那就是3次握手的基礎流程,有趣吧。不過tcpdump之所以被稱為黑客軟件之一遠不止上面介紹的功能。上面介 紹的功能能用來作為我們主機的數據包聯機和傳輸的流程分析,這將有助于我們了解到數據包的運作,同時了解到主機的防火墻設置規(guī)則是否有需要修訂的地方。
更 有更神奇的用法。當我們使用tcpdump在Router上面監(jiān)聽明文的傳輸數據時,例如FTP傳輸協議,你覺得會發(fā)生什么問題呢?我們先在主機端執(zhí)行 “tcpdump -i lo port 21 -nn ?X”,然后再以FTP登錄本機,并輸入賬號和密碼,結果你就能發(fā)現如下的狀況:
[root@linux ~]# 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 .............2’
0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS.mypassw
0x0040: 6f72 6469 7379 6f75 0d0a ordisyou..
上 面的輸出結果已被簡化過了,你需要自行在你的輸出結果中搜索相關的字符串才行。從上面輸出結果的特別字體中,我們能發(fā)現該FTP軟件使用的是 vsFTPd,并且用戶輸入dmtsai這個賬號名稱,且密碼是mypasswordisyou。你說可不可怕啊。如果使用的是明文方式來傳輸你的網絡數 據呢?所以我們才常常在講啊,網絡是非常不安全的。
另外你得了解,為了讓網絡接口能讓tcpdump監(jiān)聽,所以執(zhí)行tcpdump時網絡接口會啟 動在“混雜模式(promiscuous)”,所以你會在 /var/log/messages里面看到非常多的警告信息,通知你說你的網卡被設置成為混雜模式。別擔心,那是正常的。至于更多的應用,請參考man tcpdump了。
例題:怎么使用tcpdump監(jiān)聽來自eth0適配卡且通信協議為port 22,目標來源為192.168.1.100的數據包資料?
答:tcpdump -i eth0 -nn ’port 22 and src host 192.168.1.100’。
linux常用網絡命令11.ethereal
除 了tcpdump這個軟件之外,其實你還能使用ethereal這個好用的網絡流量分析軟件。ethereal分為文本界面和圖像界面,文本界面的用法和 tcpdump類似,不過他的命令名稱為tethereal就是了。因為用法差不多,所以建議你直接使用man tethereal查閱。在Cent OS上原本就有ethereal,所以請拿出光盤來安裝即可,需要同時安裝ethereal和ethereal-gnome才行。
啟動的方法非常簡單,你需要在X Window下面,先啟動一個終端機,然后直接輸入ethereal后,就會出現如圖5-5所示的畫面
圖5-5 ethereal使用范例圖
簡單的做法,你能單擊如圖5-5顯示的那個按鈕,會出現挑選監(jiān)聽的接口窗口,如圖5-6所示。
圖5-6 ethereal使用范例圖
你應該選擇要監(jiān)聽的接口,在這里因為是測試用的,所以鳥哥使用的是lo這個內部接口,你當然應該要選擇你自己的網絡接口才是。然后單擊Start后,就會出現開始檢測的界面了,如圖5-7所示。
圖5-7 ethereal使用范例圖
在這個界面當中你能看到非常多類型的數據包協議,在等你處理完畢后,就能單擊Stop結束監(jiān)聽,而開始進入如圖5-8所示的數據包分析界面。
圖5-8 ethereal使用范例圖
數 據包分析界面共分為3大區(qū)塊,如圖5-8所示,第一區(qū)塊主要顯示的是數據包的標頭資料,內容有點類似tcpdump的顯示結果;第二區(qū)塊則是周詳的表頭數 據,包括通信協議的內容及Socket Pair等信息。第三區(qū)塊則是16進制和ASCII碼的顯示結果。通過這個ethereal,你就能一口氣得到所需要的所有數據包內容。而且還是圖像界面 的,非常方便吧。通過在第一區(qū)塊選擇不同的數據包,就能夠查閱每個數據包的數據內容了。
linux常用網絡命令12.nc、netcat
這 個nc能用來作為某些服務的檢測,因為他能連接到某個port來進行通信,此外,還能自行啟動一個port來傾聽其他用戶的聯機,非常好用。如果在編譯的 時候設置GAPING_SECURITY_HOLE參數的話,這個軟件還能用來取得客戶端的bash。可怕吧。我們的CentOS比較人性化,并沒有設置 上面的參數,所以我們不能夠用來作為黑客軟件。不過用來取代Telnet功能已夠用了(有的系統(tǒng)將執(zhí)行文件改名為netcat了)。
[root@linux ~]# nc [IP|host] [port]
[root@linux ~]# nc -l -p [port]
參數:
-l,作為監(jiān)聽之用,亦即開啟一個 port 來監(jiān)聽用戶的聯機。
-p,開啟的這個 Port Number。
范例一:連接本地端的 port 25 查閱相關信息
[root@linux ~]# nc localhost 25
localhost.localdomain [127.0.0.1] 25 (smtp) open
220 pc.dm.tsai ESMTP Postfix
ehlo localhost
250-pc.dm.tsai
250-PIPELINING
250-SIZE 40000000
250-ETRN
quit
221 Bye
這個最簡單的功能和Telnet幾乎相同吧,他能檢查某個服務。不過,更神奇的在后面,我們能建立兩個聯機來通信。舉個例子來說,我們先在Client端的地方啟動一個port來進行傾聽:
范例二:激活一個 port 來監(jiān)聽用戶的聯機需求
[root@linux ~]# nc -l -p 20000
# 啟動一個 port 20000 在主機上,如果此時使用 netstat ?tlnp。
# 就能看到系統(tǒng)上多出來一個 port 20000 在傾聽用戶的聯機。
然后在主機端的地方,也利用nc來聯機到客戶端,并且輸入一些命令看看。
[root@linux ~]# nc localhost 20000
此 時,在主機端我們能打入一些字,你會發(fā)目前Client端會同時出現你輸入的文字。如果你同時設置一些額外的參數,例如利用標準輸入和輸出(stdout 和stdin)的話,那么就能通過這個聯機來做非常多事情了。當然nc的功能不僅如此,你還能發(fā)現非常多的用途。請自行到你主機內的 /usr/share/doc/nc-1.10/scripts目錄下看看這些script,有幫助的。不過,如果你需要額外地編譯出含有GAPING_ SECURITY_HOLE功能,以使兩端聯機能進行額外命令的執(zhí)行時,就需要自己下載原始碼來編譯了。
重 點 回 顧
? 修改網絡接口的硬件相關參數,能使用ifconfig這個命令,包括MTU等。
? ifup和ifdown其實只是script,在使用時,會主動去 /etc/sysconfig/network- scripts里找到相對應的設備設置文件,才能夠正確地啟動和關閉。
? 路由的修改和查閱能使用route來查詢,此外,route亦可進行新增、刪除路由的工作。
? ip命令能用來作為整個網絡環(huán)境的設置,利用ip link能修改網絡設備的硬件相關功能,包括MTU和MAC等,能使用ip address修改TCP/IP方面的參數,包括IP及網段參數等,ip route則能修改路由。
? ping主要是通過ICMP數據包來進行網絡環(huán)境的檢測工作,并且能使用ping來查詢整體網段可接受的最大MTU值。
? 監(jiān)測每個節(jié)點的連接狀況,能使用traceroute這個命令來追蹤。
? netstat除了能觀察本機的啟動接口外,還能觀察Unix socket的傳統(tǒng)接口數據。
? host和nslookup默認都是通過/etc/resolv.conf內設置的DNS主機來進行主機名稱和IP的查詢。
? LFTP能用來匿名登錄遠程的FTP主機。
? Telnet不僅用來進行BBS的登錄,也能用來作為某些端口服務的測試。
? lynx主要的功能是瀏覽,包括本機上HTML語法的文件,wget則主要用來下載WWW的資料。
? 捕捉數據包以分析數據包的流向,可使用tcpdump,至于圖像界面的ethereal則能進行更為周詳的解析。
? 通過tcpdump分析3次握手,及分析明文傳輸的數據,可發(fā)現網絡加密的重要性。
? nc可用來取代Telnet進行某些服務端口的檢測工作,同時若自行編譯nc,可額外地執(zhí)行-e參數。