<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOps技术分享 &#187; ss</title>
	<atom:link href="http://www.showerlee.com/archives/tag/ss/feed" rel="self" type="application/rss+xml" />
	<link>http://www.showerlee.com</link>
	<description>与你共同学习运维开发</description>
	<lastBuildDate>Mon, 19 Oct 2020 05:51:41 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>[Linux] server网络监控利器ss</title>
		<link>http://www.showerlee.com/archives/1741</link>
		<comments>http://www.showerlee.com/archives/1741#comments</comments>
		<pubDate>Thu, 26 Nov 2015 07:57:40 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[LINUX]]></category>
		<category><![CDATA[ss]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=1741</guid>
		<description><![CDATA[大家之前都比较常用netstat命令去获取本地server的一些连接信息, 或者利用该命令去编写一些脚本, 这 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	大家之前都比较常用netstat命令去获取本地server的一些连接信息, 或者利用该命令去编写一些脚本, 这个命令的优点在于已经基本上集成到windows, linux各个发行版内, 算是一个比较老牌的命令. 但对于日新月异的系统更新升级, 他对于高并发连接的系统往往会显露出执行效率缓慢的弊端.
</p>
<p>
	
</p>
<p>
	今天给大家要介绍一个笔者最近才接触到的命令<a href="http://www.showerlee.com/archives/tag/ss" title="查看ss中的全部文章" class="tag_link">ss</a>, 这个命令其实并不冷门, 基本在<span>ubuntu, centos的</span>minimal安装模式下系统都会将<a href="http://www.showerlee.com/archives/tag/ss" title="查看ss中的全部文章" class="tag_link">ss</a>集成到kernel系统内, 这个命令的优点在于比netstat返回的信息更加简单直观, 语法简洁实用, 而且执行效率更高.
</p>
<p>
	
</p>
<p>
	以下就给大家介绍利用ss的一些常用语法去检查本地网络连接状态.
</p>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>1. 列出所有连接(tcp, udp, unix socket)</strong></span>
</p>
<pre class="prettyprint lang-bsh">$ ss | less
Netid  State      Recv-Q Send-Q   Local Address: Port       Peer Address: Port   
u_str  ESTAB      0      0                    * 15545                 * 15544  
u_str  ESTAB      0      0                    * 12240                 * 12241  
u_str  ESTAB      0      0      @/tmp/dbus-2hQdRvvg49 12726                 * 12159  
u_str  ESTAB      0      0                    * 11808                 * 11256  
u_str  ESTAB      0      0                    * 15204                 * 15205  
.....</pre>
<p>
	
</p>
<p>
	<span style="font-size:14px;color:#337FE5;"><strong>2. 分别过滤出tcp, udp, unix连接</strong></span>
</p>
<p>
	<span style="color:#337FE5;">1). tcp连接</span>
</p>
<pre class="prettyprint lang-bsh">$ ss -t
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
ESTAB      0      0           192.168.1.2:43839     108.160.162.37:http    
ESTAB      0      0           192.168.1.2:43622     199.59.149.201:https   
ESTAB      0      0           192.168.1.2:33141      83.170.73.249:ircd    
ESTAB      0      0           192.168.1.2:54028     74.125.135.125:xmpp-client</pre>
<p>
	<span style="color:#E53333;">默认 -t 用来显示"establish"或者"connected", 如果要显示"Listening"状态的信息需使用 -at 参数&nbsp;</span>
</p>
<p>
	<span style="color:#337FE5;">2). udp连接</span>
</p>
<pre class="prettyprint lang-bsh">$ ss -ua
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
UNCONN     0      0           192.168.1.2:48268                  *:*       
UNCONN     0      0           192.168.1.2:56575                  *:*       
UNCONN     0      0                     *:40309                  *:*       
UNCONN     0      0           192.168.1.2:56879                  *:*       
UNCONN     0      0                     *:49014                  *:*       
UNCONN     0      0           192.168.1.2:53124                  *:*       
UNCONN     0      0             127.0.1.1:domain                 *:*</pre>
<p><span style="color:#337FE5;">3). unix连接</span> </p>
<pre class="prettyprint lang-bsh">$ ss -x
Netid State      Recv-Q Send-Q          Local Address:Port              Peer Address:Port   
u_str ESTAB      0      0                           * 10415                        * 0      
u_str ESTAB      0      0                           * 10416                        * 0      
u_str ESTAB      0      0                           * 10420                        * 0  
...</pre>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>3. 不解析域名连接</strong></span>
</p>
<pre class="prettyprint lang-bsh">$ ss -nt
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port 
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80    
ESTAB      0      0             192.168.1.2:51350      74.125.200.84:443   
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667  
ESTAB      0      0             192.168.1.2:54028     74.125.135.125:5222  
ESTAB      0      0             192.168.1.2:48156      66.196.120.44:5050</pre>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;">4. 显示"Listening" tcp socket 非主机名连接</span>
</p>
<pre class="prettyprint lang-bsh">$ ss -ltn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port 
LISTEN     0      5                 127.0.1.1:53                       *:*     
LISTEN     0      128               127.0.0.1:631                      *:*     
LISTEN     0      128                     ::1:631                     :::*</pre>
<p><span style="color:#E53333;">若要显示utp连接则将t修改成u</span> </p>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>5. 显示进程name和id</strong></span>
</p>
<pre class="prettyprint lang-bsh">$ ss -ltp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
LISTEN     0      100           127.0.0.1:smtp                   *:*       
LISTEN     0      128           127.0.0.1:9050                   *:*       
LISTEN     0      128                   *:90                     *:*       
LISTEN     0      128                   *:db-lsp                 *:*        users:(("dropbox",3566,32))
LISTEN     0      5             127.0.0.1:6600                   *:*       
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0))</pre>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>6. 获取统计信息</strong></span>
</p>
<pre class="prettyprint lang-bsh">$ ss -s
Total: 526 (kernel 0)
TCP:   10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*	  0         -         -        
RAW	  0         0         0        
UDP	  15        9         6        
TCP	  10        9         1        
INET	  25        18        7        
FRAG	  0         0         0</pre>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>7. 获取</strong></span><span style="color:#337FE5;font-size:14px;"><strong>时间信息</strong></span>
</p>
<pre class="prettyprint lang-bsh">$ ss -tn -o
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port 
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80    
ESTAB      0      0             192.168.1.2:36335     204.144.140.26:80     timer:(keepalive,26sec,0)
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667  
ESTAB      0      0             192.168.1.2:58857      74.121.141.84:80     timer:(keepalive,23sec,0)
ESTAB      0      0             192.168.1.2:42794     173.194.40.239:80     timer:(keepalive,32sec,0)</pre>
<p>
	
