547 lines
18 KiB
Markdown
547 lines
18 KiB
Markdown
---
|
||
title: linux 常用命令-网络应用
|
||
date: 2018/02/28
|
||
categories:
|
||
- linux
|
||
tags:
|
||
- linux
|
||
- command
|
||
---
|
||
|
||
# linux 常用命令-网络应用
|
||
|
||
## host
|
||
|
||
常用的分析域名查询工具
|
||
|
||
### 补充说明
|
||
|
||
**host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
|
||
|
||
### 语法
|
||
|
||
```
|
||
host(选项)(参数)
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
-a:显示详细的DNS信息;
|
||
-c<类型>:指定查询类型,默认值为“IN“;
|
||
-C:查询指定主机的完整的SOA记录;
|
||
-r:在查询域名时,不使用递归的查询方式;
|
||
-t<类型>:指定查询的域名信息类型;
|
||
-v:显示指令执行的详细信息;
|
||
-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;
|
||
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
|
||
-4:使用IPv4;
|
||
-6:使用IPv6.
|
||
```
|
||
|
||
### 参数
|
||
|
||
主机:指定要查询信息的主机信息。
|
||
|
||
### 实例
|
||
|
||
```
|
||
[root@localhost ~]# host www.jsdig.com
|
||
www.jsdig.com is an alias for host.1.jsdig.com.
|
||
host.1.jsdig.com has address 100.42.212.8
|
||
|
||
[root@localhost ~]# host -a www.jsdig.com
|
||
Trying "www.jsdig.com"
|
||
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34671
|
||
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
|
||
|
||
;; QUESTION SECTION:
|
||
;www.jsdig.com. IN ANY
|
||
|
||
;; ANSWER SECTION:
|
||
www.jsdig.com. 463 IN CNAME host.1.jsdig.com.
|
||
|
||
Received 54 bytes from 202.96.104.15#53 in 0 ms
|
||
```
|
||
|
||
## nslookup
|
||
|
||
查询域名DNS信息的工具
|
||
|
||
### 补充说明
|
||
|
||
**nslookup命令** 是常用域名查询工具,就是查DNS信息用的命令。
|
||
|
||
nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
|
||
|
||
进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即`/etc/resolv.conf`的第一个dns地址)。或者输入`nslookup -nameserver/ip`。进入非交互模式,就直接输入`nslookup 域名`就可以了。
|
||
|
||
### 语法
|
||
|
||
```
|
||
nslookup(选项)(参数)
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
-sil:不显示任何警告信息。
|
||
```
|
||
|
||
### 参数
|
||
|
||
域名:指定要查询域名。
|
||
|
||
### 实例
|
||
|
||
```
|
||
[root@localhost ~]# nslookup www.jsdig.com
|
||
Server: 202.96.104.15
|
||
Address: 202.96.104.15#53
|
||
|
||
Non-authoritative answer:
|
||
www.jsdig.com canonical name = host.1.jsdig.com.
|
||
Name: host.1.jsdig.com
|
||
Address: 100.42.212.8
|
||
```
|
||
|
||
## nc/netcat
|
||
|
||
命令用于设置路由器。
|
||
|
||
### 补充说明
|
||
|
||
**nc命令** 用于设置路由器。执行本指令可设置路由器的相关参数。
|
||
|
||
### 语法
|
||
|
||
```
|
||
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
|
||
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
-g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。
|
||
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
|
||
-h 在线帮助。
|
||
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
|
||
-l 使用监听模式,管控传入的资料。
|
||
-n 直接使用IP地址,而不通过域名服务器。
|
||
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
|
||
-p<通信端口> 设置本地主机使用的通信端口。
|
||
-r 乱数指定本地与远端主机的通信端口。
|
||
-s<来源位址> 设置本地主机送出数据包的IP地址。
|
||
-u 使用UDP传输协议。
|
||
-v 显示指令执行过程。
|
||
-w<超时秒数> 设置等待连线的时间。
|
||
-z 使用0输入/输出模式,只在扫描通信端口时使用。
|
||
```
|
||
|
||
### 实例
|
||
|
||
TCP端口扫描
|
||
|
||
```
|
||
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
|
||
192.168.0.3: inverse host lookup failed: Unknown host
|
||
(UNKNOWN) [192.168.0.3] 80 (http) open
|
||
(UNKNOWN) [192.168.0.3] 23 (telnet) open
|
||
(UNKNOWN) [192.168.0.3] 22 (ssh) open
|
||
```
|
||
|
||
扫描192.168.0.3 的端口 范围是 1-100
|
||
扫描UDP端口
|
||
|
||
```
|
||
[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
|
||
```
|
||
|
||
扫描指定端口
|
||
|
||
```
|
||
[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口
|
||
(UNKNOWN) [192.168.0.1] 80 (?) open
|
||
y //用户输入
|
||
```
|
||
|
||
## dig
|
||
|
||
域名查询工具
|
||
|
||
### 补充说明
|
||
|
||
**dig命令** 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
|
||
|
||
### 语法
|
||
|
||
```
|
||
dig(选项)(参数)
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
@<服务器地址>:指定进行域名解析的域名服务器;
|
||
-b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
|
||
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
|
||
-P:指定域名服务器所使用端口号;
|
||
-t<类型>:指定要查询的DNS数据类型;
|
||
-x<IP地址>:执行逆向域名查询;
|
||
-4:使用IPv4;
|
||
-6:使用IPv6;
|
||
-h:显示指令帮助信息。
|
||
```
|
||
|
||
### 参数
|
||
|
||
* 主机:指定要查询域名主机;
|
||
* 查询类型:指定DNS查询的类型;
|
||
* 查询类:指定查询DNS的class;
|
||
* 查询选项:指定查询选项。
|
||
|
||
### 实例
|
||
|
||
```
|
||
[root@localhost ~]# dig www.jsdig.com
|
||
|
||
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com
|
||
;; global options: printcmd
|
||
;; Got answer:
|
||
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115
|
||
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
|
||
|
||
;; QUESTION SECTION:
|
||
;www.jsdig.com. IN A
|
||
|
||
;; ANSWER SECTION:
|
||
www.jsdig.com. 0 IN CNAME host.1.jsdig.com.
|
||
host.1.jsdig.com. 0 IN A 100.42.212.8
|
||
|
||
;; AUTHORITY SECTION:
|
||
jsdig.com. 8 IN NS f1g1ns2.dnspod.net.
|
||
jsdig.com. 8 IN NS f1g1ns1.dnspod.net.
|
||
|
||
;; Query time: 0 msec
|
||
;; SERVER: 202.96.104.15#53(202.96.104.15)
|
||
;; WHEN: Thu Dec 26 11:14:37 2013
|
||
;; MSG SIZE rcvd: 121
|
||
```
|
||
|
||
## ping
|
||
|
||
测试主机之间网络的连通性
|
||
|
||
### 补充说明
|
||
|
||
**ping命令** 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
|
||
|
||
### 语法
|
||
|
||
```
|
||
ping(选项)(参数)
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
-d:使用Socket的SO_DEBUG功能;
|
||
-c<完成次数>:设置完成要求回应的次数;
|
||
-f:极限检测;
|
||
-i<间隔秒数>:指定收发信息的间隔时间;
|
||
-I<网络界面>:使用指定的网络界面送出数据包;
|
||
-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;
|
||
-n:只输出数值;
|
||
-p<范本样式>:设置填满数据包的范本样式;
|
||
-q:不显示指令执行过程,开头和结尾的相关信息除外;
|
||
-r:忽略普通的Routing Table,直接将数据包送到远端主机上;
|
||
-R:记录路由过程;
|
||
-s<数据包大小>:设置数据包的大小;
|
||
-t<存活数值>:设置存活数值TTL的大小;
|
||
-v:详细显示指令的执行过程。
|
||
```
|
||
|
||
### 参数
|
||
|
||
目的主机:指定发送ICMP报文的目的主机。
|
||
|
||
### 实例
|
||
|
||
```
|
||
[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
|
||
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
|
||
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
|
||
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=2 ttl=50 time=178 ms
|
||
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=3 ttl=50 time=174 ms
|
||
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=4 ttl=50 time=177 ms
|
||
...按Ctrl+C结束
|
||
|
||
--- host.1.jsdig.com ping statistics ---
|
||
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
|
||
rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
|
||
```
|
||
|
||
## traceroute
|
||
|
||
显示数据包到主机间的路径
|
||
|
||
### 补充说明
|
||
|
||
**traceroute命令** 用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。
|
||
|
||
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
|
||
|
||
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
|
||
|
||
### 语法
|
||
|
||
```
|
||
traceroute(选项)(参数)
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
-d:使用Socket层级的排错功能;
|
||
-f<存活数值>:设置第一个检测数据包的存活数值TTL的大小;
|
||
-F:设置勿离断位;
|
||
-g<网关>:设置来源路由网关,最多可设置8个;
|
||
-i<网络界面>:使用指定的网络界面送出数据包;
|
||
-I:使用ICMP回应取代UDP资料信息;
|
||
-m<存活数值>:设置检测数据包的最大存活数值TTL的大小;
|
||
-n:直接使用IP地址而非主机名称;
|
||
-p<通信端口>:设置UDP传输协议的通信端口;
|
||
-r:忽略普通的Routing Table,直接将数据包送到远端主机上。
|
||
-s<来源地址>:设置本地主机送出数据包的IP地址;
|
||
-t<服务类型>:设置检测数据包的TOS数值;
|
||
-v:详细显示指令的执行过程;
|
||
-w<超时秒数>:设置等待远端主机回报的时间;
|
||
-x:开启或关闭数据包的正确性检验。
|
||
```
|
||
|
||
### 参数
|
||
|
||
主机:指定目的主机IP地址或主机名。
|
||
|
||
### 实例
|
||
|
||
```
|
||
traceroute www.58.com
|
||
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
|
||
1 unknown (192.168.2.1) 3.453 ms 3.801 ms 3.937 ms
|
||
2 221.6.45.33 (221.6.45.33) 7.768 ms 7.816 ms 7.840 ms
|
||
3 221.6.0.233 (221.6.0.233) 13.784 ms 13.827 ms 221.6.9.81 (221.6.9.81) 9.758 ms
|
||
4 221.6.2.169 (221.6.2.169) 11.777 ms 122.96.66.13 (122.96.66.13) 34.952 ms 221.6.2.53 (221.6.2.53) 41.372 ms
|
||
5 219.158.96.149 (219.158.96.149) 39.167 ms 39.210 ms 39.238 ms
|
||
6 123.126.0.194 (123.126.0.194) 37.270 ms 123.126.0.66 (123.126.0.66) 37.163 ms 37.441 ms
|
||
7 124.65.57.26 (124.65.57.26) 42.787 ms 42.799 ms 42.809 ms
|
||
8 61.148.146.210 (61.148.146.210) 30.176 ms 61.148.154.98 (61.148.154.98) 32.613 ms 32.675 ms
|
||
9 202.106.42.102 (202.106.42.102) 44.563 ms 44.600 ms 44.627 ms
|
||
10 210.77.139.150 (210.77.139.150) 53.302 ms 53.233 ms 53.032 ms
|
||
11 211.151.104.6 (211.151.104.6) 39.585 ms 39.502 ms 39.598 ms
|
||
12 211.151.111.30 (211.151.111.30) 35.161 ms 35.938 ms 36.005 ms
|
||
```
|
||
|
||
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是`-q`的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用`traceroute -q 4 www.58.com`,表示向每个网关发送4个数据包。
|
||
|
||
有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
|
||
|
||
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加`-n`参数来避免DNS解析,以IP格式输出数据。
|
||
|
||
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
|
||
|
||
**跳数设置**
|
||
|
||
```
|
||
[root@localhost ~]# traceroute -m 10 www.baidu.com
|
||
traceroute to www.baidu.com (61.135.169.105), 10 hops max, 40 byte packets
|
||
1 192.168.74.2 (192.168.74.2) 1.534 ms 1.775 ms 1.961 ms
|
||
2 211.151.56.1 (211.151.56.1) 0.508 ms 0.514 ms 0.507 ms
|
||
3 211.151.227.206 (211.151.227.206) 0.571 ms 0.558 ms 0.550 ms
|
||
4 210.77.139.145 (210.77.139.145) 0.708 ms 0.729 ms 0.785 ms
|
||
5 202.106.42.101 (202.106.42.101) 7.978 ms 8.155 ms 8.311 ms
|
||
6 bt-228-037.bta.net.cn (202.106.228.37) 772.460 ms bt-228-025.bta.net.cn (202.106.228.25) 2.152 ms 61.148.154.97 (61.148.154.97) 772.107 ms
|
||
7 124.65.58.221 (124.65.58.221) 4.875 ms 61.148.146.29 (61.148.146.29) 2.124 ms 124.65.58.221 (124.65.58.221) 4.854 ms
|
||
8 123.126.6.198 (123.126.6.198) 2.944 ms 61.148.156.6 (61.148.156.6) 3.505 ms 123.126.6.198 (123.126.6.198) 2.885 ms
|
||
9 * * *
|
||
10 * * *
|
||
```
|
||
|
||
其它一些实例
|
||
|
||
```
|
||
traceroute -m 10 www.baidu.com # 跳数设置
|
||
traceroute -n www.baidu.com # 显示IP地址,不查主机名
|
||
traceroute -p 6888 www.baidu.com # 探测包使用的基本UDP端口设置6888
|
||
traceroute -q 4 www.baidu.com # 把探测包的个数设置为值4
|
||
traceroute -r www.baidu.com # 绕过正常的路由表,直接发送到网络相连的主机
|
||
traceroute -w 3 www.baidu.com # 把对外发探测包的等待响应时间设置为3秒
|
||
```
|
||
|
||
## netstat
|
||
|
||
查看Linux中网络系统状态信息
|
||
|
||
### 补充说明
|
||
|
||
**netstat命令** 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
|
||
|
||
### 语法
|
||
|
||
```
|
||
netstat(选项)
|
||
```
|
||
|
||
### 选项
|
||
|
||
```
|
||
-a或--all:显示所有连线中的Socket;
|
||
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
|
||
-c或--continuous:持续列出网络状态;
|
||
-C或--cache:显示路由器配置的快取信息;
|
||
-e或--extend:显示网络其他相关信息;
|
||
-F或--fib:显示FIB;
|
||
-g或--groups:显示多重广播功能群组组员名单;
|
||
-h或--help:在线帮助;
|
||
-i或--interfaces:显示网络界面信息表单;
|
||
-l或--listening:显示监控中的服务器的Socket;
|
||
-M或--masquerade:显示伪装的网络连线;
|
||
-n或--numeric:直接使用ip地址,而不通过域名服务器;
|
||
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
|
||
-o或--timers:显示计时器;
|
||
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
|
||
-r或--route:显示Routing Table;
|
||
-s或--statistice:显示网络工作信息统计表;
|
||
-t或--tcp:显示TCP传输协议的连线状况;
|
||
-u或--udp:显示UDP传输协议的连线状况;
|
||
-v或--verbose:显示指令执行过程;
|
||
-V或--version:显示版本信息;
|
||
-w或--raw:显示RAW传输协议的连线状况;
|
||
-x或--unix:此参数的效果和指定"-A unix"参数相同;
|
||
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
|
||
```
|
||
|
||
### 实例
|
||
|
||
**列出所有端口 (包括监听和未监听的)**
|
||
|
||
```
|
||
netstat -a #列出所有端口
|
||
netstat -at #列出所有tcp端口
|
||
netstat -au #列出所有udp端口
|
||
```
|
||
|
||
**列出所有处于监听状态的 Sockets**
|
||
|
||
```
|
||
netstat -l #只显示监听端口
|
||
netstat -lt #只列出所有监听 tcp 端口
|
||
netstat -lu #只列出所有监听 udp 端口
|
||
netstat -lx #只列出所有监听 UNIX 端口
|
||
```
|
||
|
||
**显示每个协议的统计信息**
|
||
|
||
```
|
||
netstat -s 显示所有端口的统计信息
|
||
netstat -st 显示TCP端口的统计信息
|
||
netstat -su 显示UDP端口的统计信息
|
||
|
||
```
|
||
|
||
**在netstat输出中显示 PID 和进程名称**
|
||
|
||
```
|
||
netstat -pt
|
||
```
|
||
|
||
`netstat -p`可以与其它开关一起使用,就可以添加“PID/进程名称”到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。
|
||
|
||
**在netstat输出中不显示主机,端口和用户名(host, port or user)**
|
||
|
||
当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。
|
||
|
||
```
|
||
netstat -an
|
||
```
|
||
|
||
如果只是不想让这三个名称中的一个被显示,使用以下命令:
|
||
|
||
```
|
||
netsat -a --numeric-ports
|
||
netsat -a --numeric-hosts
|
||
netsat -a --numeric-users
|
||
```
|
||
|
||
**持续输出netstat信息**
|
||
|
||
```
|
||
netstat -c #每隔一秒输出网络信息
|
||
```
|
||
|
||
**显示系统不支持的地址族(Address Families)**
|
||
|
||
```
|
||
netstat --verbose
|
||
```
|
||
|
||
在输出的末尾,会有如下的信息:
|
||
|
||
```
|
||
netstat: no support for `AF IPX' on this system.
|
||
netstat: no support for `AF AX25' on this system.
|
||
netstat: no support for `AF X25' on this system.
|
||
netstat: no support for `AF NETROM' on this system.
|
||
```
|
||
|
||
**显示核心路由信息**
|
||
|
||
```
|
||
netstat -r
|
||
```
|
||
|
||
使用`netstat -rn`显示数字格式,不查询主机名称。
|
||
|
||
**找出程序运行的端口**
|
||
|
||
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
|
||
|
||
```
|
||
netstat -ap | grep ssh
|
||
```
|
||
|
||
找出运行在指定端口的进程:
|
||
|
||
```
|
||
netstat -an | grep ':80'
|
||
```
|
||
|
||
**显示网络接口列表**
|
||
|
||
```
|
||
netstat -i
|
||
```
|
||
|
||
显示详细信息,像是ifconfig使用`netstat -ie`。
|
||
|
||
**IP和TCP分析**
|
||
|
||
查看连接某服务端口最多的的IP地址:
|
||
|
||
```
|
||
netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr
|
||
```
|
||
|
||
TCP各种状态列表:
|
||
|
||
```
|
||
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
|
||
```
|
||
|
||
查看phpcgi进程数,如果接近预设值,说明不够用,需要增加:
|
||
|
||
```
|
||
netstat -anpo | grep "php-cgi" | wc -l
|
||
```
|