运维必备 | Linux netstat命令详解

简介: 运维必备 | Linux netstat命令详解


简介

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

输出信息含义

执行netstat后,其输出结果为

ActiveInternetconnections(w/oservers) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp02210.34.6.89:telnet210.34.6.96:2873ESTABLISHED tcp2960210.34.6.89:1165210.34.6.84:netbios-ssnESTABLISHED tcp00localhost.localdom:9001localhost.localdom:1162ESTABLISHED tcp00localhost.localdom:1162localhost.localdom:9001ESTABLISHED tcp080210.34.6.89:1161210.34.6.10:netbios-ssnCLOSE ActiveUNIXdomainsockets(w/oservers) ProtoRefCntFlagsTypeStateI-NodePath unix1[]STREAMCONNECTED16178@000000dd unix1[]STREAMCONNECTED16176@000000dc unix9[]DGRAM5292/dev/log unix1[]STREAMCONNECTED16182@000000df

从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数

-a (all)显示所有选项,

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

实用命令实例

1、列出所有端口 (包括监听和未监听的)

列出所有端口 netstat -a

#netstat-a|more ActiveInternetconnections(serversandestablished) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp00localhost:30037*:*LISTEN udp00*:bootpc*:* ActiveUNIXdomainsockets(serversandestablished) ProtoRefCntFlagsTypeStateI-NodePath unix2[ACC]STREAMLISTENING6135/tmp/.X11-unix/X0 unix2[ACC]STREAMLISTENING5140/var/run/acpid.socket

列出所有 tcp 端口 netstat -at

#netstat-at ActiveInternetconnections(serversandestablished) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp00localhost:30037*:*LISTEN tcp00localhost:ipp*:*LISTEN tcp00*:smtp*:*LISTEN tcp600localhost:ipp[::]:*LISTEN

列出所有 udp 端口 netstat -au

#netstat-au ActiveInternetconnections(serversandestablished) ProtoRecv-QSend-QLocalAddressForeignAddressState udp00*:bootpc*:* udp00*:49119*:* udp00*:mdns*:*

2、列出所有处于监听状态的 Sockets

只显示监听端口 netstat -l

#netstat-l ActiveInternetconnections(onlyservers) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp00localhost:ipp*:*LISTEN tcp600localhost:ipp[::]:*LISTEN udp00*:49119*:*

只列出所有监听 tcp 端口 netstat -lt

#netstat-lt ActiveInternetconnections(onlyservers) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp00localhost:30037*:*LISTEN tcp00*:smtp*:*LISTEN tcp600localhost:ipp[::]:*LISTEN

只列出所有监听 udp 端口 netstat -lu

#netstat-lu ActiveInternetconnections(onlyservers) ProtoRecv-QSend-QLocalAddressForeignAddressState udp00*:49119*:* udp00*:mdns*:*

只列出所有监听 UNIX 端口 netstat -lx

#netstat-lx ActiveUNIXdomainsockets(onlyservers) ProtoRefCntFlagsTypeStateI-NodePath unix2[ACC]STREAMLISTENING6294private/maildrop unix2[ACC]STREAMLISTENING6203public/cleanup unix2[ACC]STREAMLISTENING6302private/ifmail unix2[ACC]STREAMLISTENING6306private/bsmtp

3、显示每个协议的统计信息

显示所有端口的统计信息 netstat -s

#netstat-s Ip: 11150totalpacketsreceived 1withinvalidaddresses 0forwarded 0incomingpacketsdiscarded 11149incomingpacketsdelivered 11635requestssentout Icmp: 0ICMPmessagesreceived 0inputICMPmessagefailed. Tcp: 582activeconnectionsopenings 2failedconnectionattempts 25connectionresetsreceived Udp: 1183packetsreceived 4packetstounknownportreceived. .....

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

#netstat-st #netstat-su

4、在 netstat 输出中显示 PID 和进程名称 netstat -p

netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

#netstat-pt ActiveInternetconnections(w/oservers) ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname tcp10ramesh-laptop.loc:47212192.168.185.75:wwwCLOSE_WAIT2109/firefox tcp00ramesh-laptop.loc:52750lax:wwwESTABLISHED2109/firefox

