netstat


RHEL6基础三十之服务器维护基础命令①netstat、ss_第1张图片

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


统计所有监听的TCP端口信息


[root@justin proc]# netstat -salt
IcmpMsg:
    OutType3: 7
Tcp:
    0 active connections openings
    1 passive connection openings
    0 failed connection attempts
    0 connection resets received
    1 connections established
    2748 segments received
    2516 segments send out
    1 segments retransmited
    0 bad segments received.
    0 resets sent
UdpLite:
TcpExt:
    40 delayed acks sent
    1 delayed acks further delayed because of locked socket
    Quick ack mode was activated 2 times
    1 packets directly queued to recvmsg prequeue.
    1994 packets header predicted
    177 acknowledgments not containing data received
    449 predicted acknowledgments
    1 congestion windows recovered after partial ack
    0 TCP data loss events
    1 other TCP timeouts
    2 DSACKs sent for old packets
    1 DSACKs received
    TCPSackShiftFallback: 1
IpExt:
    InMcastPkts: 5294
    OutMcastPkts: 14
    InBcastPkts: 152617
    InOctets: 17485149
    OutOctets: 219292
    InMcastOctets: 1419973
    OutMcastOctets: 2979
    InBcastOctets: 15494653
[root@justin proc]#

显示路由信息

[root@justin proc]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.15.72.0      *               255.255.255.0   U         0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
default         10.15.72.254    0.0.0.0         UG        0 0          0 eth0
[root@justin proc]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.15.72.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         10.15.72.254    0.0.0.0         UG        0 0          0 eth0

显示网络接口信息


[root@justin proc]# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0   223370      1      2      0     4334      0      0      0 BMRU
lo        16436   0        0      0      0      0        0      0      0      0 LRU
[root@justin proc]#

netstat -lnp (打印当前系统启动哪些端口)以及netstat -an (打印网络连接状况)这两个命令非常有用,请一定要记住如果你所管理的服务器是一台提供web服务(80端口)的服务器,那么你就可以使用netstat -an |grep 80查看当前连接web服务的有哪些IP


系统连接状态篇:

1.查看TCP连接状态

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

netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’ 或
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’

netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn

netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]‘ | sort | uniq -c


2.查找请求数请20个IP(常用于查找攻来源):

netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20

netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A[i],i}’ |sort -rn|head -n20

3.用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr |head -20

4.查找较多time_wait连接

netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20

5.找查较多的SYN连接

netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

6.根据端口列进程

netstat -ntlp | grep 80 | awk ‘{print $7}’ | cut -d/ -f1

网站日志分析篇1(Apache):

1.获得访问前10位的ip地址

cat access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -10
cat access.log|awk ‘{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}’

2.访问次数最多的文件或页面,取前20

cat access.log|awk ‘{print $11}’|sort|uniq -c|sort -nr|head -20

3.列出传输最大的几个exe文件(分析下载站的时候常用)

cat access.log |awk ‘($7~/\.exe/){print $10 ” ” $1 ” ” $4 ” ” $7}’|sort -nr|head -20

4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数

cat access.log |awk ‘($10 > 200000 && $7~/\.exe/){print $7}’|sort -n|uniq -c|sort -nr|head -100

5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面

cat access.log |awk ‘($7~/\.php/){print $NF ” ” $1 ” ” $4 ” ” $7}’|sort -nr|head -100

6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数

cat access.log |awk ‘($NF > 60 && $7~/\.php/){print $7}’|sort -n|uniq -c|sort -nr|head -100

7.列出传输时间超过 30 秒的文件

cat access.log |awk ‘($NF > 30){print $7}’|sort -n|uniq -c|sort -nr|head -20

8.统计网站流量(G)

cat access.log |awk ‘{sum+=$10} END {print sum/1024/1024/1024}’

9.统计404的连接

awk ‘($9 ~/404/)’ access.log | awk ‘{print $9,$7}’ | sort

