ss
Get socket statistics on a remote host with ruby.
linux manual
Basic Usage
require 'kanrisuru'
host = Kanrisuru::Remote::Host.new(host: '127.0.1.1', username: 'ubuntu', keys: ['~/.ssh/id_rsa'])
result = host.ss(tcp: true, expression: 'dport = 22', state: 'established')
result.success?
true
result[0].local_port
'ssh'
result[0].peer_address
'172.16.50.5'
Parameters
| Field | Type | Description |
|---|---|---|
| numeric |
boolean
|
Do not try to resolve service names. Show exact bandwidth values, instead of human-readable. |
| tcp |
boolean
|
Display TCP sockets. |
| udp |
boolean
|
Display UDP sockets. |
| unix |
boolean
|
Display unix sockets. |
| raw |
boolean
|
Display RAW sockets. |
| family |
string
|
Display sockets of type FAMILY. Currently the following families are supported: unix, inet, inet6, link, netlink, vsock, xdp. |
| state |
string
|
Filter sockets by their state. Valid TCP states: established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listening and closing. Other states include: all, connected, synchronized, bucket, syn-recv, big. |
| expression |
string
|
Allows filtering based on specific criteria, using a series of predicates combined by boolean operators. |
Result
Returns an array of Statistics structs.
Statistics Fields
| Field | Type | Description |
|---|---|---|
| netid |
string
|
Type of socket, eg TCP, UDP, Unix, RAW. |
| state |
string
|
State of the socket. Most commonly ESTAB (established), UNCONN (unconnected), LISTEN (listening). |
| receive_queue |
integer
|
Number of received packets in the queue. |
| send_queue |
integer
|
Number of sent packets in the queue. |
| local_address |
string
|
Address of local machine. |
| local_port |
stringinteger
|
Address of local port. |
| peer_address |
string
|
Address of remote machine. |
| peer_port |
stringinteger
|
Address of remote port. |
| memory |
StatisticsMemory
|
Additional details on how much memory is being consumed by the socket connection. |
StatisticsMemory Fields
| Field | Type | Description |
|---|---|---|
| rmem_alloc |
integer
|
The memory allocated for receiving packet |
| rcv_buf |
integer
|
The total memory can be allocated for receiving packet |
| snd_buf |
integer
|
The total memory can be allocated for sending packet |
| fwd_alloc |
integer
|
the memory allocated by the socket as cache, not used for receiving/sending packet yet. If need memory to send/receive packet, the memory in this cache will be used before allocate additional memory. |
| wmem_queued |
integer
|
The memory allocated for sending packet (which has not been sent to layer 3) |
| ropt_mem |
integer
|
The memory used for storing socket option, e.g., the key for TCP MD5 signature. |
| back_log |
integer
|
The memory used for the sk backlog queue. On a process context, if the process is receiving packet, and a new packet is received, it will be put into the sk backlog queue, so it can be received by the process immediately |
| sock_drop |
integer
|
The number of packets dropped before they are de-multiplexed into the socket |
Return Example
host.ss(tcp: true, expression: 'dport = 22 || sport = 22', state: 'established').to_a
[
[0] #<Struct:Kanrisuru::Core::Socket::Statistics:0x00002260
local_address = "10.0.0.100",
local_port = "ssh",
memory = #<Struct:Kanrisuru::Core::Socket::StatisticsMemory:0x000022d8
back_log = 0,
fwd_alloc = 4096,
rcv_buf = 131072,
rmem_alloc = 0,
ropt_mem = 0,
snd_buf = 87040,
sock_drop = 0,
wmem_alloc = 0,
wmem_queued = 0
>,
netid = "tcp",
peer_address = "172.16.50.5",
peer_port = 51410,
receive_queue = 0,
send_queue = 0,
state = "established"
>,
[1] #<Struct:Kanrisuru::Core::Socket::Statistics:0x00002350
local_address = "127.0.0.1",
local_port = 33816,
memory = #<Struct:Kanrisuru::Core::Socket::StatisticsMemory:0x000023a0
back_log = 0,
fwd_alloc = 4096,
rcv_buf = 131072,
rmem_alloc = 0,
ropt_mem = 0,
snd_buf = 2626560,
sock_drop = 0,
wmem_alloc = 0,
wmem_queued = 0
>,
netid = "tcp",
peer_address = "127.0.0.1",
peer_port = "ssh",
receive_queue = 0,
send_queue = 0,
state = "established"
>,
[2] #<Struct:Kanrisuru::Core::Socket::Statistics:0x00002418
local_address = "127.0.0.1",
local_port = "ssh",
memory = #<Struct:Kanrisuru::Core::Socket::StatisticsMemory:0x00002490
back_log = 0,
fwd_alloc = 2648,
rcv_buf = 131072,
rmem_alloc = 0,
ropt_mem = 0,
snd_buf = 2626560,
sock_drop = 0,
wmem_alloc = 0,
wmem_queued = 1448
>,
netid = "tcp",
peer_address = "127.0.0.1",
peer_port = 33816,
receive_queue = 0,
send_queue = 168,
state = "established"
>
]
Exit Status
| Code | Description |
|---|
Tested On
- Ubuntu, Debian, Centos, Fedora, Redhat, OpenSuse, SLES