5.2.1 ping
5.2.1  ping
这个ping是很重要的命令,ping主要通过ICMP数据包来进行整个网络的状况报告,当然,最重要的就是ICMP type 0、8这两个类型,分别是要求回报与主动回报网络状态是否存在的特性。要特别注意的是,ping需要通过IP数据包来传送ICMP数据包,而IP数据包里有个相当重要的TTL(Time To Live)属性,这是一个很重要的路由特性,详细的IP与ICMP表头数据请参考网络基础的详细介绍。
[root@linux ~]# ping [-bcstnM] IP
参数:
-b,后面接的是 broadcast 的 IP,用在你“需要对整个网段的主机进行 ping ”时;
-c,后面接的是执行 ping 的次数,例如 -c 5 ;
-n,不进行 IP 与主机名称的反查,直接使用 IP ;
-s,发送出去的 ICMP 数据包大小,默认为 56(bytes),再加 8 bytes 的 ICMP 表头资料。
-t,TTL 的数值,默认是 255,每经过一个节点就会少
-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数据包去要求对方主机响应是否存在于网络环境中。上面的响应信息当中,几个重要的项目如下。
· 64 Bytes:表示这次传送的ICMP数据包大小为64 Bytes,这是默认值。在某些特殊场合中,例如,要搜索整个网络内最大的MTU时,可以使用-s 2000之类的数值来取代。
· icmp_seq=0:ICMP所检测进行的次数,第一次编号为0。
· ttl=243:TTL与IP数据包内的TTL是相同的,每经过一个带有MAC的节点(node)时,例如router、bridge时,TTL就会减少1,默认的TTL为255,你可以通过 -t 150之类的方法来重新设置默认TTL数值。
· time=9.16 ms:响应时间,单位有ms(0.001秒)及µs(0.000001秒),一般来说,响应时间越小,表示两台主机之间的网络联机越良好。
如果你忘记加上 -c 3这样的规定检测次数,那就得要使用 [ctrl]-c将它结束掉了。
范例二:针对整个网段进行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address          <==会告知危险。
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
# 当针对整台主机作 ping 的检测时,可以利用 -b 这个参数。
# 请特别注意,当使用 ping -b 时,会对整个网段进行检测。没事别乱用。
# 例如上面的范例中,区网内的 192.168.10.20... 等主机会被检测到。
如果想要了解网内有多少台主机存活着,那么使用ping -b broadcast就能够知道了。而不必一台一台主机来检测。另外要特别注意一下,如果你的主机与待检测主机并不在同一个网段内,那么TTL默认使用255,如果是同一个网段内,那么TTL默认则使用64。看看上面的输出即可明白。
我们在前几章的网络基础里面谈到加大帧(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
# 根本就是无法实现的。那如何是好?用前一小节介绍的 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,那么请参考前一章节的内容来调整。
不过不要随便调整MTU,除非真的有问题。通常是在如下情况调整MTU。
· 因为全部的主机群都是在内部的网段,例如群集架构(Cluster)的环境下,由于内部的网络节点都是我们可以控制的,因此可以通过修改MTU来改进网络性能。
· 因为操作系统默认的MTU与你的网段不符,导致某些网站可以顺利联机,某些网站则无法联机。以Windows操作系统作为联机分享的主机时,在Client端挺容易发生这个问题。
如果是要连上Internet的主机,注意不要随便调整MTU,因为我们无法知道Internet上面的每台机器能够支持的MTU到多大,因为这些也不是我们能够管得到的。
另外,其实每种联机方式都有不同的MTU值,常见的各种接口的MTU值如表5-1所示。
表5-1  常见的各种接口的MTU值
网络接口 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

MTU

Ethernet

1500

PPPoE

1492

Dial-up Modem

576

5.2.1  ping
这个ping是很重要的命令,ping主要通过ICMP数据包来进行整个网络的状况报告,当然,最重要的就是ICMP type 0、8这两个类型,分别是要求回报与主动回报网络状态是否存在的特性。要特别注意的是,ping需要通过IP数据包来传送ICMP数据包,而IP数据包里有个相当重要的TTL(Time To Live)属性,这是一个很重要的路由特性,详细的IP与ICMP表头数据请参考网络基础的详细介绍。
[root@linux ~]# ping [-bcstnM] IP
参数:
-b,后面接的是 broadcast 的 IP,用在你“需要对整个网段的主机进行 ping ”时;
-c,后面接的是执行 ping 的次数,例如 -c 5 ;
-n,不进行 IP 与主机名称的反查,直接使用 IP ;
-s,发送出去的 ICMP 数据包大小,默认为 56(bytes),再加 8 bytes 的 ICMP 表头资料。
-t,TTL 的数值,默认是 255,每经过一个节点就会少
-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数据包去要求对方主机响应是否存在于网络环境中。上面的响应信息当中,几个重要的项目如下。
· 64 Bytes:表示这次传送的ICMP数据包大小为64 Bytes,这是默认值。在某些特殊场合中,例如,要搜索整个网络内最大的MTU时,可以使用-s 2000之类的数值来取代。
· icmp_seq=0:ICMP所检测进行的次数,第一次编号为0。
· ttl=243:TTL与IP数据包内的TTL是相同的,每经过一个带有MAC的节点(node)时,例如router、bridge时,TTL就会减少1,默认的TTL为255,你可以通过 -t 150之类的方法来重新设置默认TTL数值。
· time=9.16 ms:响应时间,单位有ms(0.001秒)及µs(0.000001秒),一般来说,响应时间越小,表示两台主机之间的网络联机越良好。
如果你忘记加上 -c 3这样的规定检测次数,那就得要使用 [ctrl]-c将它结束掉了。
范例二:针对整个网段进行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address          <==会告知危险。
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
# 当针对整台主机作 ping 的检测时,可以利用 -b 这个参数。
# 请特别注意,当使用 ping -b 时,会对整个网段进行检测。没事别乱用。
# 例如上面的范例中,区网内的 192.168.10.20... 等主机会被检测到。
如果想要了解网内有多少台主机存活着,那么使用ping -b broadcast就能够知道了。而不必一台一台主机来检测。另外要特别注意一下,如果你的主机与待检测主机并不在同一个网段内,那么TTL默认使用255,如果是同一个网段内,那么TTL默认则使用64。看看上面的输出即可明白。
我们在前几章的网络基础里面谈到加大帧(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
# 根本就是无法实现的。那如何是好?用前一小节介绍的 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,那么请参考前一章节的内容来调整。
不过不要随便调整MTU,除非真的有问题。通常是在如下情况调整MTU。
· 因为全部的主机群都是在内部的网段,例如群集架构(Cluster)的环境下,由于内部的网络节点都是我们可以控制的,因此可以通过修改MTU来改进网络性能。
· 因为操作系统默认的MTU与你的网段不符,导致某些网站可以顺利联机,某些网站则无法联机。以Windows操作系统作为联机分享的主机时,在Client端挺容易发生这个问题。
如果是要连上Internet的主机,注意不要随便调整MTU,因为我们无法知道Internet上面的每台机器能够支持的MTU到多大,因为这些也不是我们能够管得到的。
另外,其实每种联机方式都有不同的MTU值,常见的各种接口的MTU值如表5-1所示。
表5-1  常见的各种接口的MTU值
网络接口

MTU

Ethernet

1500

PPPoE

1492

Dial-up Modem

576

5.2.2  traceroute
我们前面谈到的命令大多数都是针对主机的网络参数设置所需要的,而ping是两台主机之间的回应与否的判断,那么有没有命令可以追踪两台主机之间通过的各个节点(Node)通信状况的好坏呢?如果我们联机到yahoo的速度比平常慢,你觉得是自己的网络环境有问题,还是外部的Internet有问题?如果是前者的话,我们当然需要检查自己的网络环境,看看究竟是谁中毒了?但如果是Internet的问题呢?那只有“等等等”了。判断是这个问题就得要使用traceroute这个命令。
[root@linux ~]# traceroute [-nwig] IP
参数:
-n,可以不必进行主机的名称解析,只用 IP ,速度较快。
-w,若对方主机在几秒钟内没有回声就宣告不治...默认是 5 秒。
-i,用在比较复杂的环境,如果你的网络接口很多很复杂时,才会用到这个参数。
     例如,你有两条 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个节点,traceroute会主动对这12个节点做ICMP的回应等待,并检测回复的时间,每个节点会检测三次。所以像上面显示的结果,发现每个节点其实回复的时间大约在200 ms以内,算是Internet的环境还可以了。而且由上面的信息来看,在61.58.33.133这个节点后的传输延迟较久,至于之前的9个节点则有不错的表现。通过这种分析,可以让你了解到这条联线是哪个环节出了问题。
另外,如果在默认的5秒钟之内traceroute听不到节点的回应,那么屏幕上就会出现一个“*”的符号,告知该节点无法有顺利的响应。由于我们的traceroute用的是ICMP数据包,有些防火墙或者主机可能会将ICMP数据包扔掉,因此就会造成等不到回应的状况。另外,有些Gateway本来就不支持traceroute的功能,因此也会产生“*”的状况,所以分析时要注意一下。
5.2.3  netstat
如果你觉得某个网络服务明明启动了,但是却无法联机的话,应该怎么办?首先应该查询一下自己的网络接口所监听的端口(port),看看是否真的有启动,因为有时候屏幕上面显示的OK并不一定真的OK了。
[root@linux ~]# netstat -[rn]       <==与路由有关的参数
[root@linux ~]# 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 每5秒更新一次网络状态的显示
范例一:列出目前的路由表状态,且以 IP 及 Port Number 显示:
[root@linux ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt 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
# 其实这个参数就跟 route -n 一模一样,对吧。这不是 netstat 的主要功能
范例二:列出目前的所有网络联机状态,使用 IP 与 Port Number
[root@linux ~]# netstat -an
Active Internet connections (Servers and established)
Proto Recv-Q Send-Q Local Address             Foreign Address             State
tcp        0      0 0.0.0.0:25                0.0.0.0:*                   LISTEN
tcp        0      0 :::22                     :::*                        LISTEN
tcp        0      0 ::ffff:192.168.10.100:25  ::ffff:192.168.10.200:57509 TIME_WAIT
tcp        0     52 ::ffff:192.168.10.100:22  ::ffff:192.168.10.210:1504  ESTABLISHED
udp        0      0 127.0.0.1:53              0.0.0.0:*
Active UNIX domain sockets (Servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     4792   public/cleanup
unix  2      [ ACC ]     STREAM     LISTENING     4799   private/rewrite
……(下面省略)……
netstat的输出主要分为两大部分,分别是TCP/IP的网络接口部分,以及传统的Unix socket部分。还记得我们在《鸟哥的Linux私房菜——基础学习篇》里面曾经谈到文件的类型吗?那个socket与FIFO文件还记得吧?那就是在Unix接口里用来作为程序数据交流的接口了,也就是上面程序里看到的Active Unix domain sockets的内容了。
通常鸟哥都是建议加上“-n”这个参数的,因为可以避免主机名称与服务名称的反查,直接以IP及端口号码(Port Number)来显示,显示的速度会快很多。至于在输出的信息当中,我们先来谈一谈关于网络联机状态的输出部分,它主要分为下面几个大项。
· Proto:该联机的数据包协议,主要为TCP/UDP等协议。
· Recv-Q:由非用户程序连接所复制而来的总bytes数。
· Send-Q:由远程主机传送而来,但不具有ACK标志的总bytes数,指主动联机SYN或其他标志的数据包所占的bytes数。
· Local Address:本地端的地址,可以是IP(-n参数存在时),也可以是完整的主机名称。如上述代码中我们看到的IP格式有两种,一种是IPv4的标准,即是4组十进制的数字加上冒号“:”后,接着Port Number。一种是IPv6,前面的IP加上很多冒号“:”的格式。可以由这个显示的数据看出这个服务是开放在哪一个接口,例如上例当中,port 22是开放在0.0.0.0,即所有接口都可以连到port 22,至于port 53则仅开放在本机的127.0.0.1这个接口而已,所以是不对外部接口开放的。
· Foreign Address:远程的主机IP与Port Number。
· stat:状态列,主要的状态有如下几项。
Ø ESTABLISED:已建立联机的状态。
Ø SYN_SENT:发出主动联机(SYN标志)的联机数据包。
Ø SYN_RECV:接收到一个要求联机的主动联机数据包。
Ø FIN_WAIT1:该联机正在断线当中。
Ø FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的数据包。
Ø TIME_WAIT:该联机已挂断,但socket还在网络上等待结束。
Ø LISTEN:通常用在服务的监听port。可使用“-l”参数查阅。
基本上,我们常常谈到netstat的功能,可以用来观察网络的联机状态,而网络联机状态中,又以观察“我目前开了多少port在等待客户端的联机”以及“目前我的网络联机状态中,有多少联机已建立或产生问题”最常见。那你如何了解与观察呢?通常鸟哥是这样处理的:
范例三:显示出目前已经启动的网络服务
[root@linux ~]# 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:25      0.0.0.0:*         LISTEN  2141/master
tcp        0      0 :::22            :::*               LISTEN  1924/sshd
tcp        0      0 :::25            :::*               LISTEN  2141/master
udp        0      0 127.0.0.1:53   0.0.0.0:*                   1911/named
# 上面最重要的其实是那个 -l 的参数,因为可以列出只有在 Listen 的 port
你可以在上面的范例中发现,我的网络联机仅对外开放port 25以及port 22(因为针对0.0.0.0开放),至于port 53则仅针对内部的127.0.0.1开放,所以是不对Internet开放这个服务的。而其中port 22、port 25都是使用TCP数据包,至于port 53则是开放在UDP数据包的状态。再仔细地看,每一行输出的最右边,你可以发现鸟哥的主机port 22是由sshd这个程序所启动的,并且它的PID是1924。看到这里,聪明的你应该知道,我该如何关闭这个port了吧?使用kill或killall即可。
范例四:观察本机上头所有的网络联机状态
[root@linux ~]# netstat -atunp
Active Internet connections (Servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address    State        PID/Program name
tcp        0      0 0.0.0.0:25           0.0.0.0:*            LISTEN       2141/master
tcp        0      0 :::22                 :::*                  LISTEN       1924/sshd
tcp        0      0 :::25                 :::*                  LISTEN       2141/master
tcp        0     68 192.168.1.100:22   192.168.1.210:1504  ESTABLISHED 30417/sshd:
udp        0      0 127.0.0.1:53        0.0.0.0:*                            1911/named
注意范例四的特殊字体,代表目前已经建立联机的一条网络连接,它是由远程主机192.168.1.210启动一个大于1024的端口,向本地端主机192.168.1.100的port 22进行联机的一条连接,你需要想起来的是:Client端是随机取一个大于1024的port进行联机,此外只有root可以启动小于1023的port,这样就能明白上面的那条连接了。如果你想要断开这条连接的话,查看最右边的30417/sshd后直接kill就可以了。
至于传统的Unix socket的数据,使用man netstat查阅一下吧。这个Unix socket通常用于一些仅在本机上运行的程序所打开的接口文件,例如X Window不都是在本机上运行吗?那何必启动网络的port呢?当然可以使用Unix socket了,另外,例如Postfix这一类的网络服务器,由于很多操作都是在本机上完成的,所以会占用很多的Unix socket。
5.2.4  host
这个命令可以用来查出某个主机名称的IP。例如,我们想要知道tw.yahoo.com的IP时,可以这样做:
[root@linux ~]# host [-a] hostname [Server]
参数:
-a,列出该主机详细的各项主机名称设置数据
[Server] :可以使用不是 /etc/resolv.conf 的 DNS 主机来查询
范例一:列出 tw.yahoo.com 的 IP 
[root@linux ~]# host tw.yahoo.com
tw.yahoo.com is an alias for tw.yahoo-ap1.akadns.net.
tw.yahoo-ap1.akadns.net has address 202.43.195.52
IP是202.43.195.52,很简单就可以查询到IP了。那这个IP是向谁查询到的呢?其实就是写在 /etc/resolv.conf文件里的DNS主机。如果不想要使用该文件里的主机来查询,也可以这样做:
[root@linux ~]# 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.yahoo-ap1.akadns.net.
tw.yahoo-ap1.akadns.net has address 202.43.195.52
上例告诉我们用来查询的主机是哪一台了,这样清楚了吧。至于更详细的host用法,我们会在DNS主机那个章节中再来好好介绍
5.2.5  nslookup
这条命令的用途与host基本上是一样的,就是用来作为IP与主机名称对应的检查,同样是使用 /etc/resolv.conf这个文件作为DNS服务器的来源选择。
[root@linux ~]# nslookup [-query=[type]] [hostname|IP]
参数:
-query=type:查询的类型,除了传统的 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,我们将在DNS服务器一章里再来好好介绍吧
5.3  远程联机命令
远程联机就是在不同的计算机之间进行登录。我们可以通过Telnet、SSH或者是FTP等协议来进行远程主机的登录,下面我们就分别来介绍一下这些基本的命令,其他相关的服务器我们会在后续进行说明的。
5.3.1  Telnet
Telnet是早期个人计算机连接到服务器主机上工作时最重要的一个软件了。它不但可以直接连接到服务器上,还可以用来连接BBS呢。非常棒!不过,Telnet本身的数据在传送的时候是使用明文(原始的数据,没有加密),所以数据在Internet上面跑的时候,会比较危险一点(就怕被别人监听)。更详细的内容我们会在“远程联机服务器”章节里做介绍的。
[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]
欢迎光临。系统负载:0.16 0.16 0.16 [负载正常]
  ╭─┼────┼─╮        ╭╮         ┌┤梦之大地├────────────┐
  ╭──┬──┬──╮╭───┴┴───┬╮  │                             │
  ╰──┴──┴──╯               │    │ 梦之大地由                    │
  ╭────────╮           ╭─╯    │    【计算机网络爱好社‧CCNS】     │
   ╭───┬───╮       ╭──╯        │                     维护管理  │
           │      │ ╭─╯             │                              │
   ╰───┴───╯ ╰┴───────╯   └───────────┤By BenHe├┘
  ┌┤本站站长群├────────┐          ╭            ╭    ╭   ╮
  │站长: billcho             │  ╭────┼────╮╭─┼─╭┼──┼╮
  │系统: 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所监听的服务都有其特殊的命令,例如,上述的port 25就是本机接口提供的电子邮件服务,那个服务所支持的命令就如同上面使用的数据一样,但是其他的port就不见得支持这个ehlo命令,因为不同的port有不同的程序嘛,当然支持的命令就不同了。与Mail Server有关的Telnet用法,我们将在邮件服务器内提到。
5.3.2  FTP
常常会听到FTP这个服务。如果你想要下载Linux的光盘烧录映象文件时,可以到FTP网站,它们都是FTP提供者啊。那我们要如何去下载呢?当然就是通过FTP的客户端软件了。在Linux下面,我们可以通过FTP这个软件,也可以通过下一小节会提到的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 操作系统
220-/pub/Linux/      Linux 操作系统
....(其他省略)....
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         <==提供更多的可用命令,可以常参考。
FTP> cd /pub      <==变换目录到 /pub 当中
FTP> dir          <==显示远程主机的目录内容
FTP> get file     <==下载 file 这个文件
FTP> mget file    <==下载 file 这个目录或文件
FTP> put file     <==上传 file 这个文件到服务器上
FTP> delete file  <==删除主机上的 file 这个文件
FTP> mkdir dir    <==建立 dir 这个目录
FTP> lcd /home    <==切换“本地端主机”的工作目录
FTP> passive      <==启动或关闭 passive 模式
FTP> binary       <==数据传输模式设置为 binary 格式
FTP其实是一个很麻烦的协议,因为它使用两个port分别进行命令与数据的通信,详细的内容我们会在后续的FTP服务器内详谈,这里我们先简单介绍一下如何使用FTP这个软件。首先当然需要登录了,所以在上面的代码中填入账号与密码。由于提供匿名登录,而匿名登录者的账号就是anonymous,所以直接填写那个账号即可。如果是私人的FTP,可能需要提供一组完整的账号与密码。
登录FTP主机后,就能够使用FTP软件的功能进行上传与下载的操作,几个常用的FTP内命令如上述代码所示,不过,鸟哥建议你可以连到大学的FTP网站后,使用help(或问号 ?)来查询可用的命令,然后尝试下载以测试使用一下这个命令吧。这样以后没有浏览器的时候,你也可以直接连接下载FTP了。
另外,如果由于某些原因,让你的FTP主机的port开在非正规的端口,那你就可以利用下面的方式来连接到该台主机。
[root@linux ~]# FTP hostname 318
# 假设对方主机的 FTP 服务开启在 318 这个 port 。
5.3.3  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来显示出可以执行的命令,与FTP很类似。不过多了书签的功能,而且也非常的类似于bash,这个功能很不错。除了这个好用的文本界面的FTP软件之外,事实上还有很多图形界面的好用软件呢。最常见的就是gFTP了。不但是图形界面,而且与cute FTP非常像,非常容易上手。Cent OS本身就有提供gFTP了,你可以拿出原版的光盘来安装,然后进入X Window后,启动一个Shell,输入gFTP就能够发现它的好用了。下面我们再来介绍一下实时通信吧
5.3.4  Gaim
我想,现在大家应该都知道什么是MSN、雅虎实时通以及其他的通信软件吧。那么要连上这些服务器时,该怎么处理哪?很简单,在X Window下面使用Gaim就行了,太方便了。请先进入X Window系统,然后开启一个终端机窗口,接着直接输入Gaim(请注意你必须已经安装了Gaim了),然后就会出现如图5-1所示的窗口。
图5-1 Gaim使用范例图
输入你的账号与密码,并选择相对应的实时通信服务器(如MSN或Yahoo实时通),就可以进入到如图5-2所示的界面
图5-2 Gaim使用范例图
当一切都没有问题后,按下“登录”按钮,这样就可以在Linux上使用实时通信软件了,方便得很。
5.4  文本网页浏览
什么?文本界面竟然有浏览器!别逗了好不好?呵呵!谁有那个时间在逗你。真的有这个东西,是在文本界面下上网浏览的好工具,他们分别是lynx及wget这两个宝贝,但是,你必须确定你已经安装了这两个软件才行。下面就让我们来聊一聊这两个好用的家伙吧。
5.4.1  lynx
这个命令最大的作用就是让我们在文本模式下使用这个浏览器来浏览网页。但鸟哥认为,这个文档最大的功能是查阅Linux本机上面以HTML语法写成的文件信息(Document),怎么说呢?如果你曾经在Linux本机下面的 /usr/share/doc这个目录看过文件信息的话,就会常常发现一些网页文件,使用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来设置显示的字符编码(中国台湾地区可以选择Big5编码)。
· 其他的设置可以使用上面的范例中最下面那一行的说明。
一些常见功能如下:
· h:Help,求助功能,在线说明书。
· g:Goto URL,按g后输入网页地址(URL)如: http://www.abc.edu/ 等。
· d:download,下载文件。
· q:Quit,退出lynx 。
· Ctrl+C:强迫中止lynx的执行。
· 方向键如下:
Ø 上:移动光标至本页中“上一个可链接点”。
Ø 下:移动光标至本页中“下一个可链接点”。
Ø 左: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使用范例图
当然,因为你的环境可能是在Linux本机的tty1~tty6,所以无法显示出中文,这个时候你就得要进行LANG=en_US之类的语言设置才行。而如果你常常需要浏览中文语系的网页,那就可以直接修改配置文件,例如 /etc/lynx.cfg这个文件内容:
[root@linux ~]# vi /etc/lynx.cfg
CHARACTER_SET:utf-8            <==约在 399 行
#ASSUME_CHARSET:iso-8859-1     <==约在 414 行
#PREFERRED_LANGUAGE:en         <==约在 542 行
# 你可以将它改成如下所示:
CHARACTER_SET:big5
ASSUME_CHARSET:big5
PREFERRED_LANGUAGE:zh_TW
另外,如果有时候你必须上网点选某个网站来自动取得更新时。例如,早期的自动在线更新主机名称系统,仅支持网页更新,那你如何进行更新呢?可以使用lynx!利用 -dump这个参数先处理:
[root@linux ~]# lynx -dump \
> http://some.site.name/web.php?name=user&password=pw > testfile
上面的网站后面有加个问号(?)对吧?后面接的则是利用网页的GET功能取得的各项变量数据,利用这个功能,我们就可以直接登录到该网站上了。非常方便吧。而且会将执行的结果输出到testfile文件中,不过如果网站提供的数据是以POST为主的话,那鸟哥就不知道如何搞定了。关于GET与POST的相关信息我们会在WWW服务器当中再次提及。别紧张啊。
5.4.2  wget
如果说lynx是在进行网页的“浏览”,那么wget就是在进行“网页数据的读取”。举例来说,我们的Linux核心是放置在 www.kernel.ort内,主要是同时提供FTP与HTTP下载。我们知道可以使用LFTP来下载资料,但如果想要用浏览器来下载呢?那就利用wget吧。
[root@linux ~]# wget [option] [网址]
参数:
若想要联机的网站提供账号与密码的保护,可以利用这两个参数来输入。
--http-user=usrname
--http-password=password
--quiet :不要显示 wget 在获取数据时候的显示信息
更多的参数请自行参考 man wget
范例一:请下载 2.6.17 版的核心
[root@linux ~]# wget  \
> http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
--16:06:10--  
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
           => `linux-2.6.17.tar.gz'
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51,700,445 (49M) [application/x-gzip]
 3% [==>                        ] 1,890,568    220.69K/s    ETA 04:12
你看,多好啊!不必通过浏览器,只要知道网址后,立即可以进行文件的下载,又快速又方便,还可以通过proxy的帮助来下载呢。通过修改 /etc/wgetrc来设置你的代理服务器:
[root@linux ~]# vi /etc/wgetrc
#http_proxy = http://proxy.yoyodyne.com:18023/  
<==找到下面这几行,大约在 78 行
#FTP_proxy = http://proxy.yoyodyne.com:18023/
#use_proxy = on
# 将它改成类似下面的模样,记得,你需要有可接受的 proxy 主机才行
http_proxy = http://proxy.ncku.edu.tw:3128/
use_proxy = no
5.4.2  wget
如果说lynx是在进行网页的“浏览”,那么wget就是在进行“网页数据的读取”。举例来说,我们的Linux核心是放置在 www.kernel.ort内,主要是同时提供FTP与HTTP下载。我们知道可以使用LFTP来下载资料,但如果想要用浏览器来下载呢?那就利用wget吧。
[root@linux ~]# wget [option] [网址]
参数:
若想要联机的网站提供账号与密码的保护,可以利用这两个参数来输入。
--http-user=usrname
--http-password=password
--quiet :不要显示 wget 在获取数据时候的显示信息
更多的参数请自行参考 man wget
范例一:请下载 2.6.17 版的核心
[root@linux ~]# wget  \
> http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
--16:06:10--  
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
           => `linux-2.6.17.tar.gz'
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51,700,445 (49M) [application/x-gzip]
 3% [==>                        ] 1,890,568    220.69K/s    ETA 04:12
你看,多好啊!不必通过浏览器,只要知道网址后,立即可以进行文件的下载,又快速又方便,还可以通过proxy的帮助来下载呢。通过修改 /etc/wgetrc来设置你的代理服务器:
[root@linux ~]# vi /etc/wgetrc
#http_proxy = http://proxy.yoyodyne.com:18023/  
<==找到下面这几行,大约在 78 行
#FTP_proxy = http://proxy.yoyodyne.com:18023/
#use_proxy = on
# 将它改成类似下面的模样,记得,你需要有可接受的 proxy 主机才行
http_proxy = http://proxy.ncku.edu.tw:3128/
use_proxy = no

0

收藏

gongzhi

20篇文章,2W+人气,0粉丝

Ctrl+Enter 发布

发布

取消

f92360e227f9d91cdff7ea95120630ef.png
left-qr.jpg

扫一扫,领取大礼包

0

分享
qr-url?url=https%3A%2F%2Fblog.51cto.com%2F709655%2F167748
gongzhi
noavatar_middle.gif