Cách giám sát kết nối mạng trên Linux với lệnh ss | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Cách giám sát kết nối mạng trên Linux với lệnh ss

Chia sẻ kiến thức 16/03/2022

Nếu sự cố mạng xảy ra trên hệ thống Linux của bạn, đây là cách theo dõi và khắc phục sự cố bằng lệnh ss.

Các tiện ích Linux là cứu cánh cho các quản trị viên máy chủ khi cần tìm hiểu và khắc phục các sự cố mạng. Trước đây, các quản trị viên sử dụng lệnh netstat để xem thống kê mạng và các thông tin liên quan đến socket* khác trên Linux. 

*Socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ liệu trên internet.

Nhưng hiện đã xuất hiện một công cụ tốt hơn, cung cấp nhiều thông tin chi tiết hơn: lệnh ss. Trong bài viết này, FUNiX sẽ trình bày  cách bạn có thể sử dụng ss để trích xuất thông tin liên quan đến socket từ hệ thống của bạn.

Lệnh ss là gì?

Lệnh ss, viết tắt của socket statistics (thống kê socket), là một tiện ích Linux hiển thị thông tin liên quan đến các kết nối mạng ở định dạng chi tiết mà con người có thể đọc được. Bạn có thể sử dụng ss để tìm và khắc phục sự cố với mạng của mình vì nó cung cấp thông tin chi tiết đầy đủ về các kết nối.

Như đã nói, ss đã thay thế netstat, tiện ích ban đầu để liệt kê các số liệu thống kê về socket trên Linux. Lệnh ss dễ sử dụng, cung cấp nhiều thông tin hơn và mang lại kết quả nhanh chóng và chính xác.

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

Bạn có thể sử dụng ss để liệt kê tất cả các kết nối socket trên hệ thống của mình. Hơn nữa, cũng có thể lọc các kết nối dựa trên loại, địa chỉ đích và số cổng.

Cú pháp cơ bản

Cú pháp cơ bản của lệnh ss là:

ss options

… trong đó options là cờ mà bạn có thể sử dụng để gọi các chức năng của lệnh.

Lệnh ss đơn giản nhất hiển thị danh sách tất cả các kết nối đã thiết lập, không phân biệt loại kết nối.

ss

Đầu ra:

Bạn sẽ tìm thấy các tiêu đề cột sau trong đầu ra:

  • Netid: Biểu thị loại socket được sử dụng cho kết nối. Các giá trị có thể là TCP, UDP, u_seq (chuỗi Unix) và u_str (chuỗi Unix).
  • Status: Hiển thị trạng thái của kết nối. Bạn sẽ tìm thấy các giá trị như ESTAB, UNCONN và LISTEN, lần lượt là viết tắt của established (được thiết lập), unconnected (không kết nối) và listening (đang nghe).
  • Recv-Q: Số gói (packet*) được nhận đang đợi.
  • Send-Q: Số gói được gửi đang đợi
  • Local address and port: Địa chỉ cục bộ của máy người dùng và số cổng.
  • Peer address and port : Địa chỉ của máy đích và số cổng.

*listening port: cổng đang nghe là một cổng mạng mà trên đó một ứng dụng hoặc quy trình đang lắng nghe, hoạt động như một điểm cuối giao tiếp (communication endpoint).

*Packet/IP Packet: Một gói mạng hoặc gói IP có thể được coi là một đơn vị dữ liệu (khoảng 1 KBS đến 1,5 KBS) truyền từ điểm gốc đến địa chỉ đích (từ người gửi đến người nhận) trong mạng internet.

Nhận danh sách tất cả các socket

Sử dụng cờ -a để hiển thị tất cả các socket có trong mạng, dù có đang nghe hay không:

ss -a

Đầu ra:

Liệt kê tất cả các socket đang nghe

Để chỉ truy xuất thông tin liên quan đến các socket hiện đang nghe, hãy sử dụng cờ -l với lệnh. -L là viết tắt của Listening.

ss -l

Ss sẽ hiển thị tất cả các socket đang nghe đang hoạt động (active listening sockets) trên thiết bị hoặc mạng của bạn. Lưu ý rằng hầu hết mọi socket trong đầu ra đều có trạng thái không kết nối.

Ngay khi một socket đang nghe nhận được kết nối đến, nó sẽ tạo một socket con và sử dụng nó để thiết lập kết nối. Sau đó, bạn có thể sử dụng tiện ích tcpdump của Linux để theo dõi và lọc các gói trên mạng của mình.

Hiển thị các kết nối TCP, UDP và Unix

Trên Linux, có nhiều loại socket khác nhau, bao gồm TCP, UDP và Unix socket. Bạn có thể liệt kê tất cả các kết nối thuộc một loại socket cụ thể với ss.

