第十六章 网络

前言

  1. 在网络连接方面,Linux 可以说是万能的。Linux 工具可以建立各种网络系统及应用,包括防火墙、路由器、域名服务器、NAS (网络附加存储) 盒等。
  2. 由于网络连接涉及的领域很广,所以用于控制、配置网络的命令自然很多。本章只着重讲一些经常用到的命令,涉及网络监测以及文件传输等方面。此外,我们还会探讨一下用于远程登录的 ssh 命令,所涉及的命令如下所示:
  • ping: 向网络主机发送 ICMP ECHO_REQUEST 数据包。
  • traceroute: 显示数据包到网络主机的路由路径。
  • netstat: 显示网络连接、路由表、网络接口数据、伪连接以及多点传送成员等信息。
  • ftp: 文件传输命令
  • lftp: 改善后的文件传输命令
  • wget: 非交互式网络下载器
  • ssh: OpenSSH (SSH 协议的免费开源实现) 版的 SSH 客户端 (远程系统登录命令)
  • scp: secure copy 的缩写,是远程复制文件命令
  • sftp: secure file transfer program 的缩写,安全文件传输程序。
  1. 便于更好地理解本章内容,首先熟悉下面的术语:
  • IP (Internet protocol) address: 互联网协议地址
  • host and domain name: 主机名和域名
  • URL (uniform resource identifier) : 统一资源标识符

检查、监测网络

基本介绍

  1. 即使你不是系统管理员,经常检验网络的性能和运行情况也是有必要的。

ping - 向网络主机发送特殊数据包

  1. 基本介绍
  • 最基本的网络连接命令就是 ping 命令。
  • ping 命令会向指定的网络主机发送特殊网络数据包 TMCP ECHO_REQUEST 。
  • 多数网络设备收到该数据后会做出回应,通过此法即可验证网络连接是否正常。
  • 有时从安全角度出发,通常会配置部分网络通信设备 (包括 Linux 主机) 以忽略这些数据,因为这样可以降低主机遭受潜在攻击者攻击的可能性。当然,防火墙经常被设置为阻碍 IMCP 通信。
    1
    [me@linux ~]$ ping linuxcommand.org
  • 一旦程序启动,ping 命令便以既定的时间间隔 (默认是 1s) 传送数据包直到该命令被中断。
  • 按 Ctrl-C 键终止 ping 程序,ping 程序会将反映运行情况的数据显示出来。
  • 数据包丢失 0% 表示网络运行正常,ping 连接成功则表明网络各组成员 (接口卡、电缆、路由和网关) 总体处于良好的工作状态。

traceroute - 跟踪网络数据包的传输路径

  1. traceroute 程序会显示文件通过网络从本地系统传输到指定主机过程中所有停靠点的列表。
  2. 下例列出了数据在连接到网站 http://www.slashdot.org/ 时所经过的站点。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [me@linux ~]$ traceroute slashdot.org
    traceroute to slashdot.org (204.68.111.106), 64 hops max
    1 172.28.12.254 32.202ms 2.022ms 4.433ms
    2 172.28.2.1 1.186ms 1.203ms 1.136ms
    3 163.179.126.1 12.905ms 16.726ms 11.037ms
    4 120.80.202.153 25.712ms 53.734ms 92.284ms
    5 120.82.0.185 356.589ms 173.631ms 66.899ms
    6 * * *
    7 219.158.24.138 22.680ms 15.104ms 25.731ms
    8 219.158.96.30 307.990ms 409.480ms 188.871ms
    9 173.241.128.49 220.247ms 409.948ms 175.224ms
    10 89.149.128.174 203.034ms 235.967ms 409.685ms
    11 69.174.7.78 409.548ms 200.562ms 185.809ms
    12 108.162.214.200 227.594ms 189.263ms 176.557ms
    13 172.69.32.222 188.186ms 174.306ms 192.125ms
    14 * * *
    15 204.68.111.106 175.580ms 181.934ms 177.909ms
    16 slashdot.org (204.68.111.106), 42.727 ms 42.016 ms 41.437 ms
  3. 可以从结果知道从测试系统到 http://www.slashdot.org/ 网站的连接需要经过 16 个路由器。
  4. 对于那些提供身份信息的路由器,结果中列出了他们的主机名、 IP 地址以及运行状态信息,这些信息包含了文件从本地系统到路由器 3 次往返时间。
  5. 而对于那些因为路由器配置、网络堵塞或是防火墙等原因不提供身份信息的路由器,则直接用星号行表示。