10. 统计http status.

cat access.log |awk ‘{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn

10.蜘蛛分析

查看是哪些蜘蛛在抓取内容。

/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'

网站日分析2(Squid篇)

按域统计流量

zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s\t%d\n",domain,trfc[domain]}}'

内核socket优化

net.core.netdev_max_backlog = 30000  每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目


net.core.somaxconn = 262144   用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制

net.core.rmem_default = 8388608    接收套接字缓冲区大小的默认值(以字节为单位)

net.core.wmem_default = 8388608    发送套接字缓冲区大小的默认值(以字节为单位)

net.core.rmem_max=16777216    接收套接字缓冲区大小的最大值(以字节为单位)

net.core.wmem_max=16777216    发送套接字缓冲区大小的最大值(以字节为单位)

net.ipv4.ip_local_port_range = 1024 65536    用于向外连接的端口范围

net.ipv4.tcp_mem = 786432 1048576 1572864    确定 TCP 栈应该如何反映内存使用,此处分别为3G、4G、6G;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。

net.ipv4.tcp_rmem=4096 87380 16777216    TCP接收缓冲区,3个字段分别是min,default,max。Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。

  Default: 为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的值。该值决定了 在tcp_adv_win_scale、tcp_app_win和tcp_app_win的 默认值情况下,TCP 窗口大小为65535。

  Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值

net.ipv4.tcp_wmem=4096 65536 16777216    TCP发送缓冲区,3个字段分别是min,default,max。Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。

  Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。

  Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max

net.ipv4.tcp_fin_timeout = 10    如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒

net.ipv4.tcp_tw_recycle = 1   开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

net.ipv4.tcp_tw_reuse = 1    表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

net.ipv4.tcp_max_tw_buckets = 6000    系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS ***,千万不要人为的降低这个限制,不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)

net.ipv4.tcp_timestamps = 0   时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。

net.ipv4.tcp_window_scaling = 1   支持更大的TCP窗口. 如果TCP窗口最大超过65535(64KB), 必须设置该数值为1。

net.ipv4.tcp_sack = 1    表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用

net.ipv4.tcp_no_metrics_save=1    默认情况下一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh,拥塞窗口snd_cwnd 还有srtt等信息保存到dst_entry中, 只要dst_entry 没有失效,下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接.通常情况下是关闭的。

net.ipv4.tcp_keepalive_time = 1200   当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟

net.ipv4.tcp_syncookies = 1  当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭

net.ipv4.tcp_max_orphans = 262144    系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS ***,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。

net.ipv4.tcp_max_syn_backlog = 262144   表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_synack_retries = 2    为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。

net.ipv4.tcp_syn_retries = 2    在内核放弃建立连接之前发送SYN 包的数量


web服务器收到了大量的连接,在启用了iptables的情况下,iptables会把所有的连接都做链接跟踪处理,这样iptables就会有一个链接跟踪表

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1800   链接跟踪表保存时间,单位:秒

net.ipv4.netfilter.ip_conntrack_max=131070   链接跟踪表最大数目

 

kernel.sysrq = 0    允许按住Alt + PrtSc键打印内核信息,除非是调试,一般要关闭此功能

kernel.core_uses_pid = 1    控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core

kernel.msgmnb = 65536    每个消息队列的最大字节限制。

kernel.msgmax = 65536    从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。

kernel.shmmax = 68719476736    表示内核所允许的最大共享内存段的大小(bytes)

kernel.shmall = 4294967296    系统上可以使用的共享内存的总量(bytes)

kernel.randomize_va_space = 1    将该值设置为 0 可禁用地址空间布局随机化。DB2 数据服务器依赖特定共享内存对象的固定地址,地址空间布局随机化会导致有些活动发生错误

net.ipv4.ip_forward = 0    0表示禁用 IPv4 包转送

net.ipv4.neigh.default.gc_stale_time=120    ARP参数,检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。

