十四、网络管理

网卡在 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 secondsafter 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.133Secondary 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 这些选项等都要放到第一个参数的位置,用来过滤数据报的类

型。