Để liệt kê mọi socket TCP trên máy tính của bạn:

ss -t

Đầu ra:

Cờ -u sẽ hiển thị danh sách tất cả các ổ cắm UDP:

ss -u

Đầu ra:

Để truy xuất danh sách các socket Unix bằng ss, hãy sử dụng cờ -x:

ss -x

Đầu ra:

Theo mặc định, ss chỉ hiển thị các socket được kết nối. Để nhận danh sách tất cả các socket, bất kể trạng thái kết nối, hãy sử dụng cờ -a với lệnh:

ss -ta
ss -ua
ss -xa

Lọc các kết nối TCP bằng trạng thái

Các socket TCP có nhiều trạng thái mà bạn có thể sử dụng để lọc kết quả. Bạn có thể sử dụng các trạng thái socket sau để lọc các kết nối với ss: đã thiết lập, đã đóng, đang lắng nghe, đang đóng, tất cả, đã kết nối, đã đồng bộ hóa, v.v.

Định dạng cơ bản để lọc các kết nối TCP sử dụng trạng thái kết nối là:

ss -t state filter

… trong đó filter là trạng thái của các kết nối, ví dụ, được thiết lập (established).

Liệt kê các kết nối IPv4 và IPv6

Bạn có thể sử dụng cờ -4 và -6 để nhận danh sách các socket IPv4 và IPv6 trên thiết bị của mình:

ss -4
ss -6

Đầu ra:

Bạn cũng có thể sử dụng phương pháp trạng thái để lọc các socket IPv4 và IPv6.

ss -4 state established
ss -6 state established

Lọc kết nối bằng số cổng

Bạn có thể chỉ định các giá trị dport và sport trong lệnh ss để lọc các kết nối bằng cách sử dụng số cổng và giao thức. Các tùy chọn  dport và sport lần lượt đại diện cho cổng đích và cổng nguồn.

Để nhận thông tin liên quan đến các kết nối có cổng nguồn 39700 hoặc cổng đích https :

ss -ta '( dport = :https or sport = :39700)'

Đầu ra:

Bạn cũng có thể sử dụng phương pháp trạng thái kết hợp với bộ lọc cổng để nhận được kết quả chính xác:

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

Liệt kê các socket thô bằng ss

Bạn có thể sử dụng cờ -w hoặc –raw để hiển thị các socket thô (raw socket) trên thiết bị của mình:

ss -w
ss --raw

Đầu ra:

Hiển thị kết nối với một thiết bị cụ thể

Sử dụng ss, bạn cũng có thể hiển thị danh sách các kết nối với một địa chỉ đích cụ thể.

ss dst ipaddress

… trong đó ipaddress là địa chỉ của thiết bị đích.

Ví dụ:

Hiển thị ID quy trình của các kết nối

Trong khi khắc phục sự cố mạng, việc biết ID quy trình (PID) của kết nối có vấn đề có thể giúp ích rất nhiều.

Để hiển thị các PID được liên kết với kết nối TCP:

ss -t -p

Ss cũng hiển thị tên của ứng dụng đã thiết lập kết nối.

Hơn nữa, bạn có thể biết thêm thông tin chi tiết về quá trình sử dụng lệnh ps.

Nhận bản tóm tắt về số liệu thống kê mạng

Cờ -s cho phép người dùng xem tóm tắt tổng thể về mạng hoặc thiết bị của họ. Bản tóm tắt bao gồm tổng số kết nối, số lượng và loại socket, v.v.

ss -s

Đầu ra:

Gửi đầu ra tới tệp

Bạn cũng có thể lưu kết quả đầu ra của lệnh ss vào một tệp để tham khảo sau này bằng cách sử dụng toán tử > output.

ss > output.txt

Đầu ra:

Triển khai ss với grep

Nếu bạn muốn lọc dữ liệu do ss cung cấp nhưng dường như không thể nhớ lại định dạng của lệnh, bạn có thể kết hợp grep với ss để nhận được kết quả mong muốn.

Ví dụ: để lấy danh sách tất cả các kết nối TCP đã thiết lập bằng ss và grep:

ss -t | grep ESTAB

Đầu ra:

Giám sát kết nối mạng trên Linux

Trên Linux, có một lệnh cho mọi thao tác, từ tạo tệp đến giám sát mạng. Nhưng với bộ sưu tập tiện ích khổng lồ này, câu hỏi đặt ra là lựa chọn nào tốt nhất.

Ngoài phần mềm của máy tính, người dùng cũng nên biết rõ về các thông số kỹ thuật phần cứng của hệ thống của họ. Một số lệnh có sẵn cho phép người dùng dễ dàng trích xuất thông tin liên quan đến hệ thống và phần cứng của họ.

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/how-to-monitor-network-connections-on-linux-with-ss/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại