netstat

dyccsxg 2012-05-29

netstat

[功能]

netstat是一个监控TCP/IP网络的非常有用的工具.

[描述]

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态、以及网络协议相关的信息.

netstat打印的信息类型,取决于第一个参数。如下:

(none)默认,表示没有,netstat会显示打开的sockets列表.如果你没有指定地址类别,那么所有配置的地址类别的活动sockets将都会被打印出来。

-r显示内核的路由表。

-g显示IPV4,IPV6的多播组成员信息。(什么意思?)

-i显示所有的网络接口表。

-M显示一些“伪”链接。(什么意思?)

-s显示每个协议的总体统计信息。

一些选项:

-v显示一些详细的信息。

-n显示数字地址而不是尝试显示主机符号端口或者用户名称。

--numeric-hosts显示数字主机地址但是不会影响到端口和用户名的显示。

--numeric-ports显示数字端口号但是不会影响主机和用户名的显示。

--numeric-users显示数字用户ID但是不会影响主机和端口名的显示。

--protocol=family为显示的链接指定地址类型(低层次协议),这里family是用','分隔开的地址类型关键字列表,例如inet,unix,ipx,ax25,netrom,以及ddp.这样指定和直接用--inet,--unix(-x),--ipx,--ax25,--netrom和--ddp选项是一样的。

-c这样导致netstat在每个连续的秒都打印选定的信息。

-e显示额外的信息。使用这个选项两次可以显示更多的细节。

-o包含和网络计时相关的信息。

-p显示每个套接字属于的程序名称和PID.

-l只显示侦听的套接字。(默认被忽略)

-a显示侦听和没有侦听的套接字。如果有--interfaces(即前面的-i)会显示没有启动的interfaces.

-F从FIB中打印路由的信息。(默认如此)

-C打印来自路由缓存的路由信息。

-t指明显示tcp端口。

-u指明显示udp端口。

关于输出的各个字段含义:

1)对于ActiveInternetconnections(TCP,UDP,raw):

Protosocket使用的协议(tcp,udp,raw).

Recv-Q链接到这个sockets的应用程序没有拷贝的字节数目。

Send-Q没有被远程主机确认的字节数目。

LocalAddress本地socket末端的地址和端口号。如果不使用-n那么socket地址会被解释成为名字(FQDN),端口号会被解释成为相应的服务名称。

ForeignAddress远程socket末端的地址和端口号。类似LocalAddress.

State端口状态。由于raw模式中没有状态还有udp中不使用state,这一列会被设置为blank.可能值:

ESTABLISHED:socket有一个建立起来的链接。

SYN_SENT:socket是活动的,尝试建立一个链接。

SYN_RECV:从网络中接收到了一个链接请求。

FIN_WAIT1:套接字关闭,链接断开。

FIN_WAIT2:链接关闭,等待远程端的套接字断开。

TIME_WAIT:套接字在关闭之后仍旧等待,以处理还在网络上面的包。

CLOSE:套接字不用了。

CLOSE_WAIT:远程端关闭了,等待套接字关闭。

LAST_ACK:远程端关闭了,套接字也关闭了,等待确认。

LISTEN:socket侦听到来的链接,这一列在使用-l或者-a选项的时候才有。

CLOSING:两端的套接字都关闭了,但是我们还没有把我们的数据都发送出去。

UNKNOWN:未知的状态。

Usersocket拥有者的用户名或者用户ID.

PID/Programnamesocket拥有者的进程ID和进程名,用斜线分割。使用-p会显示这个列。你需要有超级用户权限来查看其他的你不拥有的socket.这个信息对于IPX的sockets不适用。

Timer(这个需要再写)

2)对于ActiveUNIXdomainSockets

Proto套接字使用的协议(unix协议).

RefCnt引用次数(也就是附加到这个套接字上面的进程).

Flagsflags的显示可以是SO_ACCEPTON(显示为ACC),SO_WAITDATA(W)或者SO_NOSPACE(N).

SO_ACCECPTON用在一个没有被链接的套接字上面(如果他们相应的进程等待一个链接请求)。

其他的flags一般不会用到。

Type有如下几种套接字访问类型:

SOCK_DGRAM:socket在数据报模式使用。(非连接的)

SOCK_STREAM:这是一个流套接字(连接).

SOCK_RAW:用于Raw套接字(什么意思?).

SOCK_RDM:用于可靠的发送消息。

SOCK_SEQPACKET:这是一个有序的包套接字。

SOCK_PACKET:Raw接口访问套接字(什么意思?).

UNKNOWN:未知.

State包含如下的关键字:

FREE:套接字没有被分配。

LISTENING:套接字等待一个连接请求。指定-l或者-a选项的时候才会输出.

CONNECTING:套接字准备建立一个连接。

CONNECTED:套接字已经连接。

DISCONNECTING:套接字正在断开连接。

(empty):套接字没有和其他者连接。

UNKNOWN:不会出现的状态。

PID/Programname打开套接字的进程的进程号和进程名。参见ActiveInternetconnections.

Path相应的进程附加到套接字的路径名。

ActiveIPXsockets这里需要由其他知道这的人来做。

ActiveNET/ROMsockets这里需要由其他知道这的人来做。

ActiveAX.25sockets这里需要由其他知道这的人来做。

