Các ss
lệnh là một sự thay thế hiện đại cho cổ điển netstat
. 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
Thay thế cho cái không dùng nữa netstat
chỉ huy, 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ị số liệu thống kê cho Giao thức điều khiển truyền (TCP), Giao thức sơ đồ người dùng (UDP), Unix (liên quá trình) và các ổ cắm thô. Các ổ cắm thô hoạt động ở 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. Các thông báo Giao thức Thông báo Kiểm soát Internet (ICMP) và tiện ích ping đều sử dụng các ổ 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 bản trình bày 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 chủ Linux.
- Tiểu bang: Trạng thái mà ổ cắm đang ở.
- Recv-Q: Số lượng gói tin đã nhận.
- Gửi-Q: Số lượng gói tin đã gửi.
- Địa chỉ địa phương: 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).
Đối với các ổ 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 điều sau:
- NGHE: Chỉ phía máy chủ. Ổ cắm đang chờ yêu cầu kết nối.
- SYN-SENT: Chỉ phía khách hàng. Ổ 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.
- ĐỒNG BỘ NHẬN: 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 hoạt động đã được thiết lập giữa máy chủ và máy khách, cho phép dữ liệu được truyền 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.
- ĐÓNG-CHỜ: 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.
- CUỐI CÙNG: 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.
- THỜI GIAN CHỜ ĐỢI: 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 xác nhận đã được nhận.
- ĐÃ ĐÓNG CỬA: Không có kết nối, vì vậy ổ cắm đã được kết thúc.
Liệt kê các ổ cắm nghe
Để xem các ổ cắm nghe, chúng tôi sẽ thêm -l
(nghe) tùy chọn, như vậy:
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 để chuyển thông tin giữa các quy trình nhân và không gian người dùng.
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 -a
(tất cả) tùy chọn:
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 được hiển thị. Chúng tôi sẽ sử dụng -t
(TCP) tùy chọn, vì vậy chỉ các ổ cắm TCP sẽ được liệt kê:
ss -a -t
Liệt kê các ổ cắm UDP
Các -u
(UDP) tùy chọn 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 -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à -w
(thô) tùy chọn:
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 -4
(IPV4) tùy chọn:
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 -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 state
Lựa chọn. Đ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
), 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.
Chúng tôi 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 dport
và sport
tùy chọn, 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 established
kết nối (lưu ý khoảng trắng sau dấu ngoặc mở và trước dấu đó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 Secure Shell (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ự.
Kết nối danh sách với một địa chỉ IP cụ thể
Với 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 quy trình (-p
), như hình 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 được 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
Các ss
lệnh cung cấp cùng một thông tin được cung cấp trước đó bởi netstat
, nhưng theo cách đơn giản hơn, dễ tiếp cận hơn. Bạn có thể xem trang người đàn ông để biết thêm các tùy chọn và mẹo.