amethystqi 2017-02-27
netstat: 打印网络连接,路由表,接口统计信息,多播成员
netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--ver‐ bose|-v] [--continuous|-c] netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c] netstat {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--program|-p] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c] netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c] netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c] netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w] netstat {--version|-V} netstat {--help|-h} address_family_options: [-4] [-6] [--protocol={inet,unix,ipx,ax25,netrom,ddp}[,...]] [--unix|-x] [--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]
与路由 (route) 有关的参数说明:
-r : 列出路由表(route table),功能如同 route 这个指令[route -e]; -n : 不使用主机名与服务名称,使用 IP 与 port number ,如同 route -n
与网络接口有关的参数:
-a : 列出所有的联机状态,包括 tcp/udp/unix socket 等; -t : 仅列出 TCP 协议的连接情况; -u : 仅列出 UDP 协议的情况; -l : 仅列出有在 Listen (监听) 的服务之网络状态; -p : 列出建立相关连接的 PID 与 Program 名; -c : 可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网络状态的显示; -i : 显示所有网络接口的信息,格式“netstat -i”。
其他选项:
-v : 显示正在进行的工作。 -b : 显示在创建每个连接或侦听端口时涉及的可执行程序。 -e : 显示以太网统计。此选项可以与 -s 选项结合使用。 -f : 显示外部地址的完全限定域名(FQDN)。 -o : 显示与每个连接相关的所属进程ID。 -s : 显示每个协议的统计。 -x : 显示 NetworkDirect 连接、侦听器和共享端点。 -y : 显示所有连接的 TCP 连接模板。无法与其他选项结合使用。
输出:
Proto : 协议 Recv-Q : 非由用户程序连接所复制而来的总 bytes 数[不大理解] Send-Q : 来自远程主机不包含ack标志的总bytes数.[意指主动联机 SYN 或其他标志的封包所占的 bytes 数] Local Address : 本地端的地址,可以是 IP (-n 参数存在时), 也可以是完整的主机名。 使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差异。 Foreign Address : 远程的主机 IP 与 port number State : 状态. ESTABLISHED : 已建立连接. SYN_SENT : 发送一个建立连接请求. SYN_RECV : 从网络中接收到一个连接请求 FIN_WAIT1 : socket已经关闭(closed),连接正在关闭(shutting down). FIN_WAIT2: 连接已经关闭(closed),socket 等待来自远程的关闭[确认包](shutdonw) TIME_WAIT: 连接已经断开.但socket还在网络上等待结束.[主动关闭连接的一方,会在发送最后一个ack后进入TIME_WAIT状态(在四次握手中)] CLOSE : socket已经不在使用了. CLOSE_WAIT : 被动关闭时,远端已经关闭连接(发送来了FIN),本端socket还未关闭(还没有发送FIN出去); [如果出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写, 没有关闭连接。代码需要判断socket,一旦读到0,如果不是AGAIN,就断开连接。] LAST_ACK : 远端已经关闭(本端接收到远端的FIN),本端也关闭(发送了FIN),正在等待远端发来ACK. LISTEN : 正在监听新来的连接(incoming connections).通常用在服务的监听 port !可使用『 -l 』参数查阅 CLOSING : 两端socket都关闭了,但是数据还没有全部发送完. UNKNOWN : socket的状态是未知的(unknown)
ip路由表相关输出:
使用下面的 route 命令可以查看 Linux 内核路由表。Destination Gateway Genmask Flags Metric Ref Use Iface. 192.168.0.0 *