3)其他相关的文件:

/etc/services用于转换服务的文件。

/proc/net/这里有许多文件需要用它们来获取信息。

[举例]

*查看活动的网络连接状况:

$netstat

默认,netstat会显示活动的链接列表.如果你没有指定地址类别,那么所有配置的地址类别的活动sockets将都会被打印出来。显示的内容很多,包括两个部分:本地的ActiveUNIXdomainSockets连接和网络上的ActiveInternetconnections(TCP,UDP,raw)连接。本地的那个连接一般都不看。

*查看所有的网络连接状况:

$netstat-a

通过-a选项,可以查看所有活动和不活动的连接的情况。

*查看网络状况,地址和端口用数字表示:

$netstat-n

这里如果不用-n那么地址和端口就会用主机名称或者服务名称来表示了。使用-n不进行DNS轮询(可以加速操作),否则可能会很慢才显示出来。

*察看系统当前监听的端口:

$netstat-lnp

这里,显示的结果既包含本地的,又包含网络的。选项的含义如下:

-l:仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

-n:不进行DNS轮询(可以加速操作)

-p:显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

*只显示关于网络的所有连接:

$netstat--inet

或$netstat--ip

这样,就只显示与网络相关的连接,不再显示本地的连接了。

*显示tcp和udp的侦听端口并且显示相应的程序id和程序名:

$netstat-tulpn

这里,

-t:指明显示TCP端口

-u:指明显示UDP端口

*显示路由表

$netstat-rn

输出如下:

KernelIProutingtable

DestinationGatewayGenmaskFlagsMSSWindowirttIface

192.168.100.0*255.255.255.0U000usb0

192.168.0.0*255.255.255.0U000eth3

link-local*255.255.0.0U000eth3

default192.168.0.10.0.0.0UG000eth3

这里,在调用netstat时,-r标记将显示内核路由表,就像我们利用route命令一样。

-n选项令netstat以点分四段式的形式输出IP地址,而不是象征性的主机名和网络名。如果想避免通过网络查找地址(比如避开DNS或NIS服务器),这一点是特别有用的。

netstat输出结果中,第二列展示的是路由条目所指的网关,如果没有使用网关,就会出现一个星号(*)或者0.0.0.0;第三列展示路由的概述,在为具体的IP地址找出最恰当的路由时,内核将查看路由表内的所有条目,在对找到的路由与目标路由比较之前,将对IP地址和genmask进行按位“与”计算;第四列显示了不同的标记,这些标记的说明如下:

G路由将采用网关。

U准备使用的接口处于“活动”状态。

H通过该路由,只能抵达一台主机。

D如果路由表的条目是由ICMP重定向消息生成的,就会设置这个标记。

M如果路由表条目已被ICMP重定向消息修改,就会设置这个标记。

netstat输出结果的Iface显示该连接所用的物理网卡,如eth0表示用第一张,eth1表示用第二张。

另外,对于这个输出,我的机器情况是:网卡是eth3,使用局域网,网关192.168.0.1,本地ip是192.168.0.118,机器上面用usb连接开发板,usb0配置是用ifconfigusb0192.168.100.1.开发板ip自动是192.168.100.200.

*显示网络的当前配置特性:

$netstat-i

输入之后,输出如下:

KernelInterfacetable

IfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlg

eth315000215348000102444000BMRU

lo164360176000176000LRU

usb015000318400037555000BMRU

在这里,我的机器使用eth3来上网,同时用usb连接了一个开发板子设置了一个usb网址用来连接usb的开发板子。如果调用时还带上-a选项,它还将输出内核中所有接口,并不只是当前配置的接口。

MTU和Met字段表示的是接口的MTU和度量值值;RX和TX这两列表示的是已经准确无误地收发了多少数据包(RX-OK/TX-OK)、产生了多少错误(RX-ERR/TX-ERR)、丢弃了多少包(RX-DRP/TX-DRP),由于误差而遗失了多少包(RX-OVR/TX-OVR);最后一列展示的是为这个接口设置的标记,在利用ifconfig显示接口配置时,这些标记都采用一个字母。它们的说明如下:

B已经设置了一个广播地址。

L该接口是一个回送设备。

M接收所有数据包(混乱模式)。

N避免跟踪。

O在该接口上,禁用ARP。

P这是一个点到点链接。

R接口正在运行。

U接口处于“活动”状态。

*显示内核的所有接口:

$netstat-ia

输入之后,输出如下:

KernelInterfacetable

IfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlg

eth315000291968000139979000BMRU

lo164360176000176000LRU

pan01500000000000BM

usb015000318400037555000BMRU

*查看网络协议的统计信息:

$netstat-s

这里信息较多,不列举了,统计网络协议的总体信息。包括IP,ICMP,TCP,UDP等。通过这个命令的输出,可以确定一个接收到的包中的错误信息在哪,这样用户可以将软件或者网络本身的错误隔离开。

[其他]

这个命令,在不同的系统上实现有所不同。

但大多系统的netstat都提供了如下的信息:网络连接、网络接口信息、数据缓存信息、路由信息、网络协议统计信息等,通过不同的选项可以显示相应的信息。这里的系统没有关于数据缓存的信息,如果有,那么有例如'-m'之类的选项。

相关推荐

LandryBean / 0评论 2011-02-06