Cách sử dụng lệnh ss trên Linux

Spread the love

Lệnh ss là một sự thay thế hiện đại cho netstat cổ điển. Bạn có thể sử dụng nó trên Linux để nhận thống kê về các kết nối mạng của mình. Đây là cách làm việc với công cụ tiện dụng này.

Lệnh ss so với netstat

Một sự thay thế cho cái không dùng nữa lệnh netstat, ss cung cấp cho bạn thông tin chi tiết về cách máy tính của bạn giao tiếp với các máy tính, mạng và dịch vụ khác.

ss hiển thị thống kê cho Giao thức điều khiển truyền dẫn (TCP), Giao thức Datagram của Người dùng (UDP), Unix (liên quá trình), và các ổ cắm thô. Ổ cắm thô hoạt động tại mức OSI mạng, có nghĩa là các tiêu đề TCP và UDP phải được xử lý bởi phần mềm ứng dụng, không phải bởi lớp truyền tải. Giao thức Thông báo Kiểm soát Internet (ICMP) và ping tiện ích cả hai đều sử dụng ổ cắm thô.

Sử dụng ss

Bạn không cần phải cài đặt ss, vì nó đã là một phần của bản phân phối Linux cập nhật. Tuy nhiên, đầu ra của nó có thể rất lâu — chúng tôi đã có kết quả chứa hơn 630 dòng. Kết quả cũng rất rộng.

Bởi vì điều này, chúng tôi đã bao gồm các phần trình bày bằng văn bản về kết quả mà chúng tôi thu được, vì chúng sẽ không vừa với ảnh chụp màn hình. Chúng tôi đã cắt bớt chúng để dễ quản lý hơn.

Danh sách kết nối mạng

Sử dụng ss không có tùy chọn dòng lệnh liệt kê các ổ cắm không nghe. Đó là, nó liệt kê các ổ cắm không ở trạng thái lắng nghe.

Để xem điều này, hãy nhập như sau:

ss

Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

Các cột như sau:

Netid: Loại ổ cắm. Trong ví dụ của chúng tôi, chúng tôi có “u_str”, luồng Unix, “udp” và “icmp6”, ổ cắm ICMP IP phiên bản 6. Bạn có thể tìm thêm mô tả về Các loại ổ cắm Linux trong trang người dùng Linux.
Trạng thái: Trạng thái mà ổ cắm đang ở.
Recv-Q: Số lượng gói tin đã nhận.
Send-Q: Số lượng gói tin đã gửi.
Địa chỉ cục bộ: Cổng: Địa chỉ cục bộ và cổng (hoặc các giá trị tương đương cho ổ cắm Unix).
Địa chỉ ngang hàng: Cổng: Địa chỉ từ xa và cổng (hoặc các giá trị tương đương cho ổ cắm Unix).

  Cách tạo một bảng điều khiển Steam hỗ trợ Linux với SteamOS

Đối với ổ cắm UDP, cột “Trạng thái” thường để trống. Đối với các ổ cắm TCP, nó có thể là một trong những dạng sau:

