十四、
網絡管理
網卡在 Linux 操作系統中用 ethX,是由 0 開始的正整數,比如 eth0、eth1...... ethX。而普通貓和
ADSL 的接口是 pppX,比如 ppp0 等
7.1
、
ifconfig
1、 關於網絡接口及配置工具說明;
在 Linux 操作系統中配置網絡接口,一般是通過網絡配置工具實現的,但最終目的還是通過網絡配
置工具來達到修改與網絡相關的配置文件而起作用的。由此說來,我們配置網絡可以直接修改配置文件。
比如網絡網絡接口(網卡)的 IP 地址、子掩碼、網關,在 Slackware 中只需修改一個配置文件就
行了 /etc/rc.d/rc.inet1 ,而在 Redhat/Fedora 等或以 Redhat/Fedora 為基礎的發行版中,一般要
涉及到好幾個文件,比如包括 /etc/sysconfig/network-scripts/ifcfg-eth0 在內等。
了解 Linux 網絡配置文件是極為重要的,我們通過工具修改了什么,是怎么生效的,只有了解網絡
配置文件才能搞清楚。做個不恰當的比喻:Linux 系統是一個透明的盒子,至於盒子里裝的是什么都是
一目了然的。而閉源操作系統,我們沒有機會知道這些,更不知道他是怎么實現的。
對於復雜的網絡模型,Linux 操作系統是有極大的優勢,可能在我們看看 man 和 help,修改修改
配置文件,在幾分鍾就可以搞定。但閉源圖形界面的操作系統就沒有這么幸運了,反復的點鼠標.
點了幾十次上百次也解決不了一個問題,這是極為常見的。 由於 Linux 操作系統存在很多的發行
和版本,大多發行版本都有自己的專用配置工具。主要是為了方便用戶配置網絡;但也有通用的配置工
具,比如 Linux ifconfig 、ifup、ifdown;
2 關於網絡硬件設備的驅動;
我在以前的文檔中有寫過,網絡硬件,比如網卡(包括有線、無線),貓包括普通貓和 ADSL 貓等,
都是需要內核支持的,所以我們首先得知道自己的網絡設備是不是已經被硬內核支持了。如果不支持,
我們得找驅動(或通過內核編譯)來支持它; 請參考:
3、Linux ifconfig 配置網絡接口的工具介紹;
Linux ifconfig 是一個用來查看、配置、啟用或禁用網絡接口的工具,這個工具極為常用的。比
如我們可以用這個工具來臨時性的配置網卡的 IP 地址、掩碼、廣播地址、網關等。也可以把它寫入一
個文件中(比如/etc/rc.d/rc.local),這樣系統引導后,會讀取這個文件,為網卡設置 IP 地址;
不過這樣做目前看來沒有太大的必要。主要是各個發行版本都有自己的配置工具,無論如何也能把
主機加入到網絡中; 下面我們看看 Linux ifconfig 用法;
3.1 Linux ifconfig 查看網絡接口狀態;
Linux ifconfig 如果不接任何參數,就會輸出當前網絡接口的情況;
1. [root@localhost ~]# Linux ifconfig
2. eth0 Link encap:Ethernet HWaddr 00:C0:9F:94:78:0E
3. inet addr:192.168.1.88 Bcast:192.168.1.255 Mask:255.255.255.0
4. inet6 addr: fe80::2c0:9fff:fe94:780e/64 Scope:Link
5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6. RX packets:850 errors:0 dropped:0 overruns:0 frame:0
7. TX packets:628 errors:0 dropped:0 overruns:0 carrier:0
8. collisions:0 txqueuelen:1000
9. RX bytes:369135 (360.4 KiB) TX bytes:75945 (74.1 KiB)
10. Interrupt:10 Base address:0x3000
11.
12. lo Link encap:Local Loopback
13. inet addr:127.0.0.1 Mask:255.0.0.0
14. inet6 addr: ::1/128 Scope:Host
15. UP LOOPBACK RUNNING MTU:16436 Metric:1
16. RX packets:57 errors:0 dropped:0 overruns:0 frame:0
17. TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
18. collisions:0 txqueuelen:0
19. RX bytes:8121 (7.9 KiB) TX bytes:8121 (7.9 KiB)
解說:eth0 表示第一塊網卡, 其中 HWaddr 表示網卡的物理地址,我們可以看到目前這個網卡的
物理地址(MAC 地址)是 00:C0:9F:94:78:0E ; inet addr 用來表示網卡的 IP 地址,此網卡的 IP 地
址是 192.168.1.88, 廣播地址, Bcast:192.168.1.255,掩碼地址 Mask:255.255.255.0
lo 是表示主機的回壞地址,這個一般是用來測試一個網絡程序,但又不想讓局域網或外網的用戶
能夠查看,只能在此台主機上運行和查看所用的網絡接口。比如我們把 HTTPD 服務器的指定到回壞地址,
在瀏覽器輸入 127.0.0.1 就能看到你所架 WEB 網站了。但只是您能看得到,局域網的其它主機或用戶
無從知道;
如果我們想知道主機所有網絡接口的情況,請用下面的命令; [root@localhost ~]# Linux
ifconfig -a 如果我們想查看某個端口,比如我們想查看 eth0 的狀態,就可以用下面的方法;
[root@localhost ~]# Linux ifconfig eth0
3.2 Linux ifconfig 配置網絡接口;
Linux ifconfig 可以用來配置網絡接口的 IP 地址、掩碼、網關、物理地址等;值得一說的是用
Linux ifconfig 為網卡指定IP地址,這只是用來調試網絡用的,並不會更改系統關於網卡的配置文件。
如果您想把網絡接口的 IP 地址固定下來,目前有三個方法:一是通過各個發行和版本專用的工具
來修改 IP 地址;二是直接修改網絡接口的配置文件;三是修改特定的文件,加入 Linux ifconfig 指
令來指定網卡的 IP 地址,比如在 redhat 或 Fedora 中,把 Linux ifconfig 的語名寫入
/etc/rc.d/rc.local 文件中;
Linux ifconfig 配置網絡端口的方法: Linux ifconfig 工具配置網絡接口的方法是通過指令的
參數來達到目的的,我們只說最常用的參數; Linux ifconfig 網絡端口 IP 地址 hw <HW> MAC
地址 netmask 掩碼地址 broadcast 廣播地址 [up/down]
實例一:
比如我們用 Linux ifconfig 來調試 eth0 網卡的地址
1. [root@localhost ~]# Linux ifconfig eth0 down
2. [root@localhost ~]# Linux ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netma
sk 255.255.255.0
3. [root@localhost ~]# Linux ifconfig eth0 up
4. [root@localhost ~]# Linux ifconfig eth0
5. eth0 Link encap:Ethernet HWaddr 00:11:00:00:11:11
6. inet addr:192.168.1.99 Bcast:192.168.1.255 Mask:255.255.255.0
7. UP BROADCAST MULTICAST MTU:1500 Metric:1
8. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
9. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
10. collisions:0 txqueuelen:1000
11. RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
12. Interrupt:11 Base address:0x3400
注解: 上面的例子我們解說一下;
第一行:Linux ifconfig eth0 down 表示如果 eth0 是激活的,就把它 DOWN 掉。此命令等同於 ifdown
eth0;
第二行:用 Linux ifconfig 來配置 eth0 的 IP 地址、廣播地址和網絡掩碼;
第三行:用 Linux ifconfig eth0 up 來激活 eth0 ; 此命令等同於 ifup eth0
第四行:用 Linux ifconfig eth0 來查看 eth0 的狀態;
當然您也可以用直接在指令 IP 地址、網絡掩碼、廣播地址的同時,激活網卡;要加 up 參數;比如
下面的例子; [root@localhost ~]# Linux ifconfig eth0 192.168.1.99 broadcast
192.168.1.255 netmask 255.255.255.0 up
實例二:在這個例子中,我們要學會設置網絡 IP 地址的同時,學會設置網卡的物理地址(MAC 地
址);
比如我們設置網卡 eth1 的 IP 地址、網絡掩碼、廣播地址,物理地址並且激活它;[root@localhost
~]# Linux ifconfig eth1 192.168.1.252 hw ether 00:11:00:00:11:11 netmask 255.255.255.0
broadcast 192.168.1.255 up 或[root@localhost ~]# Linux ifconfig eth1 hw
ether 00:11:00:00:11:22[root@localhost ~]# Linux ifconfig eth1 192.168.1.252 netmask
255.255.255.0 broadcast 192.168.1.255 up
其中 hw 后面所接的是網絡接口類型, ether 表示乙太網, 同時也支持 ax25 、ARCnet、netrom
等,詳情請查看 man Linux ifconfig ;
3.3 如何用 Linux ifconfig 來配置虛擬網絡接口;
有時我們為了滿足不同的需要還需要配置虛擬網絡接口,比如我們用不同的 IP 地址來架運行多個
HTTPD 服務器,就要用到虛擬地址;這樣就省卻了同一個 IP 地址,如果開設兩個的 HTTPD 服務器時,
要指定端口號。
虛擬網絡接口指的是為一個網絡接口指定多個 IP 地址,虛擬接口是這樣的 eth0:0 、 eth0:1、
eth0:2 ... .. eth1N。當然您為 eth1 指定多個 IP 地址,也就是 eth1:0、eth1:1、eth1:2 ... ...
以此類推;
其實用 Linux ifconfig 為一個網卡配置多個 IP 地址,就用前面我們所說的 Linux ifconfig 的用
法,這個比較簡單;看下面的例子; [root@localhost ~]# Linux ifconfig eth1:0 192.168.1.251 hw
ether 00:11:00:00:11:33 netmask 255.255.255.0 broadcast 192.168.1.255 up 或
[root@localhost ~]# Linux ifconfig eth1 hw ether 00:11:00:00:11:33[root@localhost ~]#
Linux ifconfig eth1 192.168.1.251 netmask 255.255.255.0 broadcast 192.168.1.255 up
注意:指定時,要為每個虛擬網卡指定不同的物理地址;
在 Redhat/Fedora 或與 Redhat/Fedora 類似的系統,您可以把配置網絡 IP 地址、廣播地址、掩碼
地址、物理地址以及激活網絡接口同時放在一個句子中,寫入/etc/rc.d/rc.local 中。比如下面的例
子;
Linux ifconfig eth1:0 192.168.1.250 hw ether 00:11:00:00:11:44 netmask 255.255.255.0
broadcast 192.168.1.255 up
Linux ifconfig eth1:1 192.168.1.249 hw ether 00:11:00:00:11:55 netmask 255.255.255.0
broadcast 192.168.1.255 up
解說:上面是為 eth1 的網絡接口,設置了兩個虛擬接口;每個接口都有自己的物理地址、IP 地
址... ...
3.4 如何用 Linux ifconfig 來激活和終止網絡接口的連接;
激活和終止網絡接口的用 Linux ifconfig 命令,后面接網絡接口,然后加上 down 或 up 參數,
就可以禁止或激活相應的網絡接口了。當然也可以用專用工具 ifup 和 ifdown 工具;
1. [root@localhost ~]# Linux ifconfig eth0 down
2. [root@localhost ~]# Linux ifconfig eth0 up
3. [root@localhost ~]# ifup eth0
4. [root@localhost ~]# ifdown eth0
對於激活其它類型的網絡接口也是如此,比如 ppp0,wlan0 等;不過只是對指定 IP 的網卡有效。
注意:對 DHCP 自動分配的 IP,還得由各個發行版自帶的網絡工具來激活;當然得安裝 dhcp 客戶端;
這個您我們應該明白;比如 Redhat/Fedora [root@localhost ~]# /etc/init.d/network start
Slackware 發行版; [root@localhost ~]# /etc/rc.d/rc.inet1
4、Debian、Slackware、Redhat/Fedora、SuSE 等發行版專用網絡接口配置工具;
由於 Linux ifconfig 用起來比較麻煩,而且是用來測試網絡之用,但這個工具並不能修改網絡接
口的相應配置文件。雖然也能通過把Linux ifconfig配置網絡接口的語句寫入類似/etc/rc.d/rc.local
文件中,但相對來說還是寫入關於網絡接口的配置文件中更為安全和可靠;但對於虛擬網絡接口寫入類
似/etc/rc.d/rc.local 中還是可以的;
下面我們介紹一下各個發行版的網絡接口配置工具;
4.1 Debian 網絡接口配置文件和專用配置工具;
正在增加中;
4.2 Redhat/Fedora 網絡接口的配置文件和網絡接口專用配置工具;
在 Redhat/Fedora 中,與乙太網卡相關的配置文件位於 /etc/sysconfig/network-scripts 目錄中,
比如 ifcfg-eth0、ifcfg-eth1 .... ....
4.21 Redhat/Fedora 或類似這樣的系統,網卡的配置文件;
</FONT?< p>
比如在 Fedora 5.0 中,ifcfg-eth0 ; 如果您用 DHCP 服務器來自動獲取 IP 的,一般情況下
ifcfg-eth0 的內容是類似下面這樣的;
1.
DEVICE
=
eth0
2.
ONBOOT
=
yes
3.
BOOTPROTO
=
dhcp
4.
TYPE
=
Ethernet
如果您是指定 IP 的,一般內容是類似下面的;
1.
DEVICE
=
eth0
注:網絡接口
2.
ONBOOT
=
yes
注:開機引導時激活
3.
BOOTPROTO
=
static
注:采用靜態 IP 地址;
4.
IPADDR
=
192
.168.1.238 注:IP 地址
5.
NETMASK
=
255
.255.255.0 注:網絡掩碼;
6.
GATEWAY
=
192
.168.1.1 注:網關;
下面的幾個選項也可以利用;
1.
HOSTNAME
=
linxsir03
注:指定主機名;
2.
DOMAIN
=
localdomain
注:指定域名;
3.
HWADDR
=
00
:00:11:22:00:aa 注:
指定網卡硬件地址 (MAC 地址), 也可以省略,不過這在這里來更改 MAC 地址一般是不能生效的。
還是通過前面所說的 Linux ifconfig 的辦法來更改吧;
4.22 Redhat/Fedora 或類似系統, 配置網絡的工具介紹 ;
在 Redhat 早期的版本中, 有 linuxconf 、redhat-config-network 、netconfig 等工具; 在
Redhat/Fedora 最新的版本有 system-config-network-tui (文本模式的) 、system-config-network
(圖形模式的),netconfig(文本模式的)。
這些工具都會直接修改Linux系統中關於網絡接口的配置文件;這是 Linux ifconfig 所不能比的;
其中 redhat-config-network 和 system-config-network 工具不僅僅是配置網卡的工具,還有配置
ISDN 和普通貓、ADSL 的工具、網絡硬件的添加、主機名字的配置、DNS 各客戶端的配置等。其實是一
個工具組的集成;
這些工具比較簡單,以 root 權限運行命令就能調用,比如:
1. [root@localhost ~]# /usr/sbin/system-config-network
2. [root@localhost ~]# system-config-network
如果您設置了可執行命令的環境變量,不用加路徑就可以運行,但前提是您得安裝這個網絡管理工
具; 不過值得一說的是 netconfig 工具是一個在文本模式比較好的工具,推薦大家使用;理由是這個
工具在文本模式下,也有一個簡單的圖形界面;還有命令模式;功能強着呢;
1. [root@localhost ~]# netconfig -d eth0 注:配置 eth0
2. [root@localhost ~]# netconfig -d eth1 注:配置 eth1
4.23 Redhat/Fedora 系統中的 netconfig 特別介紹;
netconfig 這個工具,在 Redhat/Fedora 或類似於它們的系統中都是存在的,這個工具比較強大。
所以特別介紹一下。但在 Slackware 中 netconfig 是 TEXT 模式下有一個圖形模式,但不能象 Linux
ifconfig 一樣用命令來操作網卡接口;
netconfig 的用法如下:
1. [root@localhost ~]# netconfig --help 注:幫助;
2.
--bootproto
=(dhcp|bootp|none) Boot protocol to use(
3.
--gateway
=
STRING
Network gateway(指定網關)
4.
--ip
=
STRING
IP address(指定 IP 地址)
5.
--nameserver
=
STRING
Nameserver(指定 DNS 客戶端)
6.
--netmask
=
STRING
Netmask(指定網絡掩碼)
7.
--hostname
=
STRING
Hostname( 指定主機名)
8.
--domain
=
STRING
Domain name(指定域名)
9. -d,
--device
=
STRING
Network device (指定網絡設備)
10. --nodns No DNS lookups (沒有 DNS 查詢)
11.
--hwaddr
=
STRING
Ethernet hardware address (指定網卡的物理地址)
12.
--description
=
STRING
Description of the device (描述性文字)
13. Help options: (幫助選項)
14. -?, --help Show this help message
15. --usage Display brief usage message
實例一:設置網卡的 DHCP 模式自動獲得 IP [root@localhost ~]# netconfig -d eth0
--bootproto=dhcp
實例一:手動設置網卡的 IP 等 [root@localhost ~]# netconfig -d eth0 --ip=192.168.1.33
--netmask=255.255.255.0 --gateway=192.168.1.1
4.3 Slackware 網卡配置文件和配置工具;
Slackware 有關網卡的配置文件是/etc/rc.d/rc.inet1.conf , 這個文件包括乙太網接口的網卡
和無線網卡的配置。Slackware 還是比較純凈的,網絡配置也較簡單;在 Slackware 中也有 netconfig
配置工具,也是 text 模式運行的,人機交互界面,這個設置比較簡單;
Slackware 用 netconfig 配置網卡完成后,其實質是修改了/etc/rc.d/rc.inet1.conf 文件。
Slackware 是源法原味的 Linux 系統,他的配置文件比較標准 ,所以我推薦您在生產型的系統,不妨
嘗試一下 Slackware ;
配置好網卡后,我們還得運行下面的命令,才能激活網卡; [root@localhost ~]#
/etc/rc.d/rc.inet1 下面是一個例子,比如此機器有兩個網卡 eth0 和 eth1,eth0 用 DHCP 獲得 IP 地
址,eth1 指定 IP 地址;
1. # Config information for eth0:
2. IPADDR[0]=""
3. NETMASK[0]=""
4. USE_DHCP[0]="yes" 注:在這里寫上 yes,表示用 DHCP 獲得 IP;
5. DHCP_HOSTNAME[0]="linuxsir01" 注:DNS 服務器主機名,也可以用 IP 來指定 DNS 服務器;
6. # Config information for eth1: 注:網卡 eth1 的配置;
7. IPADDR[1]="192.168.1.33" 注:指定 IP 地址;
8. NETMASK[1]="255.255.255.0" 注:指定掩碼;
9. USE_DHCP[1]="no" 注:不用 DHCP 獲得 IP;
10. DHCP_HOSTNAME[1]=""
11. # Config information for eth2:
12. IPADDR[2]=""
13. NETMASK[2]=""
14. USE_DHCP[2]=""
15. DHCP_HOSTNAME[2]=""
16. # Config information for eth3:
17. IPADDR[3]=""
18. NETMASK[3]=""
19. USE_DHCP[3]=""
20. DHCP_HOSTNAME[3]=""
21. # Default gateway IP address:
22.
GATEWAY
=
"192.168.1.1"
注:指定網關;
4.4 SuSE 或 OpenSuSE 網卡配置文件和配置工具;
正在更新之中;
5、關於拔號工具的介紹;
有的弟兄可能需要 ADSL 貓和普通貓的拔號工具;現在我們分別介紹一下;
5.1 ADSL pppoe 拔號工具 rp-pppoe;
如果您的 ADSL 不是路由的,如果是路由的,在路由路就能設置好自動拔號。只要把機器接上就能
用了,這個咱們不說了,路由器大家都會用;但如果您的 ADSL 不支持路由,或您想用您當前所用的主
機來做路由器;這就需要一個拔號軟件;
目前國內大多城市都用的是 pppoe 協議 ,所以我們有必要介紹 pppoe 拔號軟件,在 Linux 中,這
個軟件的名字是 rp-pppoe ; rp-pppoe 主頁;
http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php
5.11 各大發行版自帶的 rp-pppoe 的安裝和使用;
rp-pppoe 目前在各大發行版本都是存在的,比如 Redhat/Fedora、紅旗、Slackware、Debian、SuSE
等系統,都是采用這個拔號軟件,所以您大可不必為下載源碼編譯安裝。只需要在各大發行版的安裝盤
中就可以找得到;請用各大發行版自帶的軟件包管理工具來安裝此軟件包;
如果您用的是各大發行版提供的 rp-pppoe 軟件包 比如 RPM 包的系統是用 rpm -ivh
rp-pppoe*.rpmSlackware 系統是用 installpkg rp-pppoe*.tgz 在 Redhat/Fedora 中可以通過圖形配
置工具來完成,redhat-config-network 命令,調用配置網絡,要通過 XDSL 來添加拔號,比較簡單;
所有發行版通用的方法是 adsl-setup 命令來配置 ADSL;
1. [root@localhost ~]# adsl-setup 注:配置 pppoe 拔號,請文檔下面,都差不多;
2. [root@localhost ~]# adsl-start 注:啟動拔號;
3. [root@localhost ~]# adsl-stop 注:斷開連接;
5.12 如果是源碼包安裝,我們要自己來編譯安裝;
[root@localhost ~]# tar zxvf rp-pppoe-3.8.tar.gz
[root@localhost ~]# cd rp-pppoe-3.8
[root@localhost rp-pppoe-3.8]# ./go
Welcome to the Roaring Penguin PPPoE client setup. First, I will run
some checks on your system to make sure the PPPoE client is installed
properly...
Looks good! Now, please enter some information:
USER NAME
>>> Enter your PPPoE user name (default
bxxxnxnx@sympatico.ca
): 在這里添寫你的拔號用戶
名;就是服務商提供的;
>>> Enter the Ethernet interface connected to the DSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where 'n' is a number.
(default eth0): eth0 如果是乙太接口的 ADSL,就要在這里寫上接貓的那個網絡接口號。此處是
eth0;
Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped. If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses. You may have some problems with demand-activated links.
>>> Enter the demand value (default no): 注:默認回車
>>> Enter the DNS information here: 202.96.134.133 注:在這里寫上 DNS 服務器地址;可以
和提供商要,也可以用我寫的這個;
Please enter the IP address of your ISP's secondary DNS server.
If you just press enter, I will assume there is only one DNS server.
>>> Enter the secondary DNS server address here: 202.96.128.143 這是第二個 DNS 服務器地
址;
>>> Please enter your PPPoE password:在這里輸入用戶的密碼;
>>> Please re-enter your PPPoE password: 確認密碼;
The firewall choices are:
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
>>> Choose a type of firewall (0-2): 2 注:在這里寫上 2,可以共享上網的;當然還得加一
條防火牆規划 ;
Ethernet Interface: eth0
User name:dxxx
Activate-on-demand: No
Primary DNS: 202.96.134.133
Secondary DNS: 202.96.128.143
Firewalling: MASQUERADE
>>> Accept these settings and adjust configuration files (y/n)? y 注:是不是保存配置;
關於共享上網,請參考:《ADSL 共享上網的解決辦法》
5.2 普通貓的拔號工具介紹;
普通貓分為串口和 PCI 的,請查看《關於網絡設備概述 》
普通貓的拔號工具主要有 kppp 和 wvdial;
在 Redhat/Fedora 中,用 system-config-network 或 redhat-config-network 也能設置 ppp 拔號; 在
KDE 桌面環境下,大家一般都用 kppp 拔號工具,點鼠標就可以完成;
wvdial 工具是文本的,幾乎在各大發行版都有。wvdial 的配置文件是/etc/wvdial.conf 。如果您
的貓已經驅動好了,運行一下 wvdialconf 命令就生成了/etc/wvdial.conf 了 。當然您得查看一下它
的內容;
1. [root@localhost ~]# wvdialconf
2. [root@localhost ~]# more /etc/wvdial.conf
關於 wvdial 工具的使用,請查看《普通 56K 貓拔號上網工具 wvdial 介紹》
6、無線網卡;
正在更新之中;由於我沒有這樣的網卡,是否有弟兄寫一篇詳盡一點的?在所有涉及無線網卡的文
檔中,這塊都是空白。缺的就是這個。 看來我是得弄一塊無線網卡了。。。。。。
7、DNS 客戶端配置文件/etc/resolv.conf;
本來不應該把 DNS 客戶端配置文件放在這里來說,但由於新手弟兄上網時,雖然能拔號,但不能以
域名訪問。究其原因是由於沒有修改 /etc/resolv.conf 文件;
/etc/resolv.conf 里面存放的是各大通信公司 DNS 服務器列表;下面的三個地址可以用一用;當
然您可以打電話問你的服務商;
1. nameserver 202.96.134.133
2. nameserver 202.96.128.143
3. nameserver 202.96.68.38
本文寫了常用的乙太網接口的配置,介紹了 Linux ifconfig 、netconfig 等,我感覺最重要的還
是配置文件,新手弟兄還是仔細看看配置文件吧。當您用工具配置完成后,不妨查看一下相應配置文件
的變化。我認為這樣的學習方式,能知其然,然后知所以然;
7.10
、
tcpdump
tcpdump 是一個用於截取網絡分組,並輸出分組內容的工具。tcpdump 憑借強大的功能和靈活的截
取策略,使其成為類 UNIX 系統下用於網絡分析和問題排查的首選工具。
tcpdump 提供了源代碼,公開了接口,因此具備很強的可擴展性,對於網絡維護和入侵者都是非常
有用的工具。tcpdump 存在於基本的 Linux 系統中,由於它需要將網絡界面設置為混雜模式,普通用戶
不能正常執行,但具備 root 權限的用戶可以直接執行它來獲取網絡上的信息。因此系統中存在網絡分
析工具主要不是對本機安全的威脅,而是對網絡上的其他計算機的安全存在威脅。
7.1.1 概述
顧名思義,tcpdump 可以將網絡中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網絡層、
協議、主機、網絡或端口的過濾,並提供 and、or、not 等邏輯語句來幫助你去掉無用的信息。
引用
# tcpdump -vv
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:53:21.444591 IP (tos 0x10, ttl 64, id 19324, offset 0, flags [DF], proto 6, length: 9
2) asptest.localdomain.ssh > 192.168.228.244.1858: P 3962132600:3962132652(52) ack 272652
5936 win 1266
asptest.localdomain.1077 > 192.168.228.153.domain: [bad udp cksum 166e!] 325+ PTR? 244.2
28.168.192.in-addr.arpa. (46)
11:53:21.446929 IP (tos 0x0, ttl 64, id 42911, offset 0, flags [DF], proto 17, length: 1
51) 192.168.228.153.domain > asptest.localdomain.1077: 325 NXDomain q: PTR? 244.228.168.
192.in-addr.arpa. 0/1/0 ns: 168.192.in-addr.arpa. (123)
11:53:21.447408 IP (tos 0x10, ttl 64, id 19328, offset 0, flags [DF], proto 6, length: 1
72) asptest.localdomain.ssh > 192.168.228.244.1858: P 168:300(132) ack 1 win 1266
347 packets captured
1474 packets received by filter
745 packets dropped by kernel
不帶參數的 tcpdump 會收集網絡中所有的信息包頭,數據量巨大,必須過濾。
7.1.2、命令介紹
命令格式為:tcpdump [-nn] [-i 接口] [-w 儲存檔名] [-c 次數] [-Ae]
[-qX] [-r 文件] [所欲捕獲的數據內容]
參數:
-nn,直接以 IP 及 Port Number 顯示,而非主機名與服務名稱。
-i,后面接要「監聽」的網絡接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要將監聽所得的數據包數據儲存下來,用這個參數就對了。后面接文件名。
-c,監聽的數據包數,如果沒有這個參數, tcpdump 會持續不斷的監聽,
直到用戶輸入 [ctrl]-c 為止。
-A,數據包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁數據包資料。
-e,使用資料連接層 (OSI 第二層) 的 MAC 數據包數據來顯示。
-q,僅列出較為簡短的數據包信息,每一行的內容比較精簡。
-X,可以列出十六進制 (hex) 以及 ASCII 的數據包內容,對於監聽數據包內容很有用。
-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 等。
除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,
greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'o
r' ,'||';
范例一:以 IP 與 Port Number 捉下 eth0 這個網卡上的數據包,持續 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
<==按下 [ctrl]-c 之后結束
6680 packets captured <==捉取下來的數據包數量
14250 packets received by filter <==由過濾所得的總數據包數量
7512 packets dropped by kernel <==被核心所丟棄的數據包
至於那個在范例一所產生的輸出中,我們可以大概區分為幾個字段,現以范例一當中那行特殊字體行來
說明一下:
· 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 Byt
e,所以這個數據包帶有 116 Bytes 的數據量。
· ack 1 win 9648:ACK 與 Window size 的相關資料。
最簡單的說法,就是該數據包是由 192.168.1.100 傳到 192.168.1.11,通過的 port 是由 22 到 1190,
且帶有 116 Bytes 的數據量,使用的是 PUSH 的標記,而不是 SYN 之類的主動聯機標志。
接下來,在一個網絡狀態很忙的主機上面,你想要取得某台主機對你聯機的數據包數據時,使用 tcpdu
mp 配合管線命令與正則表達式也可以,不過,畢竟不好捕獲。我們可以通過 tcpdump 的表達式功能,
就能夠輕易地將所需要的數據獨立的取出來。在上面的范例一當中,我們僅針對 eth0 做監聽,所以整
個 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 的信息,如果仔細看的話,你會發現數據包的傳遞都是雙向的,Client 端
發出請求而 Server 端則予以響應,所以,當然是有去有回了。而我們也就可以經過這個數據包的流向
來了解到數據包運動的過程了。例如:
· 我們先在一個終端機窗口輸入“tcpdump-i lo-nn”的監聽。
· 再另開一個終端機窗口來對本機(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 之所
以被稱為黑客軟件之一遠不止上面介紹的功能。上面介紹的功能可以用來作為我們主機的數據包聯機與
傳輸的流程分析,這將有助於我們了解到數據包的運作,同時了解到主機的防火牆設置規則是否有需要
修訂的地方。
還有更神奇的用法。當我們使用 tcpdump 在 Router 上面監聽明文的傳輸數據時,例如 FTP 傳輸協議,
你覺得會發生什么問題呢?我們先在主機端執行“tcpdump -i lo port 21 -nn –X”,然后再以 FTP
登錄本機,並輸入賬號與密碼,結果你就可以發現如下的狀況:
[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 .....<.........g
0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.(vsFTPd.
0x0040: 322e 302e 3129 0d0a 2.0.1)..
0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..A.K@.@.iY....
0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d .........\.%.U!]
0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7
0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai.
0x0040: 0a .
0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..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.mypassw
0x0040: 6f72 6469 7379 6f75 0d0a ordisyou..
上面的輸出結果已經被簡化過了,你需要自行在你的輸出結果中搜索相關的字符串才行。從上面輸出結
果的特殊字體中,我們可以發現該 FTP 軟件使用的是 vsFTPd,並且用戶輸入 dmtsai 這個賬號名稱,且
密碼是 mypasswordisyou。如果使用的是明文方式來傳輸你的網絡數據呢?
另外你得了解,為了讓網絡接口可以讓 tcpdump 監聽,所以執行 tcpdump 時網絡接口會啟動在“混雜模
式(promiscuous)”,所以你會在 /var/log/messages 里面看到很多的警告信息,通知你說你的網卡被
設置成為混雜模式。別擔心,那是正常的。至於更多的應用,請參考 man tcpdump 了。
例題:如何使用 tcpdump 監聽來自 eth0 適配卡且通信協議為 port 22,目標來源為 192.168.1.100 的
數據包資料?
答:tcpdump -i eth0 -nn port 22 and src host 192.168.1.100
例題:如何使用 tcpdump 抓取訪問 eth0 適配卡且訪問端口為 tcp 9080?
答:tcpdump -i eth0 dst 172.168.70.35 and tcp port 9080
例題:如何使用 tcpdump 抓取與主機 192.168.43.23 或着與主機 192.168.43.24 通信報文,並且顯示在
控制台上
答:tcpdump -X -s 1024 -i eth0 host \(192.168.43.23 or 192.168.43.24\) and host 172.16.7
0.35
注:必須指定網卡
7.1.3、tcpdump 的表達式介紹
表達式是一個正則表達式,tcpdump 利用它作為過濾報文的條件,如果一個報文滿足表 達式的條件,
則這個報文將會被捕獲。如果沒有給出任何條件,則網絡上所有的信息包 將會被截獲。
在表達式中一般如下幾種類型的關鍵字:
引用
第一種是關於類型的關鍵字,主要包括 host,net,port,例如 host 210.27.48.2, 指明 210.27.48.
2 是一台主機,net 202.0.0.0 指明 202.0.0.0 是一個網絡地址,port 23 指明端口號是 23。如果沒有
指定類型,缺省的類型是 host。
第二種是確定傳輸方向的關鍵字,主要包括 src,dst,dst or src,dst and src, 這些關鍵字指明
了傳輸的方向。舉例說明,src 210.27.48.2 ,指明 ip 包中源地址是 210.27.48.2 , dst net 202.
0.0.0 指明目的網絡地址是 202.0.0.0。如果沒有指明 方向關鍵字,則缺省是 src or dst 關鍵字。
第三種是協議的關鍵字,主要包括 fddi,ip,arp,rarp,tcp,udp 等類型。Fddi 指明是在 FDDI (分
布式光纖數據接口網絡)上的特定的網絡協議,實際上它是”ether”的別名,fddi 和 ether 具有類似
的源地址和目的地址,所以可以將 fddi 協議包當作 ether 的包進行處理和分析。 其他的幾個關鍵字就
是指明了監聽的包的協議內容。如果沒有指定任何協議,則 tcpdump 將會 監聽所有協議的信息包。
除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less, greater,
還有三種邏輯運算,取非運算是 ‘not ' '! ‘, 與運算是’and’,’&&';或運算是’or’ ,’|
|’; 這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要。
四、輸出結果介紹
下面我們介紹幾種典型的 tcpdump 命令的輸出信息
(1) 數據鏈路層頭信息
使用命令:
#tcpdump --e host ICE
ICE 是一台裝有 linux 的主機。它的 MAC 地址是 0:90:27:58:AF:1A H219 是一台裝有 Solaris 的
SUN 工作站。它的 MAC 地址是 8:0:20:79:5B:46; 上一條命令的輸出結果如下所示:
引用
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE. telne t
0:0(0) ack 22535 win 8760 (DF)
21:50:12 是顯示的時間, 847509 是 ID 號,eth0 <表示從網絡接口 eth0 接收該分組, eth0 >表示
從網絡接口設備發送分組, 8:0:20:79:5b:46 是主機 H219 的 MAC 地址, 它表明是從源地址 H219 發來
的分組. 0:90:27:58:af:1a 是主機 ICE 的 MAC 地址, 表示該分組的目的地址是 ICE。 ip 是表明該分
組是 IP 分組,60 是分組的長度, h219.33357 > ICE. telnet 表明該分組是從主機 H219 的 33357 端
口發往主機 ICE 的 TELNET(23)端口。 ack 22535 表明對序列號是 222535 的包進行響應。 win 8760
表明發 送窗口的大小是 8760。
(2) ARP 包的 tcpdump 輸出信息
使用命令:
#tcpdump arp
得到的輸出結果是:
引用
22:32:42.802509 eth0 > arp who-has route tell ICE (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
22:32:42 是時間戳, 802509 是 ID 號, eth0 >表明從主機發出該分組,arp 表明是 ARP 請求包, who
-has route tell ICE 表明是主機 ICE 請求主機 route 的 MAC 地址。 0:90:27:58:af:1a 是主機 ICE 的
MAC 地址。
(3) TCP 包的輸出信息
用 tcpdump 捕獲的 TCP 包的一般輸出信息是:
引用
src > dst: flags data-seqno ack window urgent options
src > dst:表明從源地址到目的地址, flags 是 TCP 報文中的標志信息,S 是 SYN 標志, F (FIN),
P (PUSH) , R (RST) "." (沒有標記); data-seqno 是報文中的數據 的順序號, ack 是下次期望的順
序號, window 是接收緩存的窗口大小, urgent 表明 報文中是否有緊急指針。 Options 是選項。
(4) UDP 包的輸出信息
用 tcpdump 捕獲的 UDP 包的一般輸出信息是:
引用
route.port1 > ICE.port2: udp lenth
UDP 十分簡單,上面的輸出行表明從主機 route 的 port1 端口發出的一個 UDP 報文 到主機 ICE 的 port
2 端口,類型是 UDP, 包的長度是 lenth。
五、舉例
(1) 想要截獲所有 210.27.48.1 的主機收到的和發出的所有的分組:
#tcpdump host 210.27.48.1
(2) 想要截獲主機 210.27.48.1 和主機 210.27.48.2 或 210.27.48.3 的通信,使用命令(注意:括號
前的反斜杠是必須的):
#tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \)
(3) 如果想要獲取主機 210.27.48.1 除了和主機 210.27.48.2 之外所有主機通信的 ip 包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4) 如果想要獲取主機 192.168.228.246 接收或發出的 ssh 包,並且不轉換主機名使用如下命令:
#tcpdump -nn -n src host 192.168.228.246 and port 22 and tcp
(5) 獲取主機 192.168.228.246 接收或發出的 ssh 包,並把 mac 地址也一同顯示:
# tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn
(6) 過濾的是源主機為 192.168.0.1 與目的網絡為 192.168.0.0 的報頭:
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24
(7) 過濾源主機物理地址為 XXX 的報頭:
tcpdump ether src 00:50:04:BA:9B and dst……
(為什么 ether src 后面沒有 host 或者 net?物理地址當然不可能有網絡嘍)。
(8) 過濾源主機 192.168.0.1 和目的端口不是 telnet 的報頭,並導入到 tes.t.txt 文件中:
Tcpdump src host 192.168.0.1 and dst port not telnet -l > test.txt
ip icmp arp rarp 和 tcp、udp、icmp 這些選項等都要放到第一個參數的位置,用來過濾數據報的類
型。