</p>
<p><span style="color:#337FE5;font-size:14px;"><strong>8. 显示ipv4或者v6的连接</strong></span> </p>
<pre class="prettyprint lang-bsh">$ ss -tl -f inet
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
LISTEN     0      100           127.0.0.1:smtp                   *:*       
LISTEN     0      128           127.0.0.1:9050                   *:*       
LISTEN     0      128                   *:90                     *:*       
LISTEN     0      128                   *:db-lsp                 *:*       
LISTEN     0      5             127.0.0.1:6600                   *:*</pre>
<p>
	
</p>
<pre class="prettyprint lang-bsh">$ ss -tl6
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
LISTEN     0      100                 ::1:smtp                  :::*       
LISTEN     0      128                  :::12865                 :::*       
LISTEN     0      128                  :::http                  :::*       
LISTEN     0      128                  :::ssh                   :::*       
LISTEN     0      128                 ::1:ipp                   :::*</pre>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>9. 过滤tcp状态连接.</strong></span>
</p>
<p>
	ss命令的好处在于可以过滤具体条件的连接, 常用的信息可以不需要额外利用管道符配合.
</p>
<p>
	他的语法格式:
</p>
<p>
	<span style="color:#E53333;"># ss [条件] &nbsp;[状态过滤] &nbsp;[地址过滤]</span>
</p>
<p>
	
</p>
<p>
	<span style="color:#337FE5;">1). 显示所有ipv4 tcp connected状态的连接</span>