LISTEN: Chỉ phía máy chủ. Ổ cắm đang chờ yêu cầu kết nối.
SYN-SENT: Chỉ phía máy khách. Ổ cắm này đã đưa ra một yêu cầu kết nối và đang chờ xem liệu nó có được chấp nhận hay không.
SYN-RECEIVED: Chỉ phía máy chủ. Ổ cắm này đang chờ xác nhận kết nối sau khi chấp nhận yêu cầu kết nối.
ĐÃ THÀNH LẬP: Máy chủ và máy khách. Một kết nối đang hoạt động đã được thiết lập giữa máy chủ và máy khách, cho phép truyền dữ liệu giữa hai bên.
FIN-WAIT-1: Máy chủ và máy khách. Ổ cắm này đang chờ yêu cầu chấm dứt kết nối từ ổ cắm từ xa hoặc xác nhận yêu cầu chấm dứt kết nối đã được gửi trước đó từ ổ cắm này.
FIN-WAIT-2: Máy chủ và máy khách. Ổ cắm này đang chờ yêu cầu chấm dứt kết nối từ ổ cắm từ xa.
CLOSE-WAIT: Máy chủ và máy khách. Ổ cắm này đang chờ yêu cầu chấm dứt kết nối từ người dùng cục bộ.
ĐÓNG CỬA: Máy chủ và máy khách. Ổ cắm này đang chờ xác nhận yêu cầu chấm dứt kết nối từ ổ cắm từ xa.
LAST-ACK: Máy chủ và máy khách. Ổ cắm này đang chờ xác nhận yêu cầu chấm dứt kết nối mà nó đã gửi đến ổ cắm từ xa.
TIME-WAIT: Máy chủ và máy khách. Ổ cắm này đã gửi một xác nhận đến ổ cắm từ xa để cho nó biết rằng nó đã nhận được yêu cầu kết thúc ổ cắm từ xa. Bây giờ nó đang chờ để đảm bảo rằng đã nhận được thông báo xác nhận.
ĐÃ ĐÓNG CỬA: Không có kết nối, vì vậy ổ cắm đã bị ngắt.

Liệt kê các ổ cắm nghe

Để xem các ổ cắm lắng nghe, chúng tôi sẽ thêm tùy chọn -l (đang nghe), như sau:

ss -l

Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process 
nl    UNCONN 0      0                             rtnl:NetworkManager/535                * 
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              * 
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0 
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0 
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0 
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0 
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0 
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

Các ổ cắm này đều không được kết nối và đang nghe. “Rtnl” có nghĩa là mạng liên kết định tuyến, được sử dụng để truyền thông tin giữa các quy trình nhân và không gian người dùng.

  Cách lưu trữ một máy chủ FTP trên Linux

Liệt kê tất cả các ổ cắm

Để liệt kê tất cả các ổ cắm, bạn có thể sử dụng tùy chọn -a (tất cả):

ss -a

Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process 
nl    UNCONN 0      0                  rtnl:NetworkManager/535               * 
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 * 
...
u_str LISTEN 0      100       public/showq 23222                            * 0 
u_str LISTEN 0      100      private/error 23225                            * 0 
u_str LISTEN 0      100      private/retry 23228                            * 0 
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:* 
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:* 
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:* 
tcp   LISTEN 0      5               [::1]:ipp                            [::]:* 
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

Đầu ra chứa tất cả các ổ cắm, bất kể trạng thái.

Liệt kê các ổ cắm TCP

Bạn cũng có thể áp dụng bộ lọc để chỉ các ổ cắm phù hợp mới được hiển thị. Chúng tôi sẽ sử dụng tùy chọn -t (TCP), vì vậy chỉ các ổ cắm TCP mới được liệt kê:

ss -a -t

Liệt kê các ổ cắm UDP

Tùy chọn -u (UDP) thực hiện cùng một loại hành động lọc. Lần này, chúng ta sẽ chỉ thấy các ổ cắm UDP:

ss -a -u

State  Recv-Q Send-Q    Local Address:Port Peer   Address:Port Process 
UNCONN 0      0               0.0.0.0:631         0.0.0.0:* 
UNCONN 0      0               0.0.0.0:mdns        0.0.0.0:* 
UNCONN 0      0               0.0.0.0:60734       0.0.0.0:* 
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:* 
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 
UNCONN 0      0                   [::]:mdns          [::]:* 
UNCONN 0      0                   [::]:51193         [::]:*

Liệt kê các ổ cắm Unix

Để chỉ xem các ổ cắm Unix, bạn có thể bao gồm tùy chọn -x (Unix), như được hiển thị bên dưới:

ss -a -x

Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process 
u_str ESTAB 0      0                                * 41826            * 41827 
u_str ESTAB 0      0                                * 23183            * 23184 
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639 
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885 
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

Liệt kê các ổ cắm thô

Bộ lọc cho các ổ cắm thô là tùy chọn -w (thô):

ss -a -w

