linux netstat命令


netstat追踪网络或网卡信息,netstat常被用在网络的监控方面:

              [root@initroot ~]# netstat -[atunlp]
            
选项与参数:
-a :将目前系统上所有的联机、监听、Socket数据都列出来
-t :列出tcp网络封包的数据
-u :列出udp网络封包的数据
-n :不以进程的服务名称,而是显示端口号(port number);
-l :列出目前正在网络监听(listen)的服务;
-p :列出该网络服务的进程PID
列出目前系统已经建立的网络联机与unix socket状态:
              [root@initroot ~]# netstat
              Active Internet connections (w/o servers)              #与网络相关的部分
              Proto Recv-Q Send-Q Local Address           Foreign Address         State      
              tcp        0      0 promote.cache-dns:34894 111.221.29.254:https    ESTABLISHED
              tcp        0      0 promote.cache-dns:53684 139.129.102.64:ssh      ESTABLISHED
              tcp        0      0 promote.cache-dns:37526 139.129.102.64:https    ESTABLISHED
              tcp        0      0 promote.cache-dns:56226 ec2-34-213-147-57:https ESTABLISHED
              tcp        0      0 promote.cache-dns:58176 203.208.50.104:https    ESTABLISHED
              Active UNIX domain sockets (w/o servers)              #本机进程相关(非网络)
              Proto RefCnt Flags       Type       State         I-Node   Path
              unix  2      [ ]         DGRAM                    27105    /run/user/1000/systemd/notify
              unix  2      [ ]         DGRAM                    13844    /run/systemd/journal/syslog
              unix  7      [ ]         DGRAM                    13865    /run/systemd/journal/socket
              unix  23     [ ]         DGRAM                    13924    /run/systemd/journal/dev-log
              unix  2      [ ]         DGRAM                    17236    /var/spool/postfix/dev/log
              unix  3      [ ]         DGRAM                    13835    /run/systemd/notify
              unix  3      [ ]         SEQPACKET  CONNECTED     33448    @00019
              unix  3      [ ]         STREAM     CONNECTED     95754913 /run/user/1000/bus
              unix  3      [ ]         STREAM     CONNECTED     34472    
              unix  3      [ ]         STREAM     CONNECTED     28628    @/tmp/dbus-47Qee9NqBN
              unix  2      [ ]         DGRAM                    17860    
              unix  3      [ ]         STREAM     CONNECTED     38056    
              unix  3      [ ]         STREAM     CONNECTED     33854    
              unix  3      [ ]         STREAM     CONNECTED     29684    
              unix  3      [ ]         STREAM     CONNECTED     29197    
              ...省略...
              unix 3       [ ]         STREAM     CONNECTED     25425  @/tmp/.X11-unix/X0
              unix 3       [ ]         STREAM     CONNECTED     28893
              unix 3       [ ]         STREAM     CONNECTED     21262
            
基本上, netstat的输出分为两大部分,分别是网络与系统自己的进程相关性部分:
分别是网络的联机以及linux上面的socket进程相关性部分。
Internet联机情况的部分:
Proto :网络的封包协议,主要分为 TCP 与 UDP 封包,相关资料请参考服务器篇;
Recv-Q:非由用户程序链接到此 socket 的复制的总 bytes 数;
Send-Q:非由远程主机传送过来的 acknowledged 总 bytes 数;
Local Address :本地端的 IP:port 情况
Foreign Address:远程主机的 IP:port 情况
State :联机状态,主要有建立(ESTABLISED)及监听(LISTEN);
上面其中一条联机的数据意义是:
通过TCP封包的联机,远程的172.16.220.234:48300,联机到本地端的172.16.15.100:ssh,这条联机状态是建立(ESTABLISHED)状态!
更多关于网络的只是参考
除了网络上的联机之外,Linux系统上的进程是可以接收不同进程所发送来的信息, 这就是Linux的socket文件(socket file)。 socket file可以沟通两个进程间的信息,因此进程可以取得对方传送过来的数据。
由于有socket file,因此类似X Window这种需要通过网络连接的软件,目前新版的distributions就以socket来进行窗口接口的联机沟通了。 上面socket file的输出字段有:
Proto :一般就是unix;
RefCnt:连接到此socket的进程数量;
Flags :联机的标志;
Type :socket存取类型。主要有确认联机的STREAM与不需确认的DGRAM两种;
State :若为CONNECTED表示多个进程之间已经联机建立。
Path :socket文件的路径。连接到此socket的相关程序的路径!或者是相关数据输出的路径。
上面输出最后三行在/tmp/.xx底下的文件,就是X Window窗口接口的相关进程啦! PATH指向的就是这些进程要交换数据的socket文件! 可以利用netstat查看哪些进程有启动哪些网络的后门。
找出目前系统上已在监听的网络联机及其PID:
              [root@initroot ~]# netstat -tulnp
              Active Internet connections (only servers)
              Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
              tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      337/nginx: master p 
              tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1193/mysqld         
              tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      337/nginx: master p 
              tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      337/nginx: master p 
              tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1242/sshd           
              tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      32018/node          
              tcp6       0      0 :::80                   :::*                    LISTEN      337/nginx: master p 
              udp        0      0 0.0.0.0:68              0.0.0.0:*                           717/dhclient        
              udp        0      0 172.31.47.31:123        0.0.0.0:*                           492/ntpd            
              udp        0      0 127.0.0.1:123           0.0.0.0:*                           492/ntpd            
              udp        0      0 0.0.0.0:123             0.0.0.0:*                           492/ntpd            
              udp6       0      0 :::123                  :::*                                492/ntpd      
            
除了可以列出监听网络的接口与状态之外,最后一个字段还能够显示服务的PID号以及进程的指令名称! 例如上面的1242/sshd,1242就是进程PID,sshd为服务进程的名。
将0 0.0.0.0:123那个网络服务关闭:
              [root@initroot ~]# kill -9 492
              [root@initroot ~]# killall -9 ntpd
            
主机到底开了几个端口(ports)!其实,主机不论提供什么样的服务, 一定必须要有相对应的program在主机上面执行才行!
举例来说,本站www.initroot.com的Linux主机提供的就是WWW服务,那么一定有一个提供WWW服务进程在运行!
那就是nginx这个软件了!
所以,当我执行了这个程序之后,我的系统自然就可以提供WWW服务了。
那如何关闭啊? 就关掉该程序所触发的那个进程就好了!上面使用kill -9杀掉服务进程并不是专业的做法,正常的做法是使用系统服务管理工具systemctl!

本文由initroot编辑整理,转载请注明www.initroot.com

我们在用ps或者top查看系统进程的时候,就已经涉及到很多系统资源信息了。 除了进程管理相关命令外,我们还可以通过其他工具查看系统中的资源使用情况!

100次点赞 100次阅读