</p>
<pre class="prettyprint lang-bsh">$ ss -t4 state established
Recv-Q Send-Q         Local Address:Port             Peer Address:Port   
0      0                192.168.1.2:54436          165.193.246.23:https   
0      0                192.168.1.2:43386          173.194.72.125:xmpp-client 
0      0                192.168.1.2:38355           199.59.150.46:https   
0      0                192.168.1.2:56198          108.160.162.37:http</pre>
<p><span style="color:#337FE5;">2). </span><span style="color:#337FE5;">显</span><span style="color:#337FE5;">示所有ipv4 tcp time-wait状态的连接</span></p>
<p>
	<span> </span>
</p>
<pre class="prettyprint lang-bsh">$ ss -t4 state time-wait
Recv-Q Send-Q         Local Address:Port             Peer Address:Port   
0      0                192.168.1.2:42261           199.59.150.39:https   
0      0                  127.0.0.1:43541               127.0.0.1:2633</pre>
<p>以下是其他可用的状态</p>
<p>
	<span> </span>
</p>
<pre class="prettyprint lang-bsh"> 1. established
 2. syn-sent
 3. syn-recv
 4. fin-wait-1
 5. fin-wait-2
 6. time-wait
 7. closed
 8. close-wait 
 9. last-ack
 10. closing
 11. all - All of the above states
 12. connected - All the states except for listen and closed
 13. synchronized - All the connected states except for syn-sent
 14. bucket - Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
 15. big - Opposite to bucket state.</pre>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><strong>10. 通过地址和端口号过滤</strong></span>
</p>
<p>
	<span>除了socket过滤, ss也支持基于地址和端口号的过滤格式.</span>
</p>
<p>
	<span style="color:#337FE5;">1). 显示所有源地址和目的地址都为ssh端口的socket连接.</span>
</p>
<p>
	<span> </span>
</p>
<pre class="prettyprint lang-bsh">$ ss -at '( dport = :ssh or sport = :ssh )'
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
LISTEN     0      128                   *:ssh                    *:*       
LISTEN     0      128                  :::ssh                   :::*</pre>
<p>
	<span style="color:#337FE5;"><span style="color:#337FE5;">2). 目的端口为443或80的所有socket连接.</span></span>
</p>
<p>
	<span> </span>
</p>
<pre class="prettyprint lang-bsh">$ ss -nt '( dst :443 or dst :80 )'
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port 
ESTAB      0      0             192.168.1.2:58844      199.59.148.82:443   
ESTAB      0      0             192.168.1.2:55320     165.193.246.23:443   
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80    
ESTAB      0      0             192.168.1.2:54889    192.241.177.148:443   
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80    
ESTAB      0      0             192.168.1.2:33440      38.127.167.38:443</pre>
<p>或者可以这么简写</p>
<p>
	<span> </span>
</p>
<pre class="prettyprint lang-bsh">$ ss -nt dst :443 or dst :80</pre>
<p>
	<span style="color:#337FE5;"><br />
</span>
</p>
<p>
	<span style="color:#337FE5;">更多例子:</span>
</p>
<p>
	<span> </span>
</p>
<pre class="prettyprint lang-bsh"># 通过地址过滤
$ ss -nt dst 74.125.236.178

# 简写子网过滤
$ ss -nt dst 74.125.236.178/16

# 地址和端口过滤
$ ss -nt dst 74.125.236.178:80

# 目的端口过滤
$ ss -nt dport = :80
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port 
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80    
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80    
ESTAB      0      0             192.168.1.2:55043     74.125.236.178:80

# 源地址为127.0.0.1且源端口大于5000的TCP连接
$ ss -nt src 127.0.0.1 sport gt :5000

# 本地smtp (port 25) socket连接
$ ss -ntlp sport eq :smtp

# 端口大于25的连接
$ ss -nt sport gt :25

# 目的地址端口小于100的连接
$ ss -nt dport \&lt; :100

# 连接到远程80端口的连接
$ sudo ss -nt state connected dport = :80</pre>
<p>
	
</p>
<p>
	<span style="font-size:16px;color:#337FE5;"><strong>总结</strong></span>
</p>
<p>
	<span style="color:#337FE5;">以上所有的例子基本上涵盖了所有ss的常用支持, &nbsp;更多介绍可以使用man查看他的官方文档</span>
</p>
<p>
	</p>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/1741">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="[Linux] server网络监控利器ss" href="http://www.showerlee.com/archives/1741">http://www.showerlee.com/archives/1741</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/1741/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
