-
1. List Established Connections
By default if we run the ss command with no further options
specified it will display a list of open non-listening
sockets that have established connections, so for example
TCP, UDP or UNIX sockets.
[root@centos7 ~]# ss | head -n 5
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 23740 * 23739
u_str ESTAB 0 0 * 23707 * 23706
u_str ESTAB 0 0 * 87021 * 88383
u_str ESTAB 0 0 * 17056 * 17112
In the above example I have limited the output, on my
server I have over 500 lines printed out by running the ss
command, so you may wish to pipe it into something like less
to easily read it, or otherwise append additional options on
the end to only show what you’re after.
-
2. Show Listening Sockets
Rather than listing all sockets, we can use the -l option
to specifically list the sockets that are currently
listening for a connection.
[root@centos7 ~]# ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 2 *:kerberos-adm *:*
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 5 *:kpasswd *:*
LISTEN 0 10 192.168.1.14:domain *:*
LISTEN 0 10 127.0.0.1:domain *:*
LISTEN 0 5 192.168.122.1:domain *:*
LISTEN 0 128 *:ssh *:*
In this example we have also used the -t option to only
list TCP, more on this later. In future examples you will
see that we will combine multiple options like this in order
to quickly filter down to what we’re after.
-
3. Show Processes
We can print out the process or PID number that owns a
socket with the -p option.
[root@centos7 ~]# ss -pl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
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))
In the above example I have only listed a single result,
without any further options the full output of ss prints out
over 500 lines to stdout. Regardless, we can see the process
ID’s of the various Apache processes that are running on
this server.
-
4. Don’t Resolve Service Names
By default ss will only resolve port numbers as we have
previously seen, for example in the line below we can see
192.168.1.14:ssh where ssh is listed as the local port.
[root@centos7 ~]# ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 64 192.168.1.14:ssh 192.168.1.191:57091
However if we specify the -n option, this resolution will
not take place and we will instead see the port number
rather than the service name.
[root@centos7 ~]# ss -n
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.14:22 192.168.1.191:57091
Note that :22 is now displayed rather than :ssh as we have
disabled all name resolution of hostnames and ports. You can
check the /etc/services file to see a full list of which
ports map to which services.
-
5. Resolve Numeric Address/Ports
We can also do the opposite of this and resolve both the IP
address and port number with the -r option. With this we now
see the hostname of the 192.168.1.14 server listed.
[root@centos7 ~]# ss -r
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 64 centos7.example.com:ssh 192.168.1.191:57091
-
6. IPv4 Sockets
We can use the -4 option to only display information
corresponding to IPv4 sockets. In the below example we also
make use of the -l option to list everything listening on an
IPv4 address.
[root@centos7 ~]# ss -l4
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.1:323 *:*
udp UNCONN 0 0 192.168.122.1:domain *:*
udp UNCONN 0 0 *%virbr0:bootps *:*
udp UNCONN 0 0 *:bootpc *:*
tcp LISTEN 0 128 *:sunrpc *:*
tcp LISTEN 0 5 192.168.122.1:domain *:*
tcp LISTEN 0 128 *:ssh *:*
tcp LISTEN 0 128 127.0.0.1:ipp *:*
tcp LISTEN 0 100 127.0.0.1:smtp *:*
-
7. IPv6 Sockets
Likewise, we can use the -6 option to only display
information related to IPv6 sockets. In the below example we
also make use of the -l option to list everything listening
on an IPv6 address.
[root@centos7 ~]# ss -l6
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 :::ipv6-icmp :::*
udp UNCONN 0 0 :::22834 :::*
udp UNCONN 0 0 ::1:323 :::*
tcp LISTEN 0 128 :::sunrpc :::*
tcp LISTEN 0 128 :::http :::*
tcp LISTEN 0 128 :::ssh :::*
tcp LISTEN 0 128 ::1:ipp :::*
tcp LISTEN 0 100 ::1:smtp :::*
-
8. TCP Only
The -t option can be used to display only TCP sockets. When
combined with -l to only print out listening sockets we can
see everything listening on TCP.
[root@centos7 ~]# ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 5 192.168.122.1:domain *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 127.0.0.1:ipp *:*
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 :::sunrpc :::*
LISTEN 0 128 :::http :::*
LISTEN 0 128 :::ssh :::*
LISTEN 0 128 ::1:ipp :::*
LISTEN 0 100 ::1:smtp :::*
-
9. UDP Only
The -u option can be used to display only UDP sockets. As
UDP is a connection-less protocol, simply running with only
the -u option will display no output. We can instead combine
this with the -a or -l option to see all listening UDP
sockets, as shown below.
[root@centos7 ~]# ss -ul
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 *:kpasswd *:*
UNCONN 0 0 *:839 *:*
UNCONN 0 0 *:36812 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 192.168.1.14:domain *:*
-
10. Unix Sockets
The -x option can be used to display unix domain sockets
only.
[root@centos7 ~]# ss -x
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 @/tmp/.X11-unix/X0 27818 * 27817
u_str ESTAB 0 0 @/tmp/.X11-unix/X0 26656 * 26655
u_str ESTAB 0 0 * 28344 * 26607
u_str ESTAB 0 0 * 24704 * 24705
u_str ESTAB 0 0 @/tmp/.X11-unix/X0 25195 * 24086
u_str ESTAB 0 0 @/tmp/dbus-CRqRiw6V 28388 * 28693
...
-
11. Display All Information
the -a option shows all, both listening and non-listening
sockets. In the case of TCP this means established
connections. This option is useful for combining with
others, for instance to show all UDP sockets we can add -a,
as by default with just the -u option we don’t see as much
information.
[root@centos7 ~]# ss -u
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 192.168.1.14:56658 129.250.35.251:ntp
[root@centos7 ~]# ss -ua
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:mdns *:*
UNCONN 0 0 127.0.0.1:323 *:*
ESTAB 0 0 192.168.1.14:56658 129.250.35.251:ntp
UNCONN 0 0 *:21014 *:*
UNCONN 0 0 *:60009 *:*
UNCONN 0 0 192.168.122.1:domain *:*
UNCONN 0 0 *%virbr0:bootps *:*
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 ::1:323 :::*
UNCONN 0 0 :::43209 :::*
-
12. Show Socket Memory Usage
The -m option can be used to display the amount of memory
that each socket is using.
[root@centos7 ~]# ss -ltm
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 5 192.168.122.1:domain *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 128 *:ssh *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 128 127.0.0.1:ipp *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
LISTEN 0 100 127.0.0.1:smtp *:*
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
-
13. Show Internal TCP Information
We can request additional internal TCP information with the
-i info option.
[root@centos7 ~]# ss -lti
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 5 192.168.122.1:domain *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 128 *:ssh *:*
cubic rto:1000 mss:536 cwnd:10 segs_in:2 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 128 127.0.0.1:ipp *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
LISTEN 0 100 127.0.0.1:smtp *:*
cubic rto:1000 mss:536 cwnd:10 lastsnd:373620 lastrcv:373620 lastack:373620
Underneath each listening socket we can see additional
information. Note that the -i option does not work with UDP,
if you instead specify -u instead of -t this extra
information will not be present.
-
14. Show Summary
We can see a quick overview of the statistics with the -s
option.
[root@centos7 ~]# ss -s
Total: 1253 (kernel 1721)
TCP: 13 (estab 1, closed 2, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 1721 - -
RAW 1 0 1
UDP 9 7 2
TCP 11 6 5
INET 21 13 8
FRAG 0 0 0
This quickly allows us to see things like the total number
of established connections, as well as counts of each type
of socket and whether IPv4 or IPv6 is in use.
-
15. Filter Based On State
We can specify the state of a socket to only print out
sockets in this state. For example we can specify states
including established, syn-sent, syn-recv, fin-wait-1,
fin-wait-2, time-wait, closed, closed-wait, last-ack, listen
and closing. The below example shows all established TCP
connections. To generate this I was connected to the server
by SSH and just loaded a web page from Apache. We can then
see that the connections to Apache quickly change to
time-wait.
[root@centos7 ~]# ss -t state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 64 192.168.1.14:ssh 192.168.1.191:57091
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57373
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57372
[root@centos7 ~]# ss -t state time-wait
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57373
0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57372
-
16. Filter Based On Port Number
Filtering can also be performed to list all ports that are
less than (lt), greater than (gt), equal to (eq), not equal
to (ne), less than or equal to (le), or greater than or
equal to (ge).
For example, the below command shows all listening ports on
port number 500 or below.
[root@centos7 ~]# ss -ltn sport le 500
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
For comparison we can perform the opposite, and view all
ports greater than 500 with ‘gt’
[root@centos7 ~]# ss -ltn sport gt 500
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
We can also filter based on items such as source or
destination port, for example below we search for TCP
sockets that have a source port (sport) of ssh.
[root@centos7 ~]# ss -t '( sport = :ssh )'
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 64 192.168.1.14:ssh 192.168.1.191:57091
-
17. Show SELinux Context
The -Z and -z options can be used to show the SELinux
security context of a socket. In the example below we also
use the -t and -l options to only list listening TCP
sockets, with the -Z option we can also see the SELinux
contexts.
[root@centos7 ~]# ss -tlZ
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:* users:(("systemd",pid=1,proc_ctx=system_u:system_r:init_t:s0,fd=71))
LISTEN 0 5 192.168.122.1:domain *:* users:(("dnsmasq",pid=1810,proc_ctx=system_u:system_r:dnsmasq_t:s0-s0:c0.c1023,fd=6))
LISTEN 0 128 *:ssh *:* users:(("sshd",pid=1173,proc_ctx=system_u:system_r:sshd_t:s0-s0:c0.c1023,fd=3))
LISTEN 0 128 127.0.0.1:ipp *:* users:(("cupsd",pid=1145,proc_ctx=system_u:system_r:cupsd_t:s0-s0:c0.c1023,fd=12))
LISTEN 0 100 127.0.0.1:smtp *:* users:(("master",pid=1752,proc_ctx=system_u:system_r:postfix_master_t:s0,fd=13))
-
18. Display Version
The -v option can be used to display specific version
information for the ss command, in this instance we see the
version of the iproute package which provides ss.
[root@centos7 ~]# ss -v
ss utility, iproute2-ss130716
-
19. Print Help Documentation
The -h option can be used to display further help regarding
the ss command, it’s good to use as a quick reference if you
need a short description on some of the most commonly used
options. Note that the full output here has not been
included for brevity.
[root@centos7 ~]# ss -h
Usage: ss [ OPTIONS ]
-
20. Show Extended Information
We can use the -e option which shows extended detailed
information, as shown below we can see the extended
information appended to the end of each line.
[root@centos7 ~]# ss -lte
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:* ino:16090 sk:ffff880000100000 <->
LISTEN 0 5 192.168.122.1:domain *:* ino:23750 sk:ffff880073e70f80 <->
LISTEN 0 128 *:ssh *:* ino:22789 sk:ffff880073e70000 <->
LISTEN 0 128 127.0.0.1:ipp *:* ino:23091 sk:ffff880073e707c0 <->
LISTEN 0 100 127.0.0.1:smtp *:* ino:24659 sk:ffff880000100f80 <->
-
21. Show Timer Information
The -o option can be used to display the timer information.
This information shows us things such as the retransmission
timer value, number of retransmissions that have occurred,
and the number of keepalive probes that have been sent.
[root@centos7 ~]# ss -to
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 64 192.168.1.14:ssh 192.168.1.191:57091 timer:(on,242ms,0)
ESTAB 0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57295 timer:(keepalive,120min,0)
ESTAB 0 0 ::ffff:192.168.1.14:http ::ffff:192.168.1.191:57296 timer:(keepalive,120min,0)