netstat
2014-03-13 14:08:20 阿炯

netstat是一个用于监控进出网络的包和网络接口统计的命令行工具。它是一个非常有用的工具,系统管理员可以用来监控网络性能,定位并解决网络相关问题。

netstat (network statistics) is a command line tool for monitoring network connections both incoming and outgoing as well as viewing routing tables, interface statistics etc. netstat is available on all Unix-like Operating Systems and also available on Windows OS as well. It is very useful in terms of network troubleshooting and performance measurement. netstat is one of the most basic network service debugging tools, telling you what ports are open and whether any programs are listening on ports.


功能说明:Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

语  法:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。

参  数:
-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 –s
本选项能够按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。

·netstat –e
本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。

·netstat –r
本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。

·netstat –a
本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请(LISTENING)的那些连接。

·netstat –n
显示所有已建立的有效连接。

下面列出20个相关的示例,以供参考。

1.列出掁侦听的tcp与udp端口
Listing all ports (both TCP and UDP) using netstat -a option.
# netstat -a | more

2.列出tcp端口的连接
Listing only TCP (Transmission Control Protocol) port connections using netstat -at.
# netstat -at

3.列出udp端口连接
Listing only UDP (User Datagram Protocol ) port connections using netstat -au.
# netstat -au

4.列出所有侦听的连接
Listing all active listening ports connections with netstat -l.
# netstat -l

5.列出所有侦听的tcp端口
Listing all active listening TCP ports by using option netstat -lt.
# netstat -lt

6.列出所有侦听的udp端口
Listing all active listening UDP ports by using option netstat -lu.
# netstat -lu

7.列出所有的unix socket服务
Listing all active UNIX listening ports using netstat -lx.
# netstat -lx

8.按协议进行统计
Displays statistics by protocol. By default, statistics are shown for the TCP, UDP, ICMP, and IP protocols. The -s parameter can be used to specify a set of protocols.
# netstat -s

9.按tcp协议进行统计
Showing statistics of only TCP protocol by using option netstat -st.
# netstat -st

10.按udp协议进行统计
# netstat -su

11.列出服务名称及其pid
Displaying service name with their PID number, using option netstat -tp will display “PID/Program Name”.
# netstat -tp

12.以混合模式列出
Displaying Promiscuous mode with -ac switch, netstat print the selected information or refresh screen every five second. Default screen refresh in every second.
# netstat -ac 5 | grep tcp

13.列出内核中的ip路由
Display Kernel IP routing table with netstat and route command.
# netstat -r

14.列出网卡传输统计
Showing network interface packet transactions including both transferring and receiving packets with MTU size.
# netstat -i

15.列出内核接口列表
Showing Kernel interface table, similar to ifconfig command.
# netstat -ie

16.列出ipv4与ipv6信息
Displays multicast group membership information for both IPv4 and IPv6.
# netstat -g

17.连续列出netstat信息
To get netstat information every few second, then use the following command, it will print netstat information continuously, say every few seconds.
# netstat -c

18.发现不支持的地址族
Finding un-configured address families with some useful information.
# netstat --verbose

19.取得侦听程序
Find out how many listening programs running on a port.
# netstat -ap | grep http

20.显示原始网络统计
# netstat --statistics --raw

下图为其所能被替换的用例:


Widows下netstat命令使用参考

怎样查别人的IP?怎样查自己的IP呢?我系统的哪些段口是开的?我怎样知道我的系统与外部ip的连接情况?其实这些问题还有一些相似的问题有一个简单的答案:Netstat命令,微软公司故意将这个功能强大的命令隐藏起来是因为它对于普通用户来说有些复杂。

命令状态

用netstat -a -n命令查看!再stat下面有一些英文,我来简单说一下这些英文具体都代表什么
LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态

Netstat可以在cmd命令窗口下打开。大多数Windows用户的默认目录是Windows目录,如果不是,上面的命令将打开Windows目录。我们要先知道Netstat是到底用来做什么的,它可以用来获得你的系统网络连接的信息使用的端口,在使用的协议等,收到和发出的数据,被连接的远程系统的端口,Netstat在内存中读取所有的网络信息。 