net.ipv4.conf.all.rp_filter=0  

net.ipv4.conf.all.arp_announce=2    

net.ipv4.conf.lo.arp_announce=2


 /sbin/sysctl -p 生效 

/sbin/sysctl -a | grep net.core.netdev_max_backlog 查看

如果出现error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key


执行下面的命令加载对应模块:

modprobe ip_conntrack

lsmod |grep conn -- if you see entries it means modules have been loaded correctly

sysctl -w -- to write the changes you made under /etc/sysctl.conf

sysctl -p -- to view the changes and see if it was actually loaded.

还不行,把net.ipv4.netfilter.ip_conntrack_max替换为:

net.nf_conntrack_max = 131070试试看

除了调整内核参数,还需调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的。

执行Shell命令:

echo ulimit -HSn 65536 >> /etc/rc.local

echo ulimit -HSn 65536 >>/root/.bash_profile


Windows:

打开注册表编辑器,在运行栏输入:regedit

第一步:启动注册表编辑器HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  第二步:新建

        值名称:MaxUserPort

          值类型: DWORD

          值数据: 65534(用十进制的方法写进去就可以)

          有效范围: 5000 - 65534 (十进制)

          默认: 0x1388 5000 (十进制)

  第三步:新建

         值名称:TCPTimedWaitDelay

         值类型: DWORD

         值数据: 0000001e(也就是30,这个表示TIME_WAIT的秒数)

重启电脑


[root@localhost ~]# netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
CLOSE_WAIT         1348
ESTABLISHED        1240
TIME_WAIT          5621
[root@localhost ~]#


net.ipv4.tcp_syncookies = 1      #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1        #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1     #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;

net.ipv4.tcp_fin_timeout=30    #修改系統默认的 TIMEOUT 时间。表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

如果以上配置调优后性能还不理想,可继续修改一下配置:

net.ipv4.tcp_keepalive_time = 1200   #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range = 1024 65000    #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192     #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets = 5000     #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。

默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

#net.ipv4.route.gc_timeout = 100    #路由缓存刷新频率, 当一个路由失败后多长时间跳到另一个默认是300

net.ipv4.tcp_syn_retries = 1    #对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右。


若果tomcat服务做完以上优化后还是存在大量ESTABLISHED没有被释放,初步推断是tomcat服务器回收session时出了问题,这个一般都跟服务器的Timeout设置有联系。

查看tomcat的配置文件 server.xml

    

检查配置得出20000毫秒的时候acceptCount=”100” ,明显不合理,最大连接数也太小了。

connectionTimeout="20000" 改为 connectionTimeout="100"

acceptCount="100"改为acceptCount="5000"

如果程序连接了mysql,需要在程序代码中没有使用mysql.colse()。



ss

ss是Socket Statistics的缩写,用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。


网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。一个形象的比喻:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。


TCP连接的三次握手:

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”


利用Socket建立网络连接的步骤

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。


TCP和UDP的区别
TCP是面向链接的,TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议,但是UDP开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。


当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。ss利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。


ss常见命令参数

          如果没有指定任何选项,ss 列出所有已经建立、并不处在listen的TCP 套接字。

