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 để lấy số liệu 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
Việc thay thế netstat,ss không dùng nữa 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 dẫn (TCP), Giao thức gói dữ liệu người dùng (UDP), Unix (xử lý liên kết) và ổ cắm thô. Các ổ cắm thô hoạt động ở cấp độ OSI của mạng, có nghĩa là các tiêu đề TCP và UDP phải được xử lý bằng phần mềm, không phải bởi lớp vận chuyển. Giao thức thông báo điều khiển Internet (ICMP) và tiện ích ping đều sử dụng ổ cắm thô.
Sử dụng ss
Bạn không cần cài đặt ss vì nó đã là một phần của bản phân phối Linux hiện tại. Tuy nhiên, kết quả có thể rất dài – chúng tôi nhận được kết quả với hơn 630 hàng. Kết quả cũng rất rộng.
Vì lý do này, chúng tôi đã bao gồm các văn 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 mà không có tùy chọn dòng lệnh sẽ hiển thị các ổ cắm không nghe. Đó là, nó liệt kê các ổ cắm không nghe.
Để xem nó, gõ:
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”, phiên bản ổ cắm IP ICMP 6. Bạn có thể tìm thêm mô tả về Các loại Ổ cắm Linux trong các trang hướng dẫn về Linux.
Trạng thái: Trạng thái ổ cắm.
Recv-Q: Số gói tin nhận được.
Send-Q: số packet được 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 với Unix socket).
Peer address: Port: địa chỉ và cổng từ xa (hoặc các giá trị tương đương với Unix socket).
Đối với ổ cắm UDP, cột “Trạng thái” thường trống. Đối với ổ cắm TCP, nó có thể là một trong những cách 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 máy khách. Ổ cắm này đã gửi yêu cầu kết nối và đang chờ xem nó có được chấp nhận hay không.
SYN-RECEIVED: chỉ phía máy chủ. Ổ cắm này 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 gửi dữ liệu giữa chúng.
FIN-WAIT-1: máy chủ và máy khách. Ổ cắm này chờ yêu cầu kết thúc kết nối từ ổ cắm từ xa hoặc xác nhận yêu cầu kết thúc 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 chờ yêu cầu kết thúc kết nối từ một ổ cắm từ xa.
CLOSE-WAIT: máy chủ và máy khách. Ổ cắm này chờ yêu cầu kết thúc kết nối từ người dùng cục bộ.
KẾT THÚC: máy chủ và máy khách. Ổ cắm này đang chờ xác nhận yêu cầu kết thúc kết nối từ ổ cắm từ xa.
LAST-ACK: máy chủ và máy khách. Ổ cắm này chờ xác nhận yêu cầu kết thúc kết nối đã được gửi đến ổ cắm từ xa.
THỜI GIAN CHỜ: 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 bạ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ó chờ để đảm bảo đã nhận được xác nhận.
ĐÃ ĐÓNG: không có kết nối, vì vậy ổ cắm đã kết thúc.
Danh sách các ổ cắm nghe
Để xem các socket nghe, chúng ta sẽ thêm tùy chọn -l (nghe), ví dụ:
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 không được kết nối và đang lắng nghe. “Rtnl” là một liên kết mạng đị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.
Danh sách tất cả các ổ cắm
Để liệt kê tất cả các socket, bạn có thể sử dụng tùy chọn -a (all):
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 bao gồm tất cả các ổ cắm, bất kể trạng thái.
Danh sách ổ cắm TCP
Bạn cũng có thể áp dụng bộ lọc để chỉ hiển thị các vị trí phù hợp. Chúng tôi sẽ sử dụng tùy chọn -t (TCP), vì vậy chỉ các ổ cắm TCP sẽ được liệt kê:
ss -a -t
Danh sách ổ 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ỉ nhìn thấy các ổ cắm Unix, bạn có thể bao gồm tùy chọn -x (Unix) như hình 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
Danh sách các ổ cắm thô
Bộ lọc cho các ổ cắm thô là tùy chọn -w (raw):
ss -a -w
Danh sách phiên bản ổ cắm IP 4
Socket sử dụng phiên bản TCP/IP 4 có thể được hiển thị bằng tùy chọn -4 (IPV4):
ss -a -4
Danh sách phiên bản ổ cắm IP 6
Bạn có thể kích hoạt bộ lọc IP phù hợp trong phiên bản 6 sử dụng tùy chọn -6 (IPV6), ví dụ:
ss -a -6
Danh sách ổ 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 bằng cách sử dụng tùy chọn trạng thái. Điều này hoạt động ở trạng thái ổn định, trạng thái 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 chuyển đổi địa chỉ mạng thành tên và cổng thành giao thức.
Lệnh sau sẽ tìm kiếm các kết nối TCP đã được 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 ở trạng thái đã thiết lập sẽ được hiển thị. Tên máy chủ ubuntu20-04 đã được giải quyết và thay vì 22 cho kết nối SSH, dòng thứ hai hiển thị “ssh”.
Chúng ta có thể sao chép điều này bằng cách tìm kiếm các ổ cắm ở trạng thái lắng 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 [::]:*
Danh sách socket theo giao thức
Bạn có thể liệt kê các ổ cắm bằng một giao thức cụ thể với các tùy chọn dport và sport đại diện cho cổng đích và cổng nguồn tương ứng.
Chúng ta nhập lệnh sau để hiển thị các socket sử dụng HTTPS trên kết nối đã thiết lập (chú ý khoảng trắng sau dấu ngoặc mở và trước dấu ngoặc đóng):
ss -a state established ‘( dport = :https or sport = :https )’
Chúng ta có thể sử dụng tên của 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 và sau đó lặp lại nó bằng số cổng:
ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’
Như mong đợi, chúng tôi nhận được kết quả tương tự.
Hiển thị danh sách các kết nối đến một địa chỉ IP cụ thể
Với tùy chọn dst (đích), chúng ta có thể liệt kê các kết nối đến một địa chỉ IP đích cụ thể.
Chúng tôi nhập:
ss -a dst 192.168.4.25
nhận dạng quy trình
Để xem quy trình nào đang sử dụng ổ cắm, bạn có thể sử dụng các tùy chọn quy trình (-p) như hình bên dưới (hãy nhớ rằng 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 ổ cắm TCP đang được sử dụng bởi daemon SSH và Firefox.
Người kế thừa xứng đáng
Lệnh ss cung cấp cùng thông tin mà 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 hướng dẫn để biết thêm các tùy chọn và mẹo.