简介:

Socket Statisticsss)命令类似于netstat,它用于显示各种有用的网络套接字信息。

长时间看,已经注意到netstat这个命令程序已经过时了。从而代替netstat的是ss命令。一个全新的ss命令使用起来必定有些陌生,不过ss许多选项与netstat使用的选项类似,但我们还会看到一些差异。

ss命令是Linux CentOS 7iproute软件包的一部分,默认已经安装。

一般来说,网络套接字是由IP地址,传输协议和端口来定义的。这种组合构成了双向连接的一个方面。例如:一个Web服务器可能正在侦听172.28.204.62:80上的传入TCP连接,这是套接字。不过需要说明的是套接字不是连接本身,而是连接的端点之一。

下面我讲解如何使用ss命令查看各种信息。具体使用语法如下:

  1. ss [options] [ FILTER ]

1.列出已建立的连接

默认情况下,如果我们运行ss命令而没有指定其他选项,它将显示所有已建立连接的打开的非侦听套接字的列表,例如TCPUDPUNIX套接字。

  1. [root@renwolecom ~]# ss | head -n 5
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. u_str ESTAB 0 0 * 19098 * 18222
  4. u_str ESTAB 0 0 * 19441 * 19440
  5. u_str ESTAB 0 0 * 19440 * 19441
  6. u_str ESTAB 0 0 * 19396 * 19397

2.显示监听套接字

我们可以使用-l选项专门列出当前正在侦听连接的套接字,而不是列出所有的套接字。

  1. [root@renwolecom ~]# ss -lt
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:http *:*
  4. LISTEN 0 100 127.0.0.1:smtp *:*
  5. LISTEN 0 128 *:entexthigh *:*
  6. LISTEN 0 128 172.28.204.62:zabbix-trapper *:*
  7. LISTEN 0 128 127.0.0.1:cslistener *:*
  8. LISTEN 0 80 :::mysql :::*
  9. LISTEN 0 100 ::1:smtp :::*
  10. LISTEN 0 128 :::entexthigh :::*

在这个示例中,我们还使用-t选项只列出TCP,稍后将对此进行详细说明。在后面的例子中,你会看到我将结合多种选择,以快速过滤掉,从而达到我们的目的。

3.显示进程

我们可以用-p选项打印出拥有套接字的进程或PID号。

  1. [root@renwolecom ~]# ss -pl
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. tcp LISTEN 0 128 :::http :::* users:(("httpd",pid=10522,fd=4),("httpd",pid=10521,fd=4),("httpd",pid=10520,fd=4),("httpd",pid=10519,fd=4),("httpd",pid=10518,fd=4),("httpd",pid=10516,fd=4))

在上面的例子中我只列出了一个结果,没有进行进一步选项,因为ss的完整输出打印出超过500行到标准输出。所以我只列出一条结果,由此我们可以看到服务器上运行的各种Apache进程ID。

4.不解析服务名称

默认情况下,ss只会解析端口号,例如在下面的行中,我们可以看到172.28.204.62:mysql,其中mysql被列为本地端口。

  1. [root@renwolecom ~]# ss
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:38920
  4. tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:51598
  5. tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:51434
  6. tcp ESTAB 0 0 ::ffff:172.28.204.62:mysql ::ffff:172.28.204.62:36360

但是,如果我们指定-n选项,看到的是端口号而不是服务名称。

  1. [root@renwolecom ~]# ss -n
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:38920
  4. tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:51598
  5. tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:51434
  6. tcp ESTAB 0 0 ::ffff:172.28.204.62:3306 ::ffff:172.28.204.62:36360

现在显示3306,而非mysql,因为禁用了主机名和端口的所有名称解析。另外你还可以查看/etc/services得到所有服务对应的端口列表。

5.解析数字地址/端口

-r选项可以解析IP地址和端口号。用此方法可以列出172.28.204.62服务器的主机名。

  1. [root@renwolecom ~]# ss -r
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. tcp ESTAB 0 0 renwolecom:mysql renwolecom:48134

