Linux資源監控命令/工具(網絡)

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

1)ifconfig
ifconfig主要是能夠手動的啓動、觀察與修改網絡接口的相關參數,能夠修改的參數不少啊,包括 IP 參數以及MTU等等均可以修改,他的語法以下:
[root@www ~]# ifconfig {interface} {up|down} <== 觀察與啓動接口
[root@www ~]# ifconfig interface {options} <== 設定與修改接口
選項與參數:
interface:網絡卡接口代號,包括 eth0, eth1, ppp0 等等
options:能夠接的參數,包括以下:
up, down:啓動 (up) 或關閉 (down) 該網絡接口(不涉及任何參數);
mtu:能夠設定不一樣的 MTU 數值,例如 mtu 1500 (單位爲 byte);
netmask:就是子屏蔽網絡;
broadcast:就是廣播地址啊!html

# 範例一:觀察全部的網絡接口(直接輸入 ifconfig)
[root@www ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD
inet addr:192.168.1.100 Bcast:192.168.1.255
Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
net.qiang@hotmail.com
RX packets:2555 errors:0 dropped:0 overruns:0 frame:0
TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB)
   通常來講,直接輸入 ifconfig 就會列出目前已經被啓動的卡,不論這個卡是否有給予IP,都會被顯示出來。而若是是輸入 ifconfig eth0,則僅會秀出這張接口的相關數據,而無論該接口是否有啓動。因此若是你想要知道某張網絡卡的 Hardware Address,直接輸入『 ifconfig "網絡接口代號" 』便可喔! ^_^!至於上表出現的各項數據是這樣的(數據排列由上而下、由左而右):node

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