[root@localhost ~]# ss --help
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help          this message        #列出选项概要
   -V, --version       output version information
   -n, --numeric       don't resolve service names        #不尝试解析服务的名字
   -r, --resolve       resolve host names        #尝试解析数字地址/端口
   -a, --all           display all sockets        #显示处在listening 和 非listening 状态的套接字(对TCP来说,这意味所有已建立的连接)。
   -l, --listening     display listening sockets        #只显示处在 listening 状态的套接字(默认情况下它们是被忽略的)
   -o, --options       show timer information        #显示定时器信息
   -e, --extended      show detailed socket information        #显示定时器信息
   -m, --memory        show socket memory usage        #显示套接字的内存使用信息
   -p, --processes     show process using socket        #显示使用套接字的进程
   -i, --info          show internal TCP information    #显示使用套接字的进程    
   -s, --summary       show socket usage summary        #显示概要统计。该选项不分析来自不同来源的套接字概要信息。 当套接字的数量很大导致分析/proc/net/tcp 很痛苦时,它很有用。
   -b, --bpf           show bpf filter socket information        #显示套接字的BPF过滤(只有管理员能获取这些信息)
   -Z, --context       display process SELinux security contexts        #显示套接字的BPF过滤(只有管理员能获取这些信息)
   -z, --contexts      display process and socket SELinux security contexts       #同 -Z, 不过还显示套接字的上下文。 该套接字上下文是从inode里取出的、并不是内核持有的实际的socket上下文。 套接子通常以创建它的进程上下文标记, 但该上下文会反映已应用上的policy role, type and/or range , 因此这是个很有用的参考。 
   -N, --net           switch to the specified network namespace name

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet        display PACKET sockets        #只显示IPv4 套接字(-f inet的别名)
   -t, --tcp           display only TCP sockets
   -u, --udp           display only UDP sockets
   -d, --dccp          display only DCCP sockets
   -w, --raw           display only RAW sockets
   -x, --unix          display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY        #显示类型为FAMILY的套接字。 支持以下几个family: unix, inet,inet6,link,netlink

   -A, --query=QUERY, --socket=QUERY        #列出需要倒出的套接字列表,用逗号隔开。 支持以下标识符: all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, unix_seqpacket, packet_raw, packet_dgram
       QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE        #不显示任何内容,仅把原始TCP套接字信息存入文件FILE。 如果FILE为 - , 则使用stdout作为输出
   -F, --filter=FILE   read filter information from FILE        #从文件FILE中读取信息。 文件的每一行被认为是单个命令行参数。 如果FILE为 - , 则使用stdin。
       FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}
[root@localhost ~]#

把TCP连接过滤出来

[root@ds-worker-2-92 ~]# ss -aA tcp

只显示监听的套接字

[root@ds-worker-2-92 ~]# ss -lnt

打印进程名和进程号

[root@ds-worker-2-92 ~]# ss -ltp

打印统计概要

[root@ds-worker-2-92 ~]# ss -s
Total: 602 (kernel 2211)
TCP:   65 (estab 40, closed 3, orphaned 1, synrecv 0, timewait 3/0), ports 0

Transport Total     IP        IPv6
*      2211      -         -        
RAW      0         0         0        
UDP      5         4         1        
TCP      62        55        7        
INET      67        59        8        
FRAG      0         0         0        

[root@ds-worker-2-92 ~]#

列出处在 time-wait 状态的 IPv4 套接字

状态可以是以下任意一种
stablished
yn-sent
yn-recv
in-wait-1
in-wait-2
ime-wait
losed
lose-wait
ast-ack
closing
all – All of the above states
connected – All the states except for listen and closed
synchronized – All the connected states except for syn-sent
bucket – Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
big – Opposite to bucket state.

[root@ds-worker-2-92 ~]# ss -t4 state time-wait

显示所有源端口或目的端口为 ssh 的套接字,注意等号前后空格

root@localhost ~]# ss -at '( dport = :ssh or sport = :ssh )'

显示目的端口是1443或33061的套接字,注意冒号前空格

[root@localhost ~]# ss -nt '( dst :1443 or dst :33061 )'

对地址和端口过滤

[root@localhost ~]# ss -nt dst 10.10.15.44:1433

仅过滤端口

[root@localhost ~]# ss -nt dport = :1433

显示对方端口号小于100的套接字

[root@localhost ~]# ss -nt dport \< :1000

显示端口号大于1024的套接字

[root@localhost ~]# ss -nt dport gt :1024

显示对方端口是 80的套接字

[root@localhost ~]# ss -nt state connected dport = :80