6.IPv4套接字

我们可以通过-4选项只显示与IPv4套接字对应的信息。在下面的例子中,我们还使用-l选项列出了在IPv4地址上监听的所有内容。

  1. [root@renwolecom ~]# ss -l4
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. tcp LISTEN 0 128 *:http *:*
  4. tcp LISTEN 0 100 127.0.0.1:smtp *:*
  5. tcp LISTEN 0 128 *:entexthigh *:*
  6. tcp LISTEN 0 128 172.28.204.62:zabbix-trapper *:*
  7. tcp LISTEN 0 128 127.0.0.1:cslistener *:*

7.IPv6套接字

同样,我们可以使用-6选项只显示与IPv6套接字相关信息。在下面的例子中,我们还使用-l选项列出了在IPv6地址上监听的所有内容。

  1. [root@renwolecom ~]# ss -l6
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. udp UNCONN 0 0 :::ipv6-icmp :::*
  4. udp UNCONN 0 0 :::ipv6-icmp :::*
  5. udp UNCONN 0 0 :::21581 :::*
  6. tcp LISTEN 0 80 :::mysql :::*
  7. tcp LISTEN 0 100 ::1:smtp :::*
  8. tcp LISTEN 0 128 :::entexthigh :::*

8.只显示TCP

-t选项只显示TCP套接字。当与-l结合只打印出监听套接字时,我们可以看到所有在TCP上侦听的内容。

  1. [root@renwolecom ~]# ss -lt
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:http *:*
  4. LISTEN 0 100 127.0.0.1:smtp *:*
  5. LISTEN 0 128 *:entexthigh *:*
  6. LISTEN 0 128 172.28.204.62:zabbix-trapper *:*
  7. LISTEN 0 128 127.0.0.1:cslistener *:*
  8. LISTEN 0 80 :::mysql :::*
  9. LISTEN 0 100 ::1:smtp :::*
  10. LISTEN 0 128 :::entexthigh :::*

9.显示UDP

-u选项可用于仅显示UDP套接字。由于UDP是一种无连接的协议,因此只运行-u选项将不显示输出,我们可以将它与-a-l选项结合使用,来查看所有侦听UDP套接字,如下所示:

  1. [root@renwolecom ~]# ss -ul
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. UNCONN 0 0 *:sunwebadmins *:*
  4. UNCONN 0 0 *:etlservicemgr *:*
  5. UNCONN 0 0 *:dynamid *:*
  6. UNCONN 0 0 *:9003 *:*
  7. UNCONN 0 0 *:9004 *:*
  8. UNCONN 0 0 127.0.0.1:terabase *:*
  9. UNCONN 0 0 *:56803 *:*

10. Unix套接字

-x选项只能用来显示unix域套接字。

  1. [root@renwolecom ~]# ss -x
  2. Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 23555 * 21093
  4. u_str ESTAB 0 0 /tmp/zabbix_server_ipmi.sock 20155 * 19009
  5. u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 19354 * 22573
  6. u_str ESTAB 0 0 /tmp/zabbix_server_preprocessing.sock 21844 * 19375
  7. ...

11.显示所有信息

-a选项显示所有的监听和非监听套接字,在TCP的情况下,这意味着已建立的连接。这个选项与其他的组合很有用,例如可以添加-a选项显示所有的UDP套接字,默认情况下只有-u选项我们看不到多少信息。

  1. [root@renwolecom ~]# ss -u
  2. Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. 0 0 172.28.204.66:36371 8.8.8.8:domain
  4. [root@renwolecom ~]# ss -ua
  5. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  6. UNCONN 0 0 *:sunwebadmins *:*
  7. UNCONN 0 0 *:etlservicemgr *:*
  8. UNCONN 0 0 *:dynamid *:*
  9. UNCONN 0 0 *:9003 *:*
  10. UNCONN 0 0 *:9004 *:*
  11. UNCONN 0 0 127.0.0.1:terabase *:*
  12. UNCONN 0 0 *:56803 *:*
  13. ESTAB 0 0 172.28.204.66:36371 8.8.8.8:domain