Liệt kê IP phiên bản 4 Sockets

Các ổ cắm sử dụng giao thức TCP / IP phiên bản 4 có thể được liệt kê bằng cách sử dụng tùy chọn -4 (IPV4):

ss -a -4

Liệt kê IP phiên bản 6 Sockets

Bạn có thể bật bộ lọc IP phiên bản 6 phù hợp với tùy chọn -6 (IPV6), như sau:

ss -a -6

Liệt kê các ổ cắm theo tiểu bang

Bạn có thể liệt kê các ổ cắm theo trạng thái của chúng với tùy chọn trạng thái. Điều này hoạt động với các trạng thái được thiết lập, lắng nghe hoặc đóng. Chúng tôi cũng sẽ sử dụng tùy chọn giải quyết (-r), tùy chọn này cố gắng phân giải địa chỉ mạng thành tên và cổng vào giao thức.

Lệnh sau sẽ tìm kiếm các kết nối TCP đã thiết lập và ss sẽ cố gắng giải quyết các tên:

ss -t -r state established

Bốn kết nối được liệt kê ở trạng thái thiết lập. Tên máy chủ, ubuntu20-04, đã được giải quyết và “ssh” được hiển thị thay vì 22 cho kết nối SSH trên dòng thứ hai.

  Cách tìm phần mềm trên các bản phân phối Linux ít được biết đến

Chúng ta có thể lặp lại điều này để tìm các ổ cắm ở trạng thái nghe:

ss -t -r state listening

Recv-Q Send-Q Local Address:Port   Peer Address:Port Process 
0      128        localhost:5939        0.0.0.0:* 
0      4096    localhost%lo:domain      0.0.0.0:* 
0      128          0.0.0.0:ssh         0.0.0.0:* 
0      5          localhost:ipp         0.0.0.0:* 
0      100        localhost:smtp        0.0.0.0:* 
0      128             [::]:ssh         [::]:* 
0      5      ip6-localhost:ipp         [::]:* 
0      100    ip6-localhost:smtp        [::]:*

Liệt kê các Sockets theo giao thức

Bạn có thể liệt kê các ổ cắm bằng cách sử dụng một giao thức cụ thể với các tùy chọn thể thao và thể thao, tương ứng đại diện cho cổng đích và cổng nguồn.

Chúng tôi nhập phần sau để liệt kê các ổ cắm sử dụng giao thức HTTPS trên một kết nối đã thiết lập (lưu ý khoảng trắng sau dấu ngoặc đơn mở và trước dấu cách đóng):

ss -a state established ‘( dport = :https or sport = :https )’

Chúng ta có thể sử dụng tên giao thức hoặc cổng thường được liên kết với giao thức đó. Cổng mặc định cho Vỏ an toàn (SSH) là cổng 22.

Chúng tôi sẽ sử dụng tên giao thức trong một lệnh, sau đó lặp lại nó bằng cách sử dụng số cổng:

ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’

Đúng như mong đợi, chúng tôi nhận được kết quả tương tự.

Danh sách kết nối với một địa chỉ IP cụ thể

Với tùy chọn dst (đích), chúng tôi có thể liệt kê các kết nối đến một địa chỉ IP đích cụ thể.

Chúng tôi gõ như sau:

ss -a dst 192.168.4.25

Xác định các quá trình

Để xem quy trình nào đang sử dụng socket, bạn có thể sử dụng tùy chọn process (-p), như được hiển thị bên dưới (lưu ý bạn phải sử dụng sudo):

sudo ss -t -p

State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process 
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151)) 
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

Điều này cho chúng ta thấy rằng hai kết nối đã thiết lập trên TCP socket đang được sử dụng bởi SSH daemon và Firefox.

Người kế vị xứng đáng

Lệnh ss cung cấp cùng một thông tin do netstat cung cấp trước đó, nhưng theo cách đơn giản hơn, dễ tiếp cận hơn. Bạn có thể kiểm tra trang nam để biết thêm các tùy chọn và mẹo.

x