netstat基本用法.docx
《netstat基本用法.docx》由会员分享,可在线阅读,更多相关《netstat基本用法.docx(8页珍藏版)》请在冰豆网上搜索。
netstat基本用法
Netstat简介
Netstat是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括tcp,udp以及unix套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。
如果你想确认系统上的Web服务有没有起来,你可以查看80端口有没有打开。
以上功能使netstat成为网管和系统管理员的必备利器。
在这篇教程中,我会列出几个例子,教大家如何使用netstat去查找网络连接信息和系统开启的端口号。
以下的简单介绍来自netstat的man手册:
netstat-打印网络连接、路由表、连接的数据统计、伪装连接以及广播域成员。
1.列出所有连接
第一个要介绍的,是最简单的命令:
列出所有当前的连接。
使用-a选项即可。
$netstat-a
ActiveInternetconnections(serversandestablished)
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00enlightened:
domain*:
*LISTEN
tcp00localhost:
ipp*:
*LISTEN
tcp00enlightened.local:
54750li240-5.members.li:
httpESTABLISHED
tcp00enlightened.local:
49980del01s07-in-f14.1:
httpsESTABLISHED
tcp600ip6-localhost:
ipp[:
:
]:
*LISTEN
udp00enlightened:
domain*:
*
udp00*:
bootpc*:
*
udp00enlightened.local:
ntp*:
*
udp00localhost:
ntp*:
*
udp00*:
ntp*:
*
udp00*:
58570*:
*
udp00*:
mdns*:
*
udp00*:
49459*:
*
udp600fe80:
:
216:
36ff:
fef8:
ntp[:
:
]:
*
udp600ip6-localhost:
ntp[:
:
]:
*
udp600[:
:
]:
ntp[:
:
]:
*
udp600[:
:
]:
mdns[:
:
]:
*
udp600[:
:
]:
63811[:
:
]:
*
udp600[:
:
]:
54952[:
:
]:
*
ActiveUNIXdomainsockets(serversandestablished)
ProtoRefCntFlagsTypeStateI-NodePath
unix2[ACC]STREAMLISTENING12403@/tmp/dbus-IDgfj3UGXX
unix2[ACC]STREAMLISTENING40202@/dbus-vfs-daemon/socket-6nUC6CCx
上述命令列出tcp,udp和unix协议下所有套接字的所有连接。
然而这些信息还不够详细,管理员往往需要查看某个协议或端口的具体连接情况。
2.只列出TCP或UDP协议的连接
使用-t选项列出TCP协议的连接:
$netstat-at
ActiveInternetconnections(serversandestablished)
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00enlightened:
domain*:
*LISTEN
tcp00localhost:
ipp*:
*LISTEN
tcp00enlightened.local:
36310del01s07-in-f24.1:
httpsESTABLISHED
tcp00enlightened.local:
45038a96-17-181-10.depl:
httpESTABLISHED
tcp00enlightened.local:
37892ABTS-North-Static-:
httpESTABLISHED
.....
使用-u选项列出UDP协议的连接:
$netstat-au
ActiveInternetconnections(serversandestablished)
ProtoRecv-QSend-QLocalAddressForeignAddressState
udp00*:
34660*:
*
udp00enlightened:
domain*:
*
udp00*:
bootpc*:
*
udp00enlightened.local:
ntp*:
*
udp00localhost:
ntp*:
*
udp00*:
ntp*:
*
udp600fe80:
:
216:
36ff:
fef8:
ntp[:
:
]:
*
udp600ip6-localhost:
ntp[:
:
]:
*
udp600[:
:
]:
ntp[:
:
]:
*
上面同时显示了IPv4和IPv6的连接。
3.禁用反向域名解析,加快查询速度
默认情况下netstat会通过反向域名解析技术查找每个IP地址对应的主机名。
这会降低查找速度。
如果你觉得IP地址已经足够,而没有必要知道主机名,就使用-n选项禁用域名解析功能。
$netstat-ant
ActiveInternetconnections(serversandestablished)
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00127.0.1.1:
530.0.0.0:
*LISTEN
tcp00127.0.0.1:
6310.0.0.0:
*LISTEN
tcp00192.168.1.2:
49058173.255.230.5:
80ESTABLISHED
tcp00192.168.1.2:
33324173.194.36.117:
443ESTABLISHED
tcp600:
:
1:
631:
:
:
*LISTEN
上述命令列出所有TCP协议的连接,没有使用域名解析技术。
Soeasy?
非常好。
4.只列出监听中的连接
任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。
这些正在监听的套接字也和连接的套接字一样,也能被netstat列出来。
使用-l选项列出正在监听的套接字。
$netstat-tnl
ActiveInternetconnections(onlyservers)
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00127.0.1.1:
530.0.0.0:
*LISTEN
tcp00127.0.0.1:
6310.0.0.0:
*LISTEN
tcp600:
:
1:
631:
:
:
*LISTEN
现在我们可以看到处于监听状态的TCP端口和连接。
如果你查看所有监听端口,去掉-t选项。
如果你只想查看UDP端口,使用-u选项,代替-t选项。
注意:
不要使用-a选项,否则netstat会列出所有连接,而不仅仅是监听端口。
5.获取进程名、进程号以及用户ID
查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。
举个栗子,Apache的httpd服务开启80端口,如果你要查看http服务是否已经启动,或者http服务是由apache还是nginx启动的,这时候你可以看看进程名。
使用-p选项查看进程信息。
~$sudonetstat-nlpt
ActiveInternetconnections(onlyservers)
ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname
tcp00127.0.1.1:
530.0.0.0:
*LISTEN1144/dnsmasq
tcp00127.0.0.1:
6310.0.0.0:
*LISTEN661/cupsd
tcp600:
:
1:
631:
:
:
*LISTEN661/cupsd
使用-p选项时,netstat必须运行在root权限之下,不然它就不能得到运行在root权限下的进程名,而很多服务包括http和ftp都运行在root权限之下。
相比进程名和进程号而言,查看进程的拥有者会更有用。
使用-ep选项可以同时查看进程名和用户名。
$sudonetstat-ltpe
ActiveInternetconnections(onlyservers)
ProtoRecv-QSend-QLocalAddressForeignAddressStateUserInodePID/Programname
tcp00enlightened:
domain*:
*LISTENroot110901144/dnsmasq
tcp00localhost:
ipp*:
*LISTENroot9755661/cupsd
tcp600ip6-localhost:
ipp[:
:
]:
*LISTENroot9754661/cupsd
上面列出TCP协议下的监听套接字,同时显示进程信息和一些额外信息。
这些额外的信息包括用户名和进程的索引节点号。
这个命令对网管来说很有用。
注意-假如你将-n和-e选项一起使用,User列的属性就是用户的ID号,而不是用户名。
6.打印统计数据
netstat可以打印出网络统计数据,包括某个协议下的收发包数量。
下面列出所有网络包的统计情况:
$netstat-s
Ip:
32797totalpacketsreceived
0forwarded
0incomingpacketsdiscarded
32795incomingpacketsdelivered
29115requestssentout
60outgoingpacketsdropped
Icmp:
125ICMPmessagesreceived
0inputICMPmessagefailed.
ICMPinputhistogram:
destinationunreachable:
125
125ICMPmessagessent
0ICMPmessagesfailed
ICMPoutputhistogram:
destinationunreachable:
125
...OUTPUTTRUNCATED...
如果想只打印出TCP或UDP协议的统计数据,只要加上对应的选项(-t和-u)即可,soeasy。
7.显示内核路由信息
使用-r选项打印内核路由信息。
打印出来的信息与route命令输出的信息一样。
我们也可以使用-n选项禁止域名解析。
$netstat-rn
KernelIProutingtable
DestinationGatewayGenmaskFlagsMSSWindowirttIface
0.0.0.0192.168.1.10.0.0.0UG000eth0
192.168.1.00.0.0.0255.255.255.0U000eth0
8.打印网络接口
netstat也能打印网络接口信息,-i选项就是为这个功能而生。
$netstat-i
KernelInterfacetable
IfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlg
eth0150003161100027503000BMRU
lo65536029130002913000LRU
上面输出的信息比较原始。
我们将-e选项和-i选项搭配使用,可以输出用户友好的信息。
$netstat-ie
KernelInterfacetable
eth0Linkencap:
EthernetHWaddr00:
16:
36:
f8:
b2:
64
inetaddr:
192.168.1.2Bcast:
192.168.1.255Mask:
255.255.255.0
inet6addr:
fe80:
:
216:
36ff:
fef8:
b264/64Scope:
Link
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
31682errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
27573errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
1000
RXbytes:
29637117(29.6MB)TXbytes:
4590583(4.5MB)
Interrupt:
18Memory:
da000000-da020000
loLinkencap:
LocalLoopback
inetaddr:
127.0.0.1Mask:
255.0.0.0
inet6addr:
:
:
1/128Scope:
Host
UPLOOPBACKRUNNINGMTU:
65536Metric:
1
RXpackets:
2921errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
2921errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
0
RXbytes:
305297(305.2KB)TXbytes:
305297(305.2KB)
上面的输出信息与ifconfig输出的信息一样。
9.netstat持续输出
我们可以使用netstat的-c选项持续输出信息。
$netstat-ct
这个命令可持续输出TCP协议信息。
10.显示多播组信息
选项-g会输出IPv4和IPv6的多播组信息。
$netstat-g
IPv6/IPv4GroupMemberships
InterfaceRefCntGroup
------------------------------------------
lo1all-
eth01224.0.0.251
eth01all-
lo1ip6-allnodes
lo1ff01:
:
1
eth01ff02:
:
fb
eth01ff02:
:
1:
fff8:
b264
eth01ip6-allnodes
eth01ff01:
:
1
wlan01ip6-allnodes
wlan01ff01:
:
1
更多用法
目前为止我们列出了netstat的基本用法,现在让我们一起来geek吧~
打印active状态的连接
active状态的套接字连接用"ESTABLISHED"字段表示,所以我们可以使用grep命令获得active状态的连接:
$netstat-atnp|grepESTA
(Notallprocessescouldbeidentified,non-ownedprocessinfo
willnotbeshown,youwouldhavetoberoottoseeitall.)
tcp00192.168.1.2:
49156173.255.230.5:
80ESTABLISHED1691/chrome
tcp00192.168.1.2:
33324173.194.36.117:
443ESTABLISHED1691/chrome
配合watch命令监视active状态的连接:
$watch-d-n0"netstat-atnp|grepESTA"
查看服务是否在运行
如果你想看看http,smtp或ntp服务是否在运行,使用grep。
$sudonetstat-aple|grepntp
udp00enlightened.local:
ntp*:
*root174301789/ntpd
udp00localhost:
ntp*:
*root174291789/ntpd
udp00*:
ntp*:
*root174221789/ntpd
udp600fe80:
:
216:
36ff:
fef8:
ntp[:
:
]:
*root174321789/ntpd
udp600ip6-localhost:
ntp[:
:
]:
*root174311789/ntpd
udp600[:
:
]:
ntp[:
:
]:
*root174231789/ntpd
unix2[]DGRAM174181789/ntpd
从这里可以看到ntp服务正在运行。
使用grep命令你可以查看http或smtp或其它任何你想查看的服务。