12.显示套接字内存使用情况

-m选项可用于显示每个套接字使用的内存量。

  1. [root@renwolecom ~]# ss -ltm
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:http *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  4. LISTEN 0 100 127.0.0.1:smtp *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  5. LISTEN 0 128 *:entexthigh *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  6. LISTEN 0 128 172.28.204.62:zabbix-trapper *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  7. LISTEN 0 128 127.0.0.1:cslistener *:*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  8. LISTEN 0 80 :::mysql :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  9. LISTEN 0 100 ::1:smtp :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
  10. LISTEN 0 128 :::entexthigh :::*skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)

13.显示TCP内部信息

我们可以使用-i选项请求额外的内部TCP信息。

  1. [root@renwolecom ~]# ss -lti
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:chimera-hwm *:* bbr cwnd:10
  4. LISTEN 0 128 *:etlservicemgr *:* bbr cwnd:10
  5. LISTEN 0 128 172.28.204.66:27017 *:* bbr cwnd:10
  6. LISTEN 0 128 127.0.0.1:27017 *:* bbr cwnd:10
  7. LISTEN 0 128 *:dynamid *:* bbr cwnd:10
  8. LISTEN 0 128 *:9003 *:* bbr cwnd:10
  9. LISTEN 0 128 *:9004 *:* bbr cwnd:10
  10. LISTEN 0 128 *:http *:* bbr cwnd:10
  11. LISTEN 0 128 *:ssh *:* bbr cwnd:10
  12. LISTEN 0 100 127.0.0.1:smtp *:* bbr cwnd:10
  13. LISTEN 0 128 *:sunwebadmins *:* bbr cwnd:10
  14. LISTEN 0 128 :::ssh :::* bbr cwnd:10

在每个侦听套接字下面,我们可以看到更多信息。注意:-i选项不适用于UDP,如果您指定-u,而非-t,则不会显示这些额外的信息。

14.显示统计信息

我们可以使用-s选项快速查看统计数据。

  1. [root@renwolecom ~]# ss -s
  2. Total: 798 (kernel 1122)
  3. TCP: 192 (estab 99, closed 81, orphaned 0, synrecv 0, timewait 1/0), ports 0
  4. Transport Total IP IPv6
  5. * 1122 - -
  6. RAW 1 0 1
  7. UDP 0 0 0
  8. TCP 111 59 52
  9. INET 112 59 53
  10. FRAG 0 0 0

这使我们能够快速看到已建立连接的总数,及各种类型的套接字的计数和IPv4或IPv6的使用情况。

15.基于状态的过滤器

我们可以指定一个套接字的状态,只打印这个状态下的套接字。例如,我们可以指定包括已建立, established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack监听和关闭等状态。以下示例显示了所有建立的TCP连接。为了生成这个,我通过SSH连接到了服务器,并从Apache加载了一个网页。然后我们可以看到与Apache的连接迅速转变为等待时间。

  1. [root@renwolecom ~]# ss -t state established
  2. Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. 0 52 172.28.204.67:ssh 123.125.71.38:49518
  4. 0 0 ::ffff:172.28.204.67:http ::ffff:123.125.71.38:49237
  5. [root@renwolecom ~]# ss -t state established
  6. Recv-Q Send-Q Local Address:Port Peer Address:Port
  7. 0 0 172.28.204.67:ssh 103.240.143.126:55682
  8. 0 52 172.28.204.67:ssh 123.125.71.38:49518
  9. 0 0 ::ffff:172.28.204.67:http ::ffff:123.125.71.38:49262

16.根据端口号进行过滤

可以通过过滤还可以列出小于(lt),大于(gt),等于(eq),不等于(ne),小于或等于(le),或大于或等于(ge)的所有端口。

例如,以下命令显示端口号为500或以下的所有侦听端口:

  1. [root@renwolecom ~]# ss -ltn sport le 500
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:80 *:*
  4. LISTEN 0 100 127.0.0.1:25 *:*
  5. LISTEN 0 100 ::1:25 :::*