範例二:暫時修改網絡接口,給予eth0一個 192.168.100.100/24的參數
[root@www ~]# ifconfig eth0 192.168.100.100 # 若是不加任何其餘參數,則系統會依照該IP所在的class範圍自動的計算出netmask以及network, broadcast 等IP參數,若想改其餘參數則:
[root@www ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 mtu 8000 #設定不一樣參數的網絡接口,同時設定MTU的數值!
[root@www ~]# ifconfig eth0 mtu 9000 #僅修改該接口的MTU數值,其餘的保持不動!
[root@www ~]# ifconfig eth0:0 192.168.50.50 #仔細看是eth0:0喔!那就是在該實體網卡上再仿真一個網絡接口,亦便是在一張網絡卡上面設定多個IP的意思
[root@www ~]# ifconfig eth0:0 down #關掉 eth0:0 這個界面。那若是想用默認值啓動 eth1:『ifconfig eth1 up』便可達成web

範例三:將手動的處理所有取消,使用原有的設定值重建網絡參數:
[root@www ~]# /etc/init.d/network restart # 剛剛設定的數據所有失效,會以ifcfg-ethX 的設定爲主!
使用ifconfig能夠暫時手動來設定或修改某個適配卡的相關功能,而且也能夠透過eth0:0這種虛擬的網絡接口來設定好一張網絡卡上面的多個IP ,手動的方式真是簡單啊!而且設定錯誤也不打緊,由於咱們能夠利用/etc/init.d/network restart來從新啓動整個網絡接口,那麼以前手動的設定數據會所有都失效喔!另外,要啓動某個網絡接口,但又不讓他具備IP參數時,直接給他ifconfig eth0 up便可! 這個動做常常在無線網卡當中會進行,由於咱們必需要啓動無線網卡讓他去偵測AP存在與否啊!shell

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

[root@www ~]# ifup {interface}
[root@www ~]# ifdown {interface}
ifup與ifdown 真是太簡單了!這兩支程序實際上是script而已,他會直接到/etc/sysconfig/network-scripts目錄下搜尋對應的配置文件,例如ifup eth0時,
他會找出ifcfg-eth0這個檔案的內容,而後來加以設定。不過,因爲這兩支程序主要是搜尋配置文件 (ifcfg-ethx) 來進行啓動與關閉的,因此在使用前請肯定 ifcfg-ethx是否真的存在於正確的目錄內,不然會啓動失敗喔!另外,若是以ifconfig eth0 .... 來設定或者是修改了網絡接口後,那就沒法再以ifdown eth0的方式來關閉了!由於ifdown會分析比對目前的網絡參數與ifcfg-eth0是否相符,不符的話,就會放棄該次動做。所以,使用ifconfig修改完畢後,應該要以ifconfig eth0 down纔可以關閉該接口。vim

重要配置文件:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" <==網絡卡代號,必需要ifcfg-eth0相對應
HWADDR="08:00:27:71:85:BD" <==就是網絡卡地址,若只有一張網卡,可省略此項目
NM_CONTROLLED="no" <==不要受到其餘軟件的網絡管理!
ONBOOT="yes" <==是否默認啓動此接口的意思
BOOTPROTO=none <==取得IP的方式,其實關鍵詞只有dhcp,手動可輸入none
IPADDR=192.168.1.100 <==就是IP啊
NETMASK=255.255.255.0 <==就是子網掩碼
GATEWAY=192.168.1.254 <==就是預設路由
# 重點是上面這幾個設定項目,底下的則能夠省略的!
NETWORK=192.168.1.0 <==就是該網段的第一個IP,可省略
BROADCAST=192.168.1.255 <==就是廣播地址囉,可省略
MTU=1500 <==就是最大傳輸單元的設定值,若不更改則可省略windows

 


二、路由修改:route
[root@www ~]# route [-nee]
[root@www ~]# route add [-net|-host] [網域或主機] netmask [mask] [gw|dev]
[root@www ~]# route del [-net|-host] [網域或主機] netmask [mask] [gw|dev]
參數:
-n:不要使用通信協議或主機名,直接使用IP或 port number;
-ee:使用更詳細的信息來顯示瀏覽器

增長(add) 與刪除(del)路由的相關參數:
-net:表示後面接的路由爲一個網域;
-host:表示後面接的爲鏈接到單部主機的路由;
netmask:與網域有關,能夠設定netmask決定網域的大小;
gw:gateway 的簡寫,後續接的是 IP 的數值喔,與 dev 不一樣;
dev:若是隻是要指定由那一塊網絡卡聯機出去,則使用這個設定,後面接eth0等

範例一:單純的觀察路由狀態
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0

[root@www ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
加-n參數的主要是顯示出IP ,至於使用route而已的話,顯示的則是『主機名』喔!也就是說,在預設的狀況下,route會去找出該IP的主機名,若是找不到呢?就會顯示的鈍鈍的(有點小慢),因此說,一般都直接使用route -n啦!由上面看起來,咱們也知道 default=0.0.0.0/0.0.0.0,而上面的信息有哪些你必需要知道的呢?

Destination, Genmask:這兩個玩意兒就是分別是 network與netmask啦!因此這兩個咚咚就組合成爲一個完整的網域囉!
Gateway:該網域是經過哪一個 gateway 鏈接出去的?若是顯示 0.0.0.0 表示該路由是直接由本機傳送,亦便可以透過局域網絡的 MAC 直接傳訊;若是有顯示IP的話,表示該路由須要通過路由器 (通信閘) 的幫忙纔可以傳送出去。
Flags:總共有多個旗標,表明的意義以下:
U (route is up):該路由是啓動的;
H (target is a host):目標是一部主機 (IP) 而非網域;
G (use gateway):須要透過外部的主機 (gateway) 來轉遞封包;
R (reinstate route for dynamic routing):使用動態路由時,恢復路由信息的旗標;
D (dynamically installed by daemon or redirect):已經由服務或轉port功能設定爲動態路由
M (modified from routing daemon or redirect):路由已經被修改了;
! (reject route):這個路由將不會被接受(用來抵擋不安全的網域! )
Iface:這個路由傳遞封包的接口。

此外,觀察一下上面的路由排列順序喔,依序是由小網域(192.168.1.0/24 是Class C),逐漸到大網域(169.254.0.0/16 Class B)最後是預設路由(0.0.0.0/0.0.0.0)。而後當咱們要判斷某個網絡封包應該如何傳送的時候,該封包會經由這個路由的過程來判斷喔!

# 範例二:路由的增長與刪除
[root@www ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0 #刪除掉169.254.0.0/16這個網域!

[root@www ~]# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0 #透過route add來增長一個路由!請注意,這個路由的設定必需要可以與你的網絡互通。舉例來講,若是我下達底下的指令就會顯示錯誤:route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254 #由於個人主機內僅有192.168.1.11這個IP ,因此不能直接與192.168.200.254這個網段直接使用MAC互通!這樣說,能夠理解嗎?

[root@www ~]# route add default gw 192.168.1.250 #增長預設(默認)路由的方法!請注意,只要有一個預設路由就夠了喔!一樣的那個192.168.1.250的IP也須要能與你的LAN通才行!在這個地方若是你隨便設定後,記得使用這個指令從新設定你的網絡:/etc/init.d/network restart

Tips:通常來講,若是一個新的環境內的主機,在不想要變更原系統的網絡狀況下,又須要臨時配置一個新的網絡用於測試,能夠先手動變成:『ifconfig eth0 192.168.1.100; route add default gw 192.168.1.254』這樣就配置了一個新的網絡。等到完成測試後,再給她/etc/init.d/network restart恢復原系統的網絡便可。

 


三、網絡參數綜合指令:ip
[root@www ~]# ip [option] [動做] [指令]
選項與參數:
option:設定的參數,主要有:
-s :顯示出該裝置的統計數據(statistics),例如總接受封包數等;
動做:亦便是能夠針對哪些網絡參數進行動做,包括:
link :關於裝置 (device) 的相關設定,包括MTU, MAC地址等等
addr/address :關於IP協議,例如多IP的達成等等;
route :與路由有關的相關設定
1)關於裝置接口 (device) 的相關設定:ip link
ip link能夠設定與裝置 (device) 有關的相關參數,包括MTU以及該網絡接口的MA 等等,固然也能夠啓動(up)或關閉(down)某個網絡接口啦!整個語法是這樣的:
[root@www ~]# ip [-s] link show <== 單純的查閱該裝置相關的信息
[root@www ~]# ip link set [device] [動做與參數]
選項與參數:
show:僅顯示出這個裝置的相關內容,若是加上-s會顯示更多統計數據;
set:能夠開始設定項目, device 指的是 eth0, eth1 等等界面代號;
動做與參數:
up|down:啓動(up)或關閉(down)某個接口,其餘參數使用默認的以太網絡;
address:若是這個裝置能夠更改MAC的話,用這個參數修改!
name:給予這個裝置一個特殊的名字;
mtu:最大傳輸單元

#範例一:顯示出全部的接口信息
[root@www ~]# ip link show
[root@www ~]# ip -s link show eth0
使用ip link show能夠顯示出整個裝置接口的硬件相關信息,包括網卡地址(MAC)、MTU等等,而若是加上 -s 的參數後則這個網絡卡的相關統計信息就會被列出來, 包括接收(RX)及傳送(TX)的封包數量等等,詳細的內容與ifconfig所輸出的結果相同的。

範例二:啓動、關閉與設定裝置的相關信息
[root@www ~]# ip link set eth0 up #啓動 eth0 這個裝置接口;
[root@www ~]# ip link set eth0 down #就關閉啊!簡單的要命~
[root@www ~]# ip link set eth0 mtu 1000 # 更改MTU的值,達到1000bytes,單位就是bytes啊!
更新網絡卡的MTU使用ifconfig也能夠達成啊!沒啥了不得,不過,若是是要更改『網絡卡代號、 MAC 地址的信息』的話,那可就得使用ip囉~不過,設定前可能得
要先關閉該網絡卡,不然會不成功。 以下所示:

# 範例三:修改網絡卡代號、MAC 等參數
[root@www ~]# ip link set eth0 down <==關閉界面
[root@www ~]# ip link set eth0 name vbird <==設定
[root@www ~]# ip link show <==觀察一下
[root@www ~]# ip link set vbird name eth0 <==改回來
[root@www ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@www ~]# ip link show eth0
若是你的網絡卡支持硬件地址(MAC)能夠更改的話,上面這個動做就能夠更改你的網絡卡地址了!厲害吧!不過,仍是那句老話,測試完以後請馬上改回來。

2)關於額外的IP相關設定:ip address
若是說ip link是與 OSI七層協定的第二層有關的話,那麼 ip address(ip addr)就是與第三層網絡層有關的參數啦!主要是在設定與IP有關的各項參數,包括 netmask, broadcast 等等。
[root@www ~]# ip address show <==就是查閱 IP 參數啊!

[root@www ~]# ip address [add|del] [IP 參數] [dev 裝置名] [相關參數]
選項與參數:
show:單純的顯示出接口的 IP 信息啊;
add|del:進行相關參數的增長(add)或刪除(del)設定;
IP參數:主要就是網域的設定,例如 192.168.100.100/24之類的設定喔;
dev :這個 IP 參數所要設定的接口,例如 eth0, eth1 等等;
相關參數:
broadcast:設定廣播地址,若是設定值是 + 表示『讓系統自動計算』
label:亦便是這個裝置的別名,例如 eth0:0 就是了!
scope:這個界面的領域,一般是這幾個大類:
global:容許來自全部來源的聯機;
site:僅支持 IPv6 ,僅容許本主機的聯機;
link:僅容許本裝置自我聯機;
host:僅容許本主機內部的聯機;
因此固然是使用 global 囉!預設也是 global 啦!

範例一:顯示出全部的接口之IP參數:
[root@www ~]# ip address show

範例二:新增一個接口,名稱假設爲 eth0:vbird
[root@www ~]# ip address add 192.168.50.50/24 broadcast + dev eth0 label eth0:vbird #那個 broadcast + 也能夠寫成broadcast 192.168.50.255啦!
[root@www ~]# ip address show eth0

範例三:將剛剛的界面刪除
[root@www ~]# ip address del 192.168.50.50/24 dev eth0 #刪除就比較簡單

3)關於路由的相關設定:ip route
這個項目固然就是路由的觀察與設定囉!事實上,ip route的功能幾乎與route這個指令差很少,可是他還能夠進行額外的參數設計,例如MTU的規劃等等,至關的強悍啊!
[root@www ~]# ip route show <==單純的顯示出路由的設定而已
[root@www ~]# ip route [add|del] [IP 或網域] [via gateway] [dev 裝置]
選項與參數:
show :單純的顯示出路由表,也可使用list;
add|del :增長(add)或刪除(del)路由的意思。
IP 或網域:可以使用 192.168.50.0/24之類的網域或者是單純的IP;
via:從那個 gateway 出去,不必定須要;
dev:由那個裝置連出去,這就須要了!
mtu:能夠額外的設定 MTU 的數值喔!