netstat - 检查网络设置及相关统计数据

  1. 基本介绍
  • netstat 程序可以用于查看不同的网络设置及数据。通过使用其丰富的参数选项,我们可以查看网络启动过程的许多特性。
  1. 案例一
  • 使用 -ie 选项,我们可以检查系统中的网络接口信息。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [me@linux ~]$ netstat -ie
    eth0 Link encap:Ethernet HWadder 00:1d:09:9b:99:67
    inet addr: 192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::21d:9ff:fe9b:9967/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric:1
    RX Pckets:238488 errors:0 dropped:0 overruns:0 frame:0
    TX packets:403217 erors:0 dropped:0 overruns:0 carrier:0
    collisions;0 txqueuelan:100
    RX bytes:153098921 (146.0MB) TX bytes:261035246 (248.9)
    Memory: fefcoooo -fdfe0000

    Link encap:local LooPback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:2208 errors:0 dropped:0 overruns:0 frame:0
    TX packets:2208 errors:0
    dropped:0 overruns:0 carrier:0 collision:0 txqueuelen:0
    RX bytes:111490 (108.8 KB) Tx bytes:111490 (108.8KB)
  • 以上的输出信息显示,测试系统有两个网络端口:第一个称为 eth0 ,是以太网端口;第二个称为 10 ,是系统用来访问自己的回环虚拟接口。
  • 对网络进行日常诊断,关键是看能否在每个接口信息第四行的开头找到 UP 这个词以及能否在第二行的 inet addr 字段找到有效的 IP 地址。
  • 第四行的 UP 代表着该网络接口已启用,而对于使用动态主机配置协议的系统 (DHCP) ,inet addr 字段里面的有效 IP 地址则说明了 DHCP 正在工作。
  1. 案例二
  • 使用 -r 选项将显示内核的网络路由表,此表显示了网络之间传送数据包时网络的配置情况。
    1
    2
    3
    4
    5
    [me@linuxbox ~]$ netstat -r
    kernel IP routing table
    Destination Gateway Genmask Flags MSS Window irtt Iface
    192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 default
    192.168.1.1 0.0.0.0 UG 0 0 0 eth0
  • 此例显示的是运行在防火墙/路由器后面的局域网 (LAN) 上一客户端的典型路由表。
  • 该表的第一行表示接收方式的IP地址为 192.168.1.0 ,IP 以 0 结尾表示接收方是网络而非个人主机,也就是说接收方可以是局域网 (LAN) 上的任何主机。
  • 下面的 Gateway 参数字段,表示的是建立当前主机与目标网络之间联系的网关 (或路由) 的名称或 IP 地址,此参数值是星号表示无需网关。
  • 最后一行包含默认的接收方,这意味着所有通信都以该网络为目的地。
  • 上例中,网关被定义为 IP 地址是 192.168.1.1 的路由器,该路由器对双方通信做出最佳路径判断。
  • netstat 程序也有很多参数选项,而以上只列举了其中两个,要了解其整个参数列表可以查看 netstat 的 man 手册页。

通过网络传输文件

基本介绍

  1. 只有掌握了如何通过网络转移文件,才会明白网络的作用之大。有许多命令可用于传送网络数据,现在我们就介绍其中的两个,后续章节将会介绍更多。

ftp - 采用 FTP (文件传输协议) 传输文件

  1. 基本介绍
  • ftp 是 Linux 比较经典的命令之一,由 File Transfer Protocol 协议缩写而来。
  • ftp 用作下载文件工具在因特网上使用很广泛,大多数 Web 浏览器都支持 ftp 命令。
  • ftp 程序比 Web 浏览器出现得更早,它用来与 FTP 服务器进行通信,所谓 FTP 服务器就是安歇包含供网络上传、下载文件的机器。
  • FTP (原来的表示形式) 并不安全,因为它以明文的方式传送账户名以及密码。这意味着这些信息并没有加密,任何一个接触网络的人都能看到它们。
  • 鉴于此,几乎所有使用 FTP 协议进行的网络文件传输都是由匿名 FTP 服务器处理的。
  • 匿名服务器允许任何人使用 anonymous 登录名以及无意义的密码登录。
  1. ftp 命令实例
