netstat命令显示各种网络相关信息,例如网络连接、路由表、接口统计信息、伪装连接、多播成员身份等。
netstat打印的信息类型由第一个参数控制,该参数是以下参数之一:
(none): 默认情况下,netstat显示打开的套接字列表,如果未指定任何地址族,则将打印所有已配置地址族的活动套接字。--route, -r: 显示内核路由表,netstat -r和route -e产生相同的输出。--groups, -g: 显示IPv4和IPv6的多播组成员身份信息。--interfaces, -i: 显示所有网络接口的表。--masquerade, -M: 显示伪装的连接列表。--statistics, -s: 显示每个协议的摘要统计信息。在第一个参数之后,以下选项指定netstat的报告行为:
--verbose, -v: 通过详细操作告诉用户发生了什么,特别是打印一些有关未配置地址族的有用信息。--wide, -W: 使用指定宽度而不根据使用输出来截断IP地址,为了不破坏现有的脚本,这是可选的。--numeric, -n: 显示数字地址,而不是尝试确定符号主机、端口或用户名。--numeric-hosts: 显示数字主机地址,但不影响端口或用户名的解析。--numeric-ports: 显示数字端口号,但不影响主机名或用户名的解析。--numeric-users: 显示数字用户id,但不影响主机名或端口名的解析。--protocol=family, -A: 指定要显示其连接的地址族(低级协议),该族是逗号分隔的地址族关键字列表,如inet、unix、ipx、ax25、netrom和ddp,这与使用--inet、-unix(-x)、-ipx、-ax25、-netrom和--ddp选项具有相同的效果,地址族inet包括raw、udp和tcp协议套接字。-c, --continuous: 使netstat每秒连续打印所选信息。-e, --extend: 显示附加信息,使用此选项两次以获得最大细节。-o, --timers: 包括与网络计时器相关的信息。-p, --program: 显示PID进程标识符和每个套接字所属的程序的名称。-l, --listening: 只显示监听套接字,这些在默认情况下被省略。-a, --all: 显示监听和非监听套接字,使用--interfaces选项显示未启动的接口。-F: 从FIB打印路由信息,这是默认设置。-C: 从路由缓存中打印路由信息。关于活跃的互联网连接TCP、UDP、raw的信息属于以下类别:
Proto: 套接字使用的协议tcp、udp、raw。Recv-Q: 连接到此套接字的用户程序未复制的字节数。Send-Q: 远程主机未确认的字节数。Local Address: 套接字本地端的地址和端口号,除非指定了--numeric, -n选项,否则套接字地址将解析为其规范的主机名FQDN,并且端口号将转换为相应的服务名。Foreign Address: 套接字远端的地址和端口号,类似于本地地址。State: socket的状态,由于在原始套接字raw模式中没有状态,而且UDP中通常没有使用状态,因此这一列可以留空,通常这可以是以下值之一,TCP握手与挥手的过程中通常会经历这些状态。
ESTABLISHED: 套接字已建立连接。SYN_SENT: 套接字正在积极尝试建立连接。SYN_RECV: 从网络接收到连接请求。FIN_WAIT1: 套接字已关闭,连接正在关闭。FIN_WAIT2: 连接已关闭,套接字正在等待从远端关闭。TIME_WAIT: 套接字在关闭后正在等待处理仍在网络中的数据包。CLOSE: 没有使用该套接字。CLOSE_WAIT: 远端已关闭,等待套接字关闭。LAST_ACK: 远端已经关闭,套接字已关闭,等待确认。LISTEN: 套接字正在监听传入的连接,除非指定--listening, -l或--all, -a选项,否则此类套接字不包含在输出中。CLOSING: 两个套接字都关闭了,但我们仍然没有发送所有的数据。UNKNOWN: 套接字的状态未知。User: 套接字所有者的用户名或用户ID(UID)。PID/Program name: 进程ID(PID)和拥有套接字的进程的进程名称之间用斜杠分隔,--program使该列包括在内,需要超级用户特权才能在不拥有的套接字上查看此信息,此标识信息尚不适用于IPX套接字。有关活动UNIX域套接字的信息属于以下类别:
Proto: 套接字使用的协议,通常是unix。
RefCnt: 引用计数,即通过此套接字连接的进程。
Flags: 显示的标志是SO_ACCEPTON显示为ACC,SO_WAITDATA(W)或SO_NOSPACE(N),如果未连接的套接字的相应进程正在等待连接请求,则在未连接的套接字上使用SO_ACCECPTON,其他标志不是正常的关注点。
Type: 套接字访问有几种类型:
SOCK_DGRAM: 套接字用于数据报(无连接)模式。SOCK_STREAM: 这是一个流(连接)套接字。SOCK_RAW: 该套接字用作原始套接字。SOCK_RDM: 这个服务提供可靠的消息传递。SOCK_SEQPACKET: 这是一个顺序数据包套接字。SOCK_PACKET: 原始接口访问套接字。State: 该字段将包含以下关键字之一:
FREE: 未分配套接字。LISTENING:套接字正在监听连接请求,仅当指定--listening, -l或--all, -a选项时,此类套接字才会包含在输出中。CONNECTING: 套接字即将建立连接。CONNECTED: 套接字已连接。DISCONNECTING: 套接字正在断开连接。(empty): 该套接字未连接到另一套接字。PID/Program name:打开套接字的进程的进程ID(PID)和进程名称。
Path: 这是相应进程附加到套接字的路径名。
Active IPX sockets: 活动IPX套接字的列表。
Active NET/ROM sockets: 活动NET/ROM套接字的列表。
Active AX.25 sockets: 活动AX.25套接字的列表。
netstat使用以下文件:
/etc/services: 服务转换文件。/proc: proc文件系统的挂载点,它以文件层次结构的形式提供对内核状态信息的访问。/proc/net/dev: 设备信息文件。/proc/net/raw: 原始套接字信息。/proc/net/tcp: TCP套接字信息。/proc/net/udp: UDP套接字信息。/proc/net/igmp: IGMP多播信息。/proc/net/unix: Unix域套接字信息。/proc/net/ipx: IPX套接字信息。/proc/net/ax25: AX25套接字信息。/proc/net/appletalk: DDP(appletalk)套接字信息。/proc/net/nr: NET/ROM套接字信息。/proc/net/route: IP路由信息。/proc/net/ax25_route: AX25路由信息。/proc/net/ipx_route: IPX路由信息。/proc/net/nr_nodes: NET/ROM节点列表。/proc/net/nr_neigh: NET/ROM邻居。/proc/net/ip_masquerade: 伪装的连接。/proc/net/snmp: 统计。显示所有listening与non-listening的套接字,并使用管道和less便于查看当前状态。
列出所有TCP端口。
列出所有udp端口。
仅列出侦听端口。
列出所有端口的统计信息。
显示使用TCP的PID和程序名。
获取内核路由信息。
获取与ssh相关的进程的网络信息。
获取80端口的网路状态信息。
获取网络接口列表。
获取网络接口列表与拓展信息。
配合awk命令获取TCP套接字的状态统计信息。