5、在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

同样可以加速输出,因为不用进行比对查询。

#netstat-an

如果只是不想让这三个名称中的一个被显示,使用以下命令

#netsat-a--numeric-ports #netsat-a--numeric-hosts #netsat-a--numeric-users

6、持续输出 netstat 信息

netstat 将每隔一秒输出网络信息。

#netstat-c ActiveInternetconnections(w/oservers) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp00ramesh-laptop.loc:36130101-101-181-225.ama:wwwESTABLISHED tcp11ramesh-laptop.loc:52564101.11.169.230:wwwCLOSING tcp00ramesh-laptop.loc:43758server-101-101-43-2:wwwESTABLISHED tcp11ramesh-laptop.loc:42367101.101.34.101:wwwCLOSING

7、显示系统不支持的地址族 (Address Families)

netstat--verbose

在输出的末尾,会有如下的信息

netstat:nosupportfor`AFIPX'onthissystem. netstat:nosupportfor`AFAX25'onthissystem. netstat:nosupportfor`AFX25'onthissystem. netstat:nosupportfor`AFNETROM'onthissystem.

8、显示核心路由信息 netstat -r

#netstat-r KernelIProutingtable DestinationGatewayGenmaskFlagsMSSWindowirttIface 192.168.1.0*255.255.255.0U000eth2 link-local*255.255.0.0U000eth2 default192.168.1.10.0.0.0UG000eth2

注意:使用 netstat -rn 显示数字格式,不查询主机名称。

9、找出程序运行的端口

并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

#netstat-ap|grepssh tcp10dev-db:ssh101.174.100.22:39213CLOSE_WAIT- tcp10dev-db:ssh101.174.100.22:57643CLOSE_WAIT-

找出运行在指定端口的进程

#netstat-an|grep':80'

10、显示网络接口列表

#netstat-i KernelInterfacetable IfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlg eth01500000000000BMU eth2150002619600026883600BMRU lo16436040004000LRU

显示详细信息,像是 ifconfig 使用 netstat -ie:

#netstat-ie KernelInterfacetable eth0Linkencap:EthernetHWaddr00:10:40:11:11:11 UPBROADCASTMULTICASTMTU:1500Metric:1 RXpackets:0errors:0dropped:0overruns:0frame:0 TXpackets:0errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:1000 RXbytes:0(0.0B)TXbytes:0(0.0B) Memory:f6ae0000-f6b00000

11、IP和TCP分析

查看连接某服务端口最多的的IP地址

wss8848@ubuntu:~$netstat-nat|grep"192.168.1.15:22"|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|head-20 18221.136.168.36 3154.74.45.242 278.173.31.236 262.183.207.98 2192.168.1.14 2182.48.111.215 2124.193.219.34 2119.145.41.2 2114.255.41.30 175.102.11.99

TCP各种状态列表

wss8848@ubuntu:~$netstat-nat|awk'{print$6}' established) Foreign LISTEN TIME_WAIT ESTABLISHED TIME_WAIT SYN_SENT

先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。

wss8848@ubuntu:~$netstat-nat|awk'{print$6}'|sort|uniq-c 143ESTABLISHED 1FIN_WAIT1 1Foreign 1LAST_ACK 36LISTEN 6SYN_SENT 113TIME_WAIT 1established)

最后的命令如下:

netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn

分析access.log获得访问前10位的ip地址

awk'{print$1}'access.log|sort|uniq-c|sort-nr|head-10
相关文章
|
3天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
18 3
|
3天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
16 2
|
11天前
|
缓存 监控 Linux
|
14天前
|
Linux Shell 数据安全/隐私保护
|
15天前
|
域名解析 网络协议 安全
|
21天前
|
运维 监控 网络协议
|
3天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
18 3
|
6天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
30 6
|
7天前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
21 7
|
9天前
|
监控 Linux
Linux常用命令-2
本文继续介绍Linux常用命令,涵盖目录操作、文件操作、系统信息和进程管理等类别。具体包括mkdir、rmdir、cp、mv、rm、touch、whereis、whatis、dmesg、free、date、cal、ps、kill、killall和top等命令的使用方法和常用参数。
38 7