命令 代表的含义
ftp fileserver 启动 ftp 程序,建立与 FTP 服务器 fileserver 的连接
anonymous 登录名,登录提示框出现之后就是密码输入有提示框。一些服务器可以接受空白密码,其他的则要求密码以邮件地址的形式。在那样的情况修改,就尝试 user@example.com 这样的格式
cd pub/cd_images/Ubuntu-8.04 打开远程系统上含有所需文件的目录。注意,对于多数匿名服务器,供公开下载的文件一般存放在 pub 目录下
ls 列出远程系统上的目录列表
lcd Desktop 切换至本地系统的 Desktop 目录。本例中,ftp 程序是在 home 目录下启动的,此命令行将工作目录切换至 Desktop 下,映像文件也会下载到该目录下
bye 注销登录远程服务器并且结束 ftp 程序。也可以使用 quit 或 exit 命令代替
  1. ftp 补充说明
  • 在提示符 ftp> 后面输入 help 会显示 ftp 所支持的命令列表。在已被授予足够权限的服务器上使用 ftp 命令,可以执行许多常见的文件管理任务。

lftp - 更好的 ftp

  1. ftp 并不是唯一的命令行 FTP 客户端。事实上,有很多这样的命令行。
  2. 其中更好用也更受欢迎的一个就是由 ALexander Lukyanov 编写的 lftp 命令,它与传统的 ftp 程序功能类似但却有很多额外的便利功能,包括多协议支持 HTTP、下载失败时自动重新尝试、后台进程支持、Tab 键完成文件名输入等许多其他的功能。

wget - 非交互式网络下载工具

  1. wget 是另一个用于文件下载的命令行程序。该命令既可以用于从网站上下载内容也可以用于从 FTP 站点下载,单个文件、多个文件甚至整个网站都可以被下载。
  2. 下例演示的就是用 wget 命令下载网站 http://www.linuxcommand.org/ 第一页内容。
    1
    [me@linuxbox ~]$ wget http://linuxcommand.org/index.php
  3. wget 命令的许多参数选项支持递归下载、后台文件下载以及继续下载部分被下载的文件等操作。

与远程主机的安全通信

基本介绍

  1. 多年以前,类 UNIX 操作系统就可以通过网络进行远程操控。
  2. 早期,在互联网还未普及的时候,登录远程主机有两个很受欢迎的命令 -rlogin 和 telnet 命令。
  3. 它们与 ftp 命令有着相同的致命缺点,及所有通信信息 (包括用户名和密码) 都是以明文的方式传输的,所以它们并不适用于互联网时代。