为了进行比较,我们可以执行相反的操作,并查看大于500的所有端口:

  1. [root@renwolecom ~]# ss -ltn sport gt 500
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:12002 *:*
  4. LISTEN 0 128 172.28.204.62:10051 *:*
  5. LISTEN 0 128 127.0.0.1:9000 *:*
  6. LISTEN 0 80 :::3306 :::*
  7. LISTEN 0 128 :::12002 :::*

我们还可以根据源或目标端口等项进行筛选,例如,我们搜索具有SSH源端口运行的TCP套接字:

  1. [root@renwolecom ~]# ss -t '( sport = :ssh )'
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. ESTAB 0 0 172.28.204.66:ssh 123.125.71.38:50140

17.显示SELinux上下文

  1. -Z`与`-z`选项可用于显示套接字的SELinux安全上下文。 在下面的例子中,我们使用`-t`和-l`选项来列出侦听的TCP套接字,使用-Z选项我们也可以看到SELinux的上下文。
  2. [root@renwolecom ~]# ss -tlZ
  3. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  4. LISTEN 0 128 *:sunrpc *:*
  5. users:(("systemd",pid=1,proc_ctx=system_u:system_r:init_t:s0,fd=71))
  6. LISTEN 0 5 172.28.204.62:domain *:*
  7. users:(("dnsmasq",pid=1810,proc_ctx=system_u:system_r:dnsmasq_t:s0-s0:c0.c1023,fd=6))
  8. LISTEN 0 128 *:ssh *:*
  9. users:(("sshd",pid=1173,proc_ctx=system_u:system_r:sshd_t:s0-s0:c0.c1023,fd=3))
  10. LISTEN 0 128 127.0.0.1:ipp *:*
  11. users:(("cupsd",pid=1145,proc_ctx=system_u:system_r:cupsd_t:s0-s0:c0.c1023,fd=12))
  12. LISTEN 0 100 127.0.0.1:smtp *:*
  13. users:(("master",pid=1752,proc_ctx=system_u:system_r:postfix_master_t:s0,fd=13))

18.显示版本号

-v选项可用于显示ss命令的特定版本信息,在这种情况下,我们可以看到提供ssiproute包的版本。

  1. [root@renwolecom ~]# ss -v
  2. ss utility, iproute2-ss130716

19.显示帮助文档信息

-h选项可用于显示有关ss命令的进一步的帮助,如果需要对最常用的一些选项进行简短说明,则可以将其用作快速参考。 请注意:这里并未输入完整列表。

  1. [root@renwolecom ~]# ss -h
  2. Usage: ss [ OPTIONS ]

20.显示扩展信息

我们可以使用-e选项来显示扩展的详细信息,如下所示,我们可以看到附加到每条行尾的扩展信息。

  1. [root@renwolecom ~]# ss -lte
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. LISTEN 0 128 *:sunrpc *:* ino:16090 sk:ffff880000100000 <->
  4. LISTEN 0 5 172.28.204.62:domain *:* ino:23750 sk:ffff880073e70f80 <->
  5. LISTEN 0 128 *:ssh *:* ino:22789 sk:ffff880073e70000 <->
  6. LISTEN 0 128 127.0.0.1:ipp *:* ino:23091 sk:ffff880073e707c0 <->
  7. LISTEN 0 100 127.0.0.1:smtp *:* ino:24659 sk:ffff880000100f80 <->

21.显示计时器信息

-o选项可用于显示计时器信息。该信息向我们展示了诸如重新传输计时器值、已经发生的重新传输的数量以及已发送的keepalive探测的数量。

  1. [root@renwolecom ~]# ss -to
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. ESTAB 0 52 172.28.204.67:ssh 123.125.71.38:49518timer:(on,406ms,0)
  4. LAST-ACK 0 1 172.28.204.67:ssh 103.240.143.126:49603timer:(on,246ms,0)

总结:

