linux命令_netstat,一般情况下,我们主要
linux命令_netstat,一般情况下,我们主要
netstat是一个控制台命令,可用于监控本机的TCP/IP网络,获得路由表、网络连接以及所有网络接口设备的状态信息。一般情况下,我们主要使用netstat命令显示与IP、TCP、UDP和ICMP协议相关的统计数据,检验本机各端口的网络连接情况。
比如说,在日常使用电脑时,如果连接到了网络,或多或少的会因接收到的数据包导致出错数据或故障,在正常量的情况下,TCP/IP可以容许这些类型的错误,并且能够自动重新发送数据包。但是如果累计的出错情况数占所接收IP数据报的百分比过大,而且数目还在不断增加,那么我们就要进入控制台,使用netstat命令查看一下出现问题的连接端口。
netstat结果详解
[root@honey-master ~] netstat
------------------------------------------------------------------------------------|
Active Internet connections (w/o servers) |
Proto Recv-Q Send-Q Local Address Foreign Address State |
tcp 0 0 honey-ma:xmltec-xmlmail honey-master:44714 ESTABLISHED |
tcp 0 0 honey-master:postgres honey-master:46680 ESTABLISHED |
tcp 0 0 honey-master:41756 honey-master:redis ESTABLISHED |
tcp 0 0 honey-master:42726 honey-master:redis ESTABLISHED |
tcp 0 0 localhost:39230 localhost:redis ESTABLISHED |
.. |
tcp6 0 0 honey-master:mysql honey-master:58232 ESTABLISHED |
tcp6 0 0 localhost:mysql localhost:53266 ESTABLISHED |
tcp6 0 0 honey-master:mysql honey-master:58446 ESTABLISHED |
udp 0 0 honey-master:bootpc _gateway:bootps ESTABLISHED |
udp 0 0 localhost:55920 localhost:55920 ESTABLISHED |
------------------------------------------------------------------------------------|---------------|
Active UNIX domain sockets (w/o servers) |
Proto RefCnt Flags Type State I-Node Path |
unix 3 [ ] DGRAM 1703 /run/systemd/notify |
unix 2 [ ] DGRAM 1705 /run/systemd/cgroups-agent |
... |
unix 3 [ ] STREAM CONNECTED 29975 /run/systemd/journal/stdout |
unix 3 [ ] STREAM CONNECTED 1543565 /var/run/docker.sock |
unix 3 [ ] STREAM CONNECTED 323733 |
unix 3 [ ] STREAM CONNECTED 189654 |
----------------------------------------------------------------------------------------------------|
Active Bluetooth connections (w/o servers)
Proto Destination Source State PSM DCID SCID IMTU OMTU Security
Proto Destination Source State Channel
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
列出所有的tcp和udp端口:
字段 | 含义 |
---|---|
proto |
协议名称:tcp/udp |
Recv-Q |
网络接收队列:表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。 |
Send-Q |
网络发送队列:对方没有收到的数据或者说没有Ack的,还是本地缓冲区,如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。从步骤一的结果可以看到22端口对应的链路的send-Q中堆积了大量的数据包,可以判定是发送数据给目的地址的时候出现了阻塞的问题,导致了包堆积在本地缓存中,不能成功发出去。 |
Local-address |
表格下分析 |
Foreign Address |
与本机端口通信的外部socket。显示规则与Local Address相同 |
State |
表格下分析 |
PID/program |
PID即进程id,Program即使用该socket的应用程序。其中0.0.0.0:1234——本地IP/Port信息。 1、0.0.0.0代表本机上可用的任意地址。比如0.0.0.0:1234表示本机上所有地址的1234端口,这样ip计算机就不用重复显示了。 2、0.0.0.0为默认路由,即要达到不在路由表里面的网段的包都走0.0.0.0这条规则。气死,我们可以"通用"理解为代表"本机地址",1234在程序中体现为绑定的1234端口号 0.0.0.0: *——目的地址IP/Port信息。 |
Local Address
部分0.0.0.0:22表示监听服务器上所有的ip地址上的22端口
:::22 这个也表示监听本地所有ip的22端口,跟上面的区别是这里表示的是IPv6地址,上面的0.0.0.0表示的是本地所有IPv4地址NOTE “:::”这三个:的前两个"::",是"0:0:0:0:0:0:0"的缩写,相当于IPv6的"0.0.0.0",就是本机的所有IPv6地址,第三个:是IP和端口的分隔符
127.0.0.1:3310 这个表示监听本机的loopback地址的3310端口(如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问)
::1:323 这个表示监听IPv6的回环地址的323端口,::1表示IPv6的loopback地址
State 列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。
符号 | 状态解释 |
---|---|
LISTEN | 首先服务器要打开一个socket进行监听,状态为LISTEN the socket is listening for incoming connections |
SYN_SENT | 客户端通过应用程序调用connect进行active open,于是客户端tcp发送一个SYN以请求建立一个链接,之后状态设置为SYN_SENT socket is actively attempting to establish a connection |
SYN_RECV | 服务端发出ACk确认包给客户端,状态变为SYN_RECV a connection request has been received from the network |
ESTABLISHED | 代表打开一个连接,双方可以进行或者已经在数据交互了 the socket has an established connection |
FIN_WAIT1 | 主动关闭服务端应用程序,tcp发送FIN请求关闭连接,之后进入FIN_WAIT1状态 the socket is closed, and the connection is shutting down. |
CLOSE_WAIT | 被动关闭,服务端接收到FIN请求后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT状态 the remote end has shut down, waiting for the socket to close |
FIN_WAIT2 | 主动关闭接收到ACK后,就进入了FIN_WAIT2状态 connection is closed, and the socket is waitng for a shut down from the remote end. |
LAST_ACK | 服务端关闭一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接,这导致发送一个等待原来向服务端发送连接中断请求的确认FIN,死后进入LAST_ACK the remote end has shut down, and the socket is closed. Waiting for anknowledgement. |
TIME_WAIT | 在主动关闭端接收到FIN后,就会向对方发送ACk确认包,并进入TIME_WAIT状态。 the socket is waiting after close to handle packets still in the networks. |
CLOSING | both sockets are shutting down but we still don't have all our data sent |
CLOSED | 连接结束 |
UNKNOWN | 未知的状态 |
参数
-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"参数相同。
-
列出所有端口情况
[root@xiesshavip002 ~] netstat -a # 列出所有端口 [root@xiesshavip002 ~] netstat -at # 列出所有TCP端口 [root@xiesshavip002 ~] netstat -au # 列出所有UDP端口
-
列出所有处于监听状态的 Sockets
[root@xiesshavip002 ~] netstat -l # 只显示监听端口 [root@xiesshavip002 ~] netstat -lt # 显示监听TCP端口 [root@xiesshavip002 ~] netstat -lu # 显示监听UDP端口 [root@xiesshavip002 ~] netstat -lx # 显示监听UNIX端口
-
显示每个协议的统计信息 -s
[root@xiesshavip002 ~] netstat -s # 显示所有端口的统计信息 [root@xiesshavip002 ~] netstat -st # 显示所有TCP的统计信息 [root@xiesshavip002 ~] netstat -su # 显示所有UDP的统计信息 IcmpMsg: InType3: 8623 OutType3: 791533 Udp: 2478625 packets received 1946 packets to unknown port received 0 packet receive errors 2482843 packets sent 0 receive buffer errors 0 send buffer errors IgnoredMulti: 21772 UdpLite: IpExt: InBcastPkts: 48838 InOctets: 36060130596 OutOctets: 17220772176 InBcastOctets: 6912337 InNoECTPkts: 99499687 InECT0Pkts: 14447
-
显示 PID 和进程名称 -p
[root@honey-master ~]# netstat -p Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 honey-ma:xmltec-xmlmail honey-master:44714 ESTABLISHED 173272/java tcp 0 0 honey-master:postgres honey-master:46680 ESTABLISHED 211809/postgres: po tcp 0 0 honey-master:41756 honey-master:redis ESTABLISHED 207937/python3 tcp 0 0 honey-master:42726 honey-master:redis ESTABLISHED 357854/python3
-
显示核心路由信息 -r
[root@honey-master ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default _gateway 0.0.0.0 UG 0 0 0 ens33 10.0.0.0 0.0.0.0 255.255.255.248 U 0 0 0 br-9dff81edda62 10.0.106.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 [root@honey-master ~]# netstat -rn #显示数字格式,不查询主机域名 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.0.106.1 0.0.0.0 UG 0 0 0 ens33 10.0.0.0 0.0.0.0 255.255.255.248 U 0 0 0 br-9dff81edda62 10.0.106.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-b570432f3378
-
查看端口和服务 -antp
[root@honey-master ~] netstat -antp | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 141882/sshd tcp 0 156 10.0.106.19:22 10.0.91.13:65533 ESTABLISHED 447311/sshd: root [ tcp6 0 0 :::22 :::* LISTEN 141882/sshd [root@honey-master ~]# netstat -antp | grep 5432 tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 132952/postmaster tcp 0 0 10.0.106.19:5432 10.0.106.19:46680 ESTABLISHED 211809/postgres: po tcp 0 0 10.0.106.19:5432 172.17.0.2:53512 ESTABLISHED 342190/postgres: po
-
打印网络接口 -i
[root@honey-master ~] netstat -i Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg br-9dff81edda62 1500 14994174 0 0 0 11310667 0 0 0 BMU br-b570432f3378 1500 52444002 0 0 0 52444002 0 0 0 BMRU docker0 1500 14994174 0 0 0 11310667 0 0 0 BMRU ens33 1500 32370072 0 0 0 18948958 0 0 0 BMRU
上面输出的信息比较原始。我们将 -e 选项和 -i 选项搭配使用,可以输出用户友好的信息。输出效果等同于ifconfig。
-
显示多播组信息 -g
[root@honey-master ~]# netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net ens33 1 all-systems.mcast.net docker0 1 all-systems.mcast.net lo 1 ff01::1 ens33 1 ff02::1 ens33 1 ff01::1 docker0 1 ff02::1
-
打印active状态的连接:active 状态的套接字连接用 "ESTABLISHED" 字段表示,所以我们可以使用 grep 命令获得 active 状态的连接:
配合 watch 命令监视 active 状态的连接:`watch -d -n0 ""
-
查看服务是否在运行
[root@honeypot ~]# netstat -aple | grep nginx tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN root 42158 3359/nginx: master tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN root 42160 3359/nginx: master tcp 0 0 0.0.0.0:https 0.0.0.0:* LISTEN root 42159 3359/nginx: master tcp 0 0 honeypot:https 10.0.80.6:46770 ESTABLISHED nginx 1406865 3360/nginx: worker
说明nginx正在运行,但如果关闭掉redis服务,状态都变成了关闭或者等待关闭
[root@honeypot ~] netstat -aple | grep redis tcp 1 0 honeypot:41338 honeypot:redis CLOSE_WAIT root 73035 8683/python3 tcp 1 0 honeypot:32926 honeypot:redis CLOSE_WAIT root 1467648 159493/python3 tcp 0 0 honeypot:redis honeypot:41332 FIN_WAIT2 root 0 - tcp 1 0 honeypot:41376 honeypot:redis CLOSE_WAIT root 73107 8822/python3 tcp 0 0 localhost:redis localhost:47240 TIME_WAIT root 0 -
组合命令
-
查看TCP连接状态
[root@honeypot ~]# netstat -nat |awk '{print $6}' |sort|uniq -c|sort -rn 174 ESTABLISHED 35 TIME_WAIT 31 LISTEN 26 CLOSE_WAIT 1 established) 1 Foreign
-
查找请求数请20个IP
[root@honeypot ~]# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。 15 127.0.0.1 4 10.0.81.29 3 10.0.81.35 3 10.0.80.6 2 0.0.0.0 1
-
查看连接某服务端口最多的的IP地址
[root@honeypot ~]# netstat -nat | grep "10.0.81.29:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20 1 10.0.91.13
本文来自博客园,作者:ivanlee717,转载请注明原文链接:https://www.cnblogs.com/ivanlee717/p/16298654.html
评论暂时关闭