ssh - 安全登录远程计算机

  1. ssh 基本介绍
  • 为了解决明文传送的问题,一个叫做 SSH (Secure Shell) 的缩写的新协议应运而生。
  • SSH 协议解决了与远程主机进行安全通信的两个基本问题:第一,该协议能验证远程主机的身份是否属实,从而避免中间人攻击;第二,该协议将本机与远程主机之间的通信内容全部加密。
  • SSH 协议包括两个部分:一个试运行在远程主机上的 SSH 服务端,用来监听端口 22 上可能过来的连接请求;另一个是本地系统上的 SSH 客户端,用来与远程服务器进行通信。
  • 多数 Linux 发行版都采用 BSD 项目的 openSSH ( SSH 的免费开源实现) 方法实现 SSH 。
  • 有些发行版如 Red Hat 会默认包含客户端包和服务端包,而有的版本如 Ubuntu 则仅仅提供客户端包。系统想要接收远程连接,就必须安装、配置以及运行 OpenSSH-server 软件包,并且必须允许 TCP 端口 22 上进来的网络连接 (当服务器正在运行防火墙或是在防火墙后面时) 。
  • 如果没有可以连接的远程系统但却要尝试本例,可以在系统已安装了 OpenSSH-server 软件包的基础上将远程主机名设为本地主机名,这样,机器便会与自身建立网络连接。
  • ssh 命令作为 SSH 客户端程序用于建立与远程 SSH 服务器之间的通信再合适不过了。
  1. 案例
  • 如下便是使用 ssh 客户端程序来件与远程主机 remote-sys 的链接的例子。
    1
    2
    3
    4
    [me@linuxbox ~]$ ssh remote-sys
    The authenticity of host 'remote-sys(192.168.1.4)' can't be established.
    RSA Key fingerprint is 41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.
    Are you sure you want to continue connecting(yes/no)?
  1. 第一次尝试连接的时候,由于 ssh 程序从来没有接触过此远程主机,所以会跳出一条不能确定远程主机真实性的消息。当出现这条警告消息的时候输入 yes 接受远程主机的身份,一旦建立连接,会提示用户输入密码。
    1
    2
    warning: Permanently added 'remote-sys,192.168.1.4' (RSA) to the list of known hosts.
    me@remote-sys's password:
  2. 密码输入正确后,远程系统的 shell 提示符便出现了。
    1
    2
    Last login: Tue Aug 13:00:48 2011
    [me@remote-sys ~]$
  3. 远程 shell 对话将一直开启着,直到用户在该对话框中输入 exit 命令断开与远程系统的连接。连接一旦断开后,本地 shell 会话恢复,本地 shell 提示符又重新出现。
  4. 使用非本地系统上使用的用户名也可以登录远程系统。例如,当本地用户 me 在远程系统上有一个 bob 账户,me 用户就可以用下面的命令登录远程系统上的 bob 账户。
    1
    2
    3
    [me@linuxbox ~]$ ssh bob@remote-sys's password:
    Last login: Tue Aug 30 13:03:21 2011
    [bob@remote-sys ~]$
  5. ssh 命令会验证远程主机的真实性。如果远程主机没有成功验证,就会跳出警告信息。

scp - 安全传输文件

基本介绍

  1. OpenSSH 软件包包含了两个使用 SSH 加密隧道进行网络间文件复制的程序,scp 便是其中之一。
  2. 该命令与普通的文件复制命令 cp 类似,而他们之间最大的差别在于 scp 命令的源或是目地路径前面多个远程主机号和冒号。
  3. 案例
  • 下面的例子实现了从 remote-sys 远程系统的 home 目录中将 document.txt 文件复制到本地系统当前工作目录下的操作。
    1
    2
    3
    4
    [me@linuxbox ~]$ scp remote-sys:document.txt .
    me@remote-sys's password:
    document.txt
    [me@linuxbox ~]$
  • 与 ssh 命令一样,如果不是用本地系统的用户名登录远程系统,那么久需在远程主机名前添加将要登录的远程系统的账户名
    1
    [me@linuxbox ~]$ scp bob@remote-sys:document.txt .

sftp - 安全传输文件

基本介绍

  1. 另外一个 SSH 文件复制程序是 sftp 。
  2. sftp 是 ftp 程序的安全版本,sftp 与我们先前使用的 ftp 程序功能极为相似,只是 sftp 是用 SSH 加密隧道传输信息而不是以明文方式传输。
  3. sftp 相比传统的 ftp 而言,还有一个重要的优点,就是它并不需要远程主机运行 FTP 服务器,仅仅需要 SSH 服务器,这就意味着任何与 SSH 客户端连接的远程机器都可以当作 FTP 服务器使用。
  4. 案例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [me@linuxbox ~]$ sftp remote-sys
    Connecting to remote-sys ...
    me@remote-sys's password:
    sftp> ls
    ubuntu-8.04-desktop-i386.iso
    sftp> lcd Desktop
    sftp> get ubuntu-8.04-desktop-i386.iso
    Fetching /home/me/ubuntu-8.04-desktop-i386.iso to ubuntu-8.04-desktop-i386.iso

    /home/me/ubuntu-8.04-desktop-i386.iso 100% 699MB 7.4MB/s 01:35
    sftp>bye

参考文章

  • 转载:Linux 命令行大全