现在你应该对ss有了初步的认识。如果你想使用ss命令快速检查有关套接字的各种信息,建议你查阅ss的相关手册。

原文:https://renwole.com/archives/814

命令备忘 ss的更多相关文章

  1. metasploit 常用命令备忘

    metasploit 常用命令备忘    MSFconsole Commands-------------------------------------24show exploits 查看所有exp ...

  2. git 命令备忘

    git 常用命令备忘 仅作为日常使用备忘,并非常用命名整理 删除源端分支 git push orgin --delete branch_a a分支某次提交应用到b分支 切换到branch_b 分支: ...

  3. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  4. 实用Shell命令备忘

    开场白:这里简单记录一些常用的bash命令,一则备忘,二来希望可以帮助别人解决一些问题. 1.检测文件是否存在 if [ -f ./foo.txt ] then echo the file exist ...

  5. 常用linux命令备忘

    备忘: 关闭防火墙:# systemctl stop firewalld 查看防火墙状态:#  systemctl status firewalld 停止防火墙:#  systemctl disabl ...

  6. Git命令备忘

    最近在用Git,查了点相关资料,逻辑依然不太明了,先整理一部分备忘,以后补充 一.本地Git与Github/码云的关联 1. 设置本地用户名,邮箱 git config --global user.n ...

  7. CentOS常用命令备忘

    1. 查看进程 ps -a 杀掉进程 kill PID 2. 添加计划任务crontab -e 例如:30 21 * * * service httpd restart 每天21:30重启apache ...

  8. Maven 常用命令, 备忘

    Maven在现在的Java项目中有非常重要的地位, Maven已经不是Ant这样仅仅用于构建, 首先, 它是一个构建工具, 把源代码编译并打包成可发布应用的构件工具其次, 它是一个依赖管理工具, 集中 ...

  9. GIT常用命令备忘

    Git配置 git config --global user.name "storm" git config --global user.email "stormzhan ...

随机推荐

  1. 14-2 SQL语言简介

    1.结构化查询语言(Structured Query Language,SQL),常被读作sequel,最初是由Microsoft.Sybase和Ashton-Tate这3家公司共同开发的. 2.Wi ...

  2. DevExtreme学习笔记(一) DataGrid中注意事项

    1.阻止cell编辑 config.onEditorPreparing = function (e) { if (e.dataField === 'xx' && e.row.data. ...

  3. ZeroMQ自查手册

    简介 ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单.简洁和性能更高.是一个消息处理队列库,可在 ...

  4. 1+X证书学习日志 —— css样式表

    ## 因为初级的内容较多,所以选了一些有用的 需要记忆的内容写下 方便日后回顾 CSS语法   选择符{属性:属性值;} ##             所有的css代码 都要放在css样式表里面    ...

  5. 在vue中使用jsx语法

    什么是JSX? JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解 ...

  6. 彻底终结MySQL同步延迟问题

    作为一名DBA,在工作中会经常遇到一些MySQL主从同步延迟的问题,这些同步慢的问题,其实原因非常多,可能是因为主从的网络问题导致,可能是因为网络带宽问题导致,可能是因为大事务导致,也可能是因为单线程 ...

  7. WebAssembly(wasm)是什么?——学习

    WebAssembly 是一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案. 参考文章标题:几张图让你看懂WebAssembly 参考地址:https://www. ...

  8. EF映射——从数据库更新实体

    最近在做ITOO项目,由于更新了数据库,需要重新从数据库映射到实体,本来看过关于EF的学习资料,直接可以从数据库更新到实体,但这种小事也是有很多问题的,必须在更新的时候做好选择.下面分享一下如何从数据 ...

  9. java的一些代码阅读笔记

    读了一点源码,很浅的那种,有些东西觉得很有趣,记录一下. ArrayList的本质是Object[] public ArrayList(int initialCapacity) { if (initi ...

  10. mac pro下安装brew软件包管理工具

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载软件. 1.打开终端直接输入下面指令回车: ruby -e "$(curl -fsSL h ...