Linux的网络测试命令(转载)

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值
网络接口
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 2二、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

0javascript

收藏html

gongzhi

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

Ctrl+Enter 发布java

发布node

取消linux

推荐专栏更多

带你玩转高可用

前百度高级工程师的架构高可用实战

共15章 | 曹林华

¥51.00 516人订阅
负载均衡高手炼成记

高并发架构之路

共15章 | sery

¥51.00 588人订阅
VMware vSAN中小企业应用案例

掌握VMware超融合技术

共41章 | 王春海

¥51.00 442人订阅
基于Kubernetes企业级容器云平台落地与实践

容器私有云平台实践之路

共15章 | 李振良OK

¥51.00 711人订阅
网工2.0晋级攻略 ——零基础入门Python/Ansible

网络工程师2.0进阶指南

共30章 | 姜汁啤酒

¥51.00 1993人订阅

扫一扫,领取大礼包

0

分享
gongzhi
相关文章
相关标签/搜索