範例一:顯示出目前的路由資料
[root@www ~]# ip route show

範例二:增長路由,主要是本機直接可溝通的網域
[root@www ~]# ip route add 192.168.5.0/24 dev eth0 #針對本機直接溝通的網域設定好路由,不須要透過外部的路由器
[root@www ~]# ip route show

範例三:增長能夠通往外部的路由,需透過router喔!
[root@www ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@www ~]# ip route show

範例四:增長預設路由
[root@www ~]# ip route add default via 192.168.1.254 dev eth0 #只要一個預設路由就OK !

範例五:刪除路由
[root@www ~]# ip route del 192.168.10.0/24
[root@www ~]# ip route del 192.168.5.0/24

 


四、無線網絡:iwlist, iwconfig
iwlist:利用無線網卡進行無線AP的偵測與取得相關的數據
iwconfig:設定無線網卡的相關參數

 


五、手動使用 DHCP 自動取得IP參數: dhclient
若是你是使用 DHCP 協議在局域網絡內取得 IP 的話,那麼是否必定要去編輯ifcfg-eth0內的BOOTPROTO呢?嘿嘿!有個更快速的做法,那就是利用dhclient這個指令~由於這個指令纔是真正發送dhcp要求工做的程序啊!
範例:
[root@www ~]# dhclient eth0
夠簡單吧!這樣就能夠馬上叫咱們的網絡卡以dhcp協議去嘗試取得IP喔!

 