在Internet RFC标准中,Netstat的定义是:Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 

常用参数

-A 显示任何关联的协议控制块的地址。主要用于调试 
-a 显示所有套接字的状态。在一般情况下不显示与服务器进程相关联的套接字
-i 显示自动配置接口的状态。那些在系统初始引导后配置的接口状态不在输出之列 
-m 打印网络存储器的使用情况 
-n 打印实际地址,而不是对地址的解释或者显示主机,网络名之类的符号 
-r 打印路由选择表 
-f address -family对于给出名字的地址簇打印统计数字和控制块信息。到目前为止,唯一支持的地址簇是inet 
-I interface 只打印给出名字的接口状态 
-p protocol-name 只打印给出名字的协议的统计数字和协议控制块信息 
-s 打印每个协议的统计数字 
-t 在输出显示中用时间信息代替队列长度信息。 

命令行的列标题
Name 接口的名字
Mtu 接口的最大传输单位
Net/Dest 接口所在的网络
Address 接口的IP地址
Ipkts 接收到的数据包数目
Ierrs 接收到时已损坏的数据包数目
Opkts 发送的数据包数目
Oeers 发送时已损坏的数据包数目
Collisions 由这个接口所记录的网络冲突数目

现在我们在对Netstat有了一定的了解之后就可以来使用它了,如果你打开了cmd窗口,你可以用以下命令来获取有关Netstat的帮助信息。

C:>netstat /?
-a Displays all connections and listening ports. (Server-side connections are normally not shown).
-e Displays Ethernet statistics. This may be combined with the -s option.#
-n Displays addresses and port numbers in numerical form.
-p proto Shows connections for the protocol specified by proto; proto may be tcp or udp. If used with the -s option to display per-protocol statistics, proto may be tcp, udp, or ip.
-r Displays the contents of the routing table.
-s Displays per-protocol statistics. By default, statistics are shown for TCP, UDP and IP; the -p

option may be used to specify a subset of the default.interval Redisplays selected statistics, pausing interval seconds between each display. Press CTRL+C to stop redisplaying statistics. If omitted, netstat will print the current configuration information once.

以上的信息仅仅是个参考,对于好奇心很强的您来说,是远远不够的。那好,让我们试试每个命令并查看结果,用来理解当我们执行命令后发生了什么,显示出的信息是什么意思?

首先,我们使用Netstat的-a参数命令。

-a参数用来显示在本地机器上的外部连接,它也显示我们远程所连接的系统,本地和远程系统连接时使用的端口,和本地和远程系统连接的状态。

例子:
C:\>netstat -a
Active Connections
Proto Local Address Foreign Address State
TCP ankit:1031 dwarfie.freeoa.net:ftp ESTABLISHED
TCP ankit:1036 dwarfie.freeoa.net:ftp-data TIME_WAIT
TCP ankit:1043 banners.egroups.com:80 FIN_WAIT_2
TCP ankit:1045 mail2.mtnl.net.in:pop3 TIME_WAIT
TCP ankit:1052 www.freeoa.net:80 ESTABLISHED
TCP ankit:1053 mail2.mtnl.net.in:pop3 TIME_WAIT
UDP ankit:1025 *:*
UDP ankit:nbdatagram *:*

我们有其中一行来讲解:
Proto Local Address Foreign Address State
TCP ankit:1031 dwarfie.freeoa.net:ftp ESTABLISHED
协议Proto:TCP是否用详细讲解,请来信
本地机器名Local Address:ankit这个是您在安装系统时自设的,本地打开并用于连接的端口:1031
远程机器名Foreign Address:dwarfie.freeoa.net
远程端口:ftp
状态:ESTABLISHED


该文章最后由 阿炯 于 2022-09-03 22:25:58 更新,目前是第 2 版。