六、兩部主機兩點溝通:ping
ping主要透過ICMP封包來進行整個網絡的情況報告,最重要的就是那個ICMP type 0, 8這兩個類型,分別是要求回報與主動回報網絡狀態是否存在的特性。要特別注意的是,ping仍是須要透過IP 封包來傳送ICMP封包的,而IP封包裏面有個至關重要的TTL屬性,這是很重要的一個路由特性。
[root@www ~]# ping [選項與參數] IP
選項與參數:
-c 數值:後面接的是執行ping的次數,例如-c 5;
-n:在輸出數據時不進行IP與主機名的反查,直接使用IP輸出(速度較快);
-s 數值:發送出去的ICMP封包大小,預設爲56bytes,不過你能夠放大此數值;
-t 數值:TTL 的數值,預設是 255,每通過一個節點就會少一;
-W 數值:等待響應對方主機的秒數。
-M [do|dont] :主要在偵測網絡的 MTU 數值大小,兩個常見的項目是:
do:表明傳送一個DF(Don't Fragment)旗標,讓封包不能從新拆包與打包;
dont:表明不要傳送DF旗標,表示封包能夠在其餘主機上拆包與打包

範例一:偵測一下168.95.1.1這部DNS主機是否存在?
[root@www ~]# ping -c 3 168.95.1.1
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=1 ttl=245 time=15.4 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=245 time=10.0 ms
64 bytes from 168.95.1.1: icmp_seq=3 ttl=245 time=10.2 ms
--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2047ms
rtt min/avg/max/mdev = 10.056/11.910/15.453/2.506 ms
ping最簡單的功能就是傳送ICMP 封包去要求對方主機迴應是否存在於網絡環境中,上面的響應消息當中,幾個重要的項目是這樣的:
64 bytes:表示此次傳送的 ICMP 封包大小爲 64 bytes 這麼大,這是默認值,在某些特殊場合中,例如要搜索整個網絡內最大的MTU時,可使用 -s 2000之類的數值來取代;?
icmp_seq=1:ICMP所偵測進行的次數,第一次編號爲1;
ttl=243:TTL與IP封包內的TTL是相同的,每通過一個帶有MAC的節點(node)時,例如 router, bridge 時,TTL 就會減小一,預設的TTL爲255,你能夠透過-t 150之類的方法來從新設定預設 TTL 數值;
time=15.4 ms:響應時間,單位有ms(0.001 秒)及us(0.000001 秒),通常來講,越小的響應時間,表示兩部主機之間的網絡聯機越良好!
若是你忘記加上 -c 3這樣的規定偵測次數,那就得要使用 [ctrl]-c將他結束掉!

用ping追蹤路徑中的最大MTU數值?
咱們知道網絡卡的MTU修改能夠透過ifconfig或者是ip等指令來達成,那麼追蹤整個網絡傳輸的最大MTU時,又該如何查詢?呵呵!最簡單的方法固然是透過ping傳送一個大封包,而且不準中繼的路由器或switch將該封包重組,那就可以處理啦!沒錯!能夠這樣的:

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

常見的各類接口的MTU值分別爲︰
網絡接口 MTU
Ethernet 1500
PPPoE 1492
Dial-up(Modem) 576

 


七、兩主機間各節點分析:traceroute
[root@www ~]# traceroute [選項與參數] IP
選項與參數:
-n:能夠沒必要進行主機的名稱解析,單純用IP,速度較快!
-U:使用UDP的port 33434 來進行偵測,這是預設的偵測協議;
-I:使用ICMP的方式來進行偵測;
-T:使用TCP來進行偵測,通常使用port 80測試
-w:若對方主機在幾秒鐘內沒有回聲就宣告不治...預設是 5 秒
-p 端口:若不想使用 UDP 與 TCP 的預設埠號來偵測,可在此改變埠號。
-i 裝置:用在比較複雜的環境,若是你的網絡接口不少很複雜時,纔會用到這個參數;舉例來講,你有兩條ADSL能夠鏈接到外部,那你的主機會有兩個ppp,你可使用-i來選擇是ppp0仍是ppp1啦!
-g 路由:與-i的參數相仿,只是-g後面接的是gateway的I 就是了。

範例一:偵測本機到yahoo去的各節點聯機狀態
[root@www ~]# traceroute -n tw.yahoo.com
traceroute to tw.yahoo.com (119.160.246.241), 30 hops max, 40 byte packets
1 192.168.1.254 0.279 ms 0.156 ms 0.169 ms
2 172.20.168.254 0.430 ms 0.513 ms 0.409 ms
3 10.40.1.1 0.996 ms 0.890 ms 1.042 ms
4 203.72.191.85 0.942 ms 0.969 ms 0.951 ms
5 211.20.206.58 1.360 ms 1.379 ms 1.355 ms
6 203.75.72.90 1.123 ms 0.988 ms 1.086 ms
7 220.128.24.22 11.238 ms 11.179 ms 11.128 ms
8 220.128.1.82 12.456 ms 12.327 ms 12.221 ms
9 220.128.3.149 8.062 ms 8.058 ms 7.990 ms
10 * * *
11 119.160.240.1 10.688 ms 10.590 ms 119.160.240.3 10.047 ms
12 * * * <==可能有防火牆裝置等狀況發生所致
這個traceroute挺有意思的,這個指令會針對欲鏈接的目的地之全部node進行UDP的超時等待,例如上面的例子當中,由鳥哥的主機鏈接到Yahoo時,他會通過12個
節點以上,traceroute會主動的對這12個節點作UDP的回聲等待,並偵測回覆的時間,每節點偵測三次,最終回傳像上頭顯示的結果。你能夠發現每一個節點其實回覆的
時間大約在50 ms之內,算是還能夠的Internet環境了。
比較特殊的算是第10/12個,會回傳星號的表明該node可能設有某些防禦措施,讓咱們發送的封包信息被丟棄所致。 由於咱們是直接透過路由器轉遞封包,並無進入路由器去取得路由器的使用資源,因此某些路由器僅支持封包轉遞,並不會接受來自客戶端的各項偵測啦!此時就會出現上述的問題。由於traceroute預設使用UDP封包,若是你想嘗試使用其餘封包,那麼-I或-T能夠試看看囉!
因爲目前UDP/ICMP的攻擊層出不窮,所以不少路由器可能就此取消這兩個封包的響應功能。因此咱們可使用TCP來偵測呦!例如使用一樣的方法,透過等待時間1 秒,以及TCP 80端口的狀況下,能夠這樣作:
[root@www ~]# traceroute -w 1 -n -T tw.yahoo.com

 


八、察看本機的網絡聯機與後臺: netstat
[root@www ~]# netstat -[rn] <==與路由有關的參數
[root@www ~]# netstat -[antulpc] <==與網絡接口有關的參數
選項與參數:
與路由(route)有關的參數說明:
-r:列出路由表(route table),功能如同route這個指令;
-n:不使用主機名與服務名稱,使用IP與port number,如同route -n
與網絡接口有關的參數:
-a:列出全部的聯機狀態,包括tcp/udp/unix socket等;
-t:僅列出TCP封包的聯機;
-u:僅列出UDP封包的聯機;
-l:僅列出有在Listen(監聽)的服務之網絡狀態;
-p:列出PID與Program的檔名;
-c:能夠設定幾秒鐘後自動更新一次,例如-c 5每五秒更新一次網絡狀態的顯示;

-e 顯示擴展信息,例如uid等;
-s 按各個協議進行統計。

提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到

netstat的輸出主要分爲兩大部分,分別是TCP/IP的網絡接口部分以及傳統的Unix socket部分(Active Unix domain sockets的內容)。 
一般建議加上-n 這個參數的,由於能夠避過主機名與服務名稱的反查,直接以IP及端口口號碼(port number)來顯示,顯示的速度上會快不少!

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

    其中"Recv-Q"和"Send-Q"指%0A的是接收隊列和發送隊列。這些數字通常都應該是0。若是不是則表示軟件包正在隊列中堆積。這種狀況只能在很是少的狀況見到。 

Active UNIX domain sockets稱爲有源Unix域套接口(和網絡套接字同樣,可是隻能用於本機通訊,性能能夠提升一倍):

Proto   顯示鏈接使用的協議
RefCnt   表示鏈接到本套接口上的進程號
Types   顯示套接口的類型
State   顯示套接口當前的狀態
Path   表示鏈接到套接口的其它進程使用的路徑名
Flags   聯機的旗標

實用命令實例
1)列出全部端口 (包括監聽和未監聽的)
列出全部端口:netstat -a
列出全部tcp端口:netstat -at
列出全部udp端口:netstat -au
2)列出全部處於監聽狀態的Sockets
只顯示監聽端口:netstat -l
只列出全部監聽tcp端口:netstat -lt
只列出全部監聽udp端口:netstat -lu
只列出全部監聽UNIX端口:netstat -lx
3)顯示每一個協議的統計信息
顯示全部端口的統計信息:netstat -s
顯示TCP或UDP端口的統計信息:netstat -st 或 -su
4)持續輸出netstat信息:netstat 將每隔一秒輸出網絡信息。
5)顯示系統不支持的地址族(Address Families):netstat --verbose
6)找出程序運行的端口:netstat -an | grep ':80' 並非全部的進程都能找到,沒有權限的會不顯示,使用 root 權限查看全部的信息。
7)顯示網絡接口列表:netstat -i

範例一:列出目前的路由表狀態,且以IP及port number顯示:
[root@www ~]# netstat -rn
其實這個參數就跟route -n如出一轍,這不是netstat的主要功能。

範例二:列出目前的全部網絡聯機狀態,使用IP與port number
[root@www ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
....(中間省略)....

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
....(中間省略)....
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 11075 @/var/run/hald/dbus-uukdg1qMPh
unix 2 [ ACC ] STREAM LISTENING 10952 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 11032 /var/run/acpid.socket
....(底下省略)....

範例三:秀出目前已經啓動的網絡服務
[root@www ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:34796 0.0.0.0:* LISTEN 987/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master
tcp 0 0 :::22 :::* LISTEN 1155/sshd
udp 0 0 0.0.0.0:111 0.0.0.0:* 969/rpcbind
....(底下省略)....
     上面最重要的實際上是那個-l的參數,由於能夠僅列出有在Listen的port
能夠發現不少的網絡服務其實僅針對本機的lo開放而已,因特網是鏈接不到該端口與服務的。而由上述的數據咱們也能夠看到,啓動port 111的,其實就是rpcbind 那隻程序,那若是想要關閉這個端口, 你可使用kill刪除PID 969,也可使用killall刪除rpcbind這個程序便可。如此一來,很輕鬆的你就能知道哪一個程序啓動了哪些端口口囉!

範例四:觀察本機上頭全部的網絡聯機狀態
[root@www ~]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1155/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master
tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED 4716/0
....(底下省略)....
    第四條數據表明目前已經創建聯機的一條網絡聯機,他是由遠程主機192.168.1.101啓動一個大於1024的端口向本地端主機192.168.1.100的port 22 進行的一條聯機,你必需要想起來的是:『Client 端是隨機取一個大於1024以上的port進行聯機』,此外『只有root能夠啓動小於1024如下的port』,那就看的懂上頭那條聯機囉!若是這條聯機你想要砍掉他的話, 看到最右邊的 4716 了沒?kill!
至於傳統的Unix socket的數據,記得使用man netstat查閱一下吧!這個 Unix socket一般是用在一些僅在本機上運做的程序所開啓的插槽接口文件,例如 X Window不都是在本機上運做而已嗎?那何須啓動網絡的port呢?固然可使用Unix socket囉,另外,例如Postfix這一類的網絡服務器,因爲不少動做都是在本機上頭來完成的,因此以會佔用不少的Unix socket喔!

 


九、偵測主機名與IP對應:host, nslookup
關於主機名與IP的對應,除了DNS客戶端功能的dig指令,其實還有兩個更簡單的指令,那就是host與nslookup啦!?
1)host
這個指令能夠用來查出某個主機名的IP喔!舉例來講,咱們想要知道tw.yahoo.com的IP時,能夠這樣作:
[root@www ~]# host [-a] hostname [server]
選項與參數:
-a :列出該主機詳細的各項主機名設定數據
[server] :可使用非爲/etc/resolv.conf的DNS服務器IP來查詢。

範例一:列出 tw.yahoo.com 的 IP
[root@www ~]# host tw.yahoo.com
net.qiang@hotmail.com
tw.yahoo.com is an alias for tw-cidr.fyap.b.yahoo.com.
tw-cidr.fyap.b.yahoo.com is an alias for tw-tpe-fo.fyap.b.yahoo.com.
tw-tpe-fo.fyap.b.yahoo.com has address 119.160.246.241
瞧! IP是119.160.246.241啊!很簡單就能夠查詢到IP了!那麼這個IP是向誰查詢的呢?其實就是寫在/etc/resolv.conf那個檔案內的DNS服務器IP啦!若是不
想要使用該檔案內的主機來查詢,也能夠這樣作:
[root@www ~]# host tw.yahoo.com 168.95.1.1
Using domain server:
Name: 168.95.1.1
Address: 168.95.1.1#53
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
會告訴咱們所使用來查詢的主機是哪一部吶!這樣就夠清楚了吧!不過,再怎麼清楚也比不過dig這個指令的,因此這個指令僅是參考參考啦!
2)nslookup
這玩意兒的用途與host基本上是同樣的,就是用來做爲IP與主機名對應的檢查,一樣是使用/etc/resolv.conf這個檔案來做爲DNS服務器的來源選擇。
[root@www ~]# nslookup [-query=[type]] [hostname|IP]
選項與參數:
-query=type:查詢的類型,除了傳統的IP與主機名對應外,DNS還有不少信息,因此咱們能夠查詢不少不一樣的信息,包括mx, cname等等,
例如: -query=mx 的查詢方法!

# 範例一:找出www.google.com的IP
[root@www ~]# nslookup www.google.com

範例二:找出168.95.1.1的主機名
[root@www ~]# nslookup 168.95.1.1

 


十、網絡聯機/傳輸

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

 

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

 

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

 


十一、瀏覽下載工具

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

若是是瀏覽Linux本機上面的網頁檔案,那就可使用以下的方式:
[root@www ~]# links /usr/share/doc/HTML/index.html

透過links將tw.yahoo.com的網頁內容整個抓下來儲存
[root@www ~]# links -dump http://tw.yahoo.com > yahoo.html

某個網站透過GET功能能夠上傳帳號爲user密碼爲pw,用文字接口處理爲:
[root@www ~]# links -dump http://some.site.name/web.php?name=user&password=pw > testfile

2)文字接口下載器:wget
[root@www ~]# wget [option] [網址]
選項與參數:
若想要聯機的網站有提供帳號與密碼的保護時,能夠利用這兩個參數來輸入
--http-user=usrname
--http-password=password
--quiet :不要顯示wget在抓取數據時候的顯示訊息
更多的參數請自行參考man wget吧!

範例一:請下載2.6.39版的核心
[root@www ~]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
--2011-07-18 16:58:26--http://www.kernel.org/pub/linux/kernel/v2.6/..
Resolving www.kernel.org... 130.239.17.5, 149.20.4.69, 149.20.20.133, ...
Connecting to www.kernel.org|130.239.17.5|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 76096559 (73M) [application/x-bzip2]
Saving to: `linux-2.6.39.tar.bz2'
88% [================================> ] 67,520,536 1.85M/s

 


十二、arp
[root@www ~]# arp -[nd] hostname
[root@www ~]# arp -s hostname(IP) Hardware_address
選項與參數:
-n:將主機名以IP的型態顯示
-d:將hostname的hardware_address由ARP table當中刪除掉
-s:設定某個IP或hostname的MAC到ARP table當中
範例一:列出目前主機上面記載的 IP/MAC 對應的ARP表格
[root@www ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.100 ether 00:01:03:01:02:03 C eth0
192.168.1.240 ether 00:01:03:01:DE:0A C eth0
192.168.1.254 ether 00:01:03:55:74:AB C eth0
範例二:將192.168.1.100那部主機的網卡卡號直接寫入ARP表格中
[root@www ~]# arp -s 192.168.1.100 01:00:2D:23:A1:0E #這個指令的目的在創建靜態ARP

 


1三、ethtool
Ethtool是Linux下用於查詢及設置網卡參數的命令。
選項與參數:
ethtool ethX //查詢ethX網口基本設置
ethtool –h //顯示ethtool的命令幫助(help)
ethtool –i ethX //查詢ethX網口的相關信息
ethtool –d ethX //查詢ethX網口註冊性信息
ethtool –r ethX //重置ethX網口到自適應模式
ethtool –S ethX //查詢ethX網口收發包統計
ethtool –s ethX [speed 10|100|1000]\ //設置網口速率10/100/1000M
[duplex half|full]\ //設置網口半/全雙工
[autoneg on|off]\ //設置網口是否自協商
[port tp|aui|bnc|mii]\ //設置網口類型
...

 


1四、ifstat

    網絡接口監測工具,比較簡單看網絡流量概況。

1)比較簡單的看網絡流量
ifstat
eth0 eth1
KB/s in KB/s out KB/s in KB/s out
0.07 0.20 0.00 0.00
0.07 0.15 0.58 0.00
默認ifstat不監控迴環接口,顯示的流量單位是KB。

2)監控全部網絡接口
ifstat -a
lo eth0 eth1
KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
0.00 0.00 0.28 0.58 0.06 0.06
0.00 0.00 1.41 1.13 0.00 0.00
0.61 0.61 0.26 0.23 0.00 0.00

 


1五、iftop

    實時流量監控工具,監控TCP/IP鏈接等,缺點就是無報表功能。必須以root身份才能運行。
參數:
-i 設定監測的網卡,如:# iftop -i eth1
-B 以bytes爲單位顯示流量(默認是bits),如:# iftop -B
-n 使host信息默認直接都顯示IP,如:# iftop -n
-N 使端口信息默認直接都顯示端口號,如: # iftop -N
-F 顯示特定網段的進出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h (display this message),幫助,顯示參數信息
-p 使用這個參數後,中間的列表顯示的本地主機信息,出現了本機之外的IP信息;
-b 使流量圖形條默認就顯示;
-f 這個暫時還不太會用,過濾計算包用的;
-P 使host信息及端口信息默認就都顯示;
-m 設置界面最上邊的刻度的最大值,刻度分五個大段顯示,例:# iftop -m 100M

1)執行iftop -N -n -i eth1:
19.1Mb 38.1Mb 57.2Mb 76.3Mb 95.4Mb
+-----------------+-----------------+--------------------+--------------------+---------------------
192.168.1.11 => 192.168.1.66 5.3Mb 3.22Mb 3.20Mb
       <=         219kb 45.7kb 49.3kb
192.168.1.11 => 192.168.1.29 144kb 30.8kb 29.6kb
       <=                    11.3Mb 2.38Mb 2.74Mb
192.168.1.11 => 12.2.11.71 0b 6.40kb 6.66kb
       <=                0b  0b      0b
192.168.1.11 => 192.168.1.8 2.63kb 1.43kb 932b
                  <=                  1.31kb 1.05kb 893b
192.168.1.11 => 192.168.2.78 2.53kb 1.54kb 2.15kb
                  <=                    160b   160b   187b
192.168.1.11 => 111.126.195.69 0b 166b 69b
                  <=                       0b  0b   0b
------------------------------------------------------------------------------------------------------
TX: cum: 9.70MB peak: 15.6Mb rates: 15.4Mb 3.26Mb 3.23Mb
RX: 8.38MB 14.9Mb 11.5Mb 2.42Mb 2.79Mb
TOTAL: 18.1MB 30.5Mb 27.0Mb 5.69Mb 6.03Mb
第一行:帶寬顯示
中間部分:外部鏈接列表,即記錄了哪些ip正在和本機的網絡鏈接
中間部分右邊:實時參數分別是該訪問ip鏈接到本機2秒,10秒和40秒的平均流量
=>表明發送數據,<= 表明接收數據
底部三行:
表示發送,接收和所有的流量
TX:發送流量
RX:接收流量
TOTAL:總流量
Cumm:運行iftop到目前時間的總流量
peak:流量峯值
rates:分別表示過去 2s 10s 40s 的平均流量
經過iftop的界面很容易找到哪一個ip在霸佔網絡流量,這個是ifstat作不到的。不過iftop的流量顯示單位是Mb,這個b是bit,是位,不是字節,而ifstat的KB,這個B就是字節了,byte是bit的8倍。

2)進入iftop畫面後的一些操做命令(注意大小寫)
h 切換是否顯示幫助;
n 切換顯示本機的IP或主機名;
s 切換是否顯示本機的host信息;
d 切換是否顯示遠端目標主機的host信息;
t 切換顯示格式爲2行/1行/只顯示發送流量/只顯示接收流量;
N 切換顯示端口號或端口服務名稱;
S 切換是否顯示本機的端口信息;
D 切換是否顯示遠端目標主機的端口信息;
p 切換是否顯示端口信息;
P 切換暫停/繼續顯示;
b 切換是否顯示平均流量圖形條;
B 切換計算2秒或10秒或40秒內的平均流量;
T 切換是否顯示每一個鏈接的總流量;
l 打開屏幕過濾功能,輸入要過濾的字符,好比ip,按回車後,屏幕就只顯示這個IP相關的流量信息;
L 切換顯示畫面上邊的刻度;刻度不一樣,流量圖形條會有變化;
j或k 能夠向上或向下滾動屏幕顯示的鏈接記錄;
1或2或3 能夠根據右側顯示的三列流量數據進行排序;
< 根據左邊的本機名或IP排序;
> 根據遠端目標主機的主機名或IP排序;
o 切換是否固定只顯示當前的鏈接;
f 能夠編輯過濾代碼,這是翻譯過來的說法,我還沒用過這個!
! 可使用shell命令,這個沒用過!沒搞明白啥命令在這好用呢!
q 退出監控。

 


1六、Netcat(nc) 

     網絡工具中的瑞士軍刀,它能經過TCP和UDP在網絡中讀寫數據。經過與其餘工具結合和重定向,你能夠在腳本中以多種方式使用它。使用netcat命令所能完成的事情使人驚訝。netcat所作的就是在兩臺電腦之間創建連接並返回兩個數據流,在這以後所能作的事就看你的想像力了。你能創建一個服務器,傳輸文件,與朋友聊天,傳輸流媒體或者用它做爲其它協議的獨立客戶端。之因此叫作netcat,由於它是網絡上的cat,想象一下cat的功能,讀出一個文件的內容,而後輸出到屏幕上(默認的stdout是屏幕,固然能夠重定向到其餘地方)。netcat也是如此,它讀取一端的輸入,而後傳送到網絡的另外一端, 就這麼簡單.可是千萬不要小看了它,netcat能夠完成不少任務,,尤爲是和其餘程序組合時.好了,廢話少說,進入正題吧.:p 網上有兩種版本的netcat,一個是@stake公司netcat也就是最初的版本,還有一個是GNU的,它的功能更多,不過GNU的沒有windows平臺的版本。
參數:
-e prog 程序重定向,一旦鏈接,就執行 [危險]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h 幫助信息
-i secs 延時的間隔
-l 監聽模式,用於入站鏈接
-n 指定數字的IP地址,不能用hostname
-o file 記錄16進制的傳輸
-p port 本地端口號
-r 任意指定本地及遠程端口
-s addr 本地源地址
-u UDP模式
-v 詳細輸出――用兩個-v可獲得更詳細的內容
-w secs timeout的時間
-z 將輸入輸出關掉――用於掃描時

1)簡單服務器
nc -l -p 1234 [假設這臺主機ip爲192.168.0.1]
而後客戶端輸入:nc 192.168.0.1 1234
你從任一端輸入的數據就會顯示在另外一端了。其實netcat的server和client的區別並不大,區別僅僅在於誰執行了-l來監聽端口,一旦鏈接創建之後,就沒有什麼區別了。從這裏咱們也能夠了解netcat的工做原理了,經過網絡連接讀寫數據。

2)telnet服務器(打開一個shell)
nc有一個-e的選項,用來指定在鏈接後執行的程序。在windows平臺上能夠指定-e cmd.exe(若是是98就指定command.exe、linux則指定-e bash),或者任何你喜歡的shell,或者是你本身編寫的程序,指定-e的效果是由你指定的程序代替了nc本身來接受另外一端的輸入,並把輸入(命令)後反饋的結果顯示到另外一端。
server: nc -l -p 1234 -e bash
client: nc 192.168.0.1 1234
就能夠遠程登錄server了。

不必定非要在server端指定-e,也能夠在client端指定:
server: nc -l -p 1234
client: nc -e 192.168.0.1 1234
這樣,就至關於在server上遠程登錄client了。有關client和server的區分是沒有什麼意義的.誰作爲telnet server的標準只有一個,誰執行了-e [shell]。

假如netcat不支持-e參數仍然可以建立遠程shell
Server
$mkfifo /tmp/tmp_fifo
$cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
建立了一個fifo文件,而後使用管道命令把這個fifo文件內容定向到shell 2>&1中。是用來重定向標準錯誤輸出和標準輸出,而後管道到netcat 運行的端口1567上。至此,咱們已經把netcat的輸出重定向到fifo文件中。

Client
$nc -n 172.31.100.7 1567
會獲得一個shell提示符在客戶端

3)端口掃描
端口掃描常常被系統管理員和黑客用來發如今一些機器上開放端口,幫助他們識別系統中的漏洞。
nc -z -v -n 172.31.100.7 21-25
打印21到25全部開放的端口。Banner是一個文本,Banner是一個你鏈接的服務發送給你的文本信息。當你試圖鑑別漏洞或者服務的類型和版本的時候,Banner信息是很是有用的。可是,並非全部的服務都會發送banner。一旦你發現開放的端口,你能夠容易的使用netcat鏈接服務抓取他們的banner:
nc -v 172.31.100.7 21
netcat命令會鏈接開放端口21而且打印運行在這個端口上服務的banner信息。

4)Chat Server
假如你想和你的朋友聊聊,有不少的軟件和信息服務能夠供你使用。可是,若是你沒有這麼奢侈的配置,好比你在計算機實驗室,全部的對外的鏈接都是被限制的,你怎樣和成天坐在隔壁房間的朋友溝通那?不要鬱悶了,netcat提供了這樣一種方法,你只須要建立一個Chat服務器,一個預先肯定好的端口,這樣子他就能夠聯繫到你了。
Server
$nc -l 1567
netcat命令在1567端口啓動了一個tcp服務器,全部的標準輸出和輸入會輸出到該端口。輸出和輸入都在此shell中展現。

Client
$nc 172.31.100.7 1567
無論你在機器B上鍵入什麼都會出如今機器A上。

5)文件傳輸
大部分時間中,咱們都在試圖經過網絡或者其餘工具傳輸文件。有不少種方法,好比FTP,SCP等等,可是當你只是須要臨時或者一次傳輸文件,真的值得浪費時間來安裝配置一個軟件到你的機器上嘛。假設,你想要傳一個文件file.txt 從A到B。A或者B均可以做爲服務器或者客戶端,如下讓A做爲服務器,B爲客戶端。
Server
$nc -l 1567 < file.txt

Client
$nc -n 172.31.100.7 1567 > file.txt
這裏咱們建立了一個服務器在A上而且重定向netcat的輸入爲文件file.txt,那麼當任何成功鏈接到該端口,netcat會發送file的文件內容。在客戶端咱們重定向輸出到file.txt,當B鏈接到A,A發送文件內容,B保存文件內容到file.txt。沒有必要建立文件源做爲Server,咱們也能夠相反的方法使用。像下面的咱們發送文件從B到A,可是服務器建立在A上,此次咱們僅須要重定向netcat的輸出而且重定向B的輸入文件。

B做爲Server:
Server
$nc -l 1567 > file.txt

Client
nc 172.31.100.23 1567 < file.txt

若是想要發送多個文件,或者整個目錄,同樣很簡單,只須要使用壓縮工具tar,壓縮後發送壓縮包。
Server
$tar -cvf – dir_name | nc -l 1567

Client
$nc -n 172.31.100.7 1567 | tar -xvf -
這裏在A服務器上,咱們建立一個tar歸檔包而且經過-在控制檯重定向它,而後使用管道,重定向給netcat,netcat能夠經過網絡發送它。在客戶端咱們下載該壓縮包經過netcat 管道而後打開文件。
若是想要節省帶寬傳輸壓縮包,咱們可使用bzip2或者其餘工具壓縮。

Server 經過bzip2壓縮
$tar -cvf – dir_name| bzip2 -z | nc -l 1567

Client 使用bzip2解壓
$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -

6)流視頻
雖然不是生成流視頻的最好方法,但若是服務器上沒有特定的工具,使用netcat,咱們仍然有但願作成這件事。
服務端
$cat video.avi | nc -l 1567
這裏咱們只是從一個視頻文件中讀入並重定向輸出到netcat客戶端

客戶端
$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
這裏咱們從socket中讀入數據並重定向到mplayer。

7)克隆一個設備
若是你已經安裝配置一臺Linux機器而且須要重複一樣的操做對其餘的機器,而你不想在重複配置一遍。不在須要重複配置安裝的過程,只啓動另外一臺機器的一些引導能夠隨身碟和克隆你的機器。克隆Linux PC很簡單,假如你的系統在磁盤/dev/sda上
Server
$dd if=/dev/sda | nc -l 1567

Client
$nc -n 172.31.100.7 1567 | dd of=/dev/sda
經過netcat服務器重定向它的輸出流到其餘機器而且寫入到磁盤中,它會隨着分區表拷貝全部的信息。可是若是咱們已經作過度區而且只須要克隆root分區,咱們能夠根據咱們系統root分區的位置,更改sda爲sda1,sda2等等。

8)指定源端口
假設你的防火牆過濾除25端口外其它全部端口,你須要使用-p選項指定源端口。
服務器端
$nc -l 1567

客戶端
$nc 172.31.100.7 1567 -p 25

使用1024之內的端口須要root權限。該命令將在客戶端開啓25端口用於通信,不然將使用隨機端口。

9)指定源地址
假設你的機器有多個地址,但願明確指定使用哪一個地址用於外部數據通信。咱們能夠在netcat中使用-s選項指定ip地址。
服務器端
$nc -u -l 1567 < file.txt

客戶端
$nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt

該命令將綁定地址172.31.100.5。

10)HTTP客戶端用於下載文件
這是最簡單的使用方式,nc <hostname> <portnumber>
nc http://www.apache.org/ 80

get / http/1.1
HTTP/1.1 400 Bad Request
Date: Mon, 08 Dec 2003 06:23:31 GMT
Server: Apache/2.0.48-dev (Unix)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr />
<address>Apache/2.0.48-dev (Unix) Server at http://www.apache.org/ Port 80</address>
</body></html>

11)其它用途
a、使用-t選項模擬Telnet客戶端
b、鏈接到郵件服務器,使用SMTP協議檢查郵件,
c、使用ffmpeg截取屏幕並經過流式傳輸分享,等等。其它更多用途。
只要你瞭解協議就可使用netcat做爲網絡通信媒介,實現各類客戶端。

 

 


附:Linux網絡相關配置文件

1)、/etc/sysconfig/network-scripts/ifcfg-eth0
設置IP、Netmask、DHCP與Gateway等。
重要參數:
DEVICE=網卡的代號
BOOTPROTO=是否使用dhcp
HWADDR=是否加入網卡卡號(MAC)
IPADDR=就是IP地址
NETMASK=子網掩碼
ONBOOT=要不要默認啓動此接口
GATEWAY=網關
NM_CONTROLLED=額外的網管軟件,建議取消

2)、/etc/sysconfig/network
設置主機名 
重要參數:
NETWORKING=要不要有網絡
NETWORKING_IPV6=支援IPv6否?
HOSTNAME=你的主機名

3)、/etc/resolv.conf
DNS IP
重要參數:
nameserver DNS的IP

4)、/etc/hosts
私有IP對應的主機名
重要參數:
私有IP 主機名 別名

5)、/etc/services
記錄架構在TCP/IP上面的總協議,包括http, ftp, ssh, telnet等等服務所定義的port number,都是這個檔案所規劃出來的。若是你想要自定義一個新的協議與port 的對應,就得要改這個檔案了。

6)、/etc/protocols
這個檔案則是在定義出IP封包協議的相關數據,包括ICMP/TCP/UDP這方面的封包協議的定義等。

7)、/etc/modprobe.conf 開機時用來設置加載內核模塊的文件,網卡與對應模塊寫在這個文件中。

相關文章
相關標籤/搜索