[Linux Command] netstat là gì? Hướng dẫn sử dụng netstat trên Linux

Tác giả: 08/12/2022

Trong bài viết này, Nhân Hòa sẽ giới thiệu đến các bạn các thông tin cơ bản về công cụ netstat

1. Netstat là gì?

netstat(network statistics) – là một công cụ dùng để kiểm tra, giám sát các kết nối mạng cả chiều đến và chiều đi từ server, xem bảng định tuyến, trạng thái các kết nối, thông tin kết nối…netstat có sẵn trên tất cả các hệ điều hành Unix và cũng có trên Windows. Nó rất hữu ích về mặt khắc phục sự cố mạng và đo lường hiệu suất.

2. Sử dụng netstat như thế nào?

a. Cú pháp kiểm tra các thông số đi kèm netstat

#man netstat

(netstat – Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships)

Có rất nhiều tùy chọn, một số tùy chọn phổ biến thường được sử dụng mà bạn có thể chú ý ở đây là

  • -a: Hiển thị tất cả các sockets, kể cả listening và non-listening
  • -l: Hiển thị các socket đang lắng nghe
  • -t: Chỉ hiển thị các kết nối tcp
  • -u: Chỉ hiển thị các kết nối udp
  • -n: Xem địa chỉ IP
  • -p: Hiển thị PID của từng socket
  • -r: Hiển thị bảng định tuyến
  • -s: Pull và hiển thị thống kê mạng được sắp xếp theo giao thức
  • -i: Hiển thị danh sách các giao diện mạng

b. Kiểm tra thông tin trạng thái TCP Connections

+ Các trạng thái cơ bản của TCP Connections

LISTEN: Trạng thái đợi yêu cầu kết nối từ một ứng dụng TCP

SYN-SENT: Trạng thái chờ xác nhận từ remote TCP sau khi đã gửi yêu cầu kết nối. Kết quả sau bước 1 của quá trình TCP bắt tay ba bước (three-way TCP handshake)

SYN-RECEIVED: Trạng thái đang đợi remote TCP gửi lại một tin báo nhận sau khi đã gửi cho remote TCP một tin báo nhận kết nối(connection acknowledgment),. Kết quả sau bước 2 của quá trình TCP bắt tay ba bước (three-way TCP handshake)

ESTABLISHED: Trạng thái thể hiện kết nối thiết lập đầy đủ, sẵn sàng cho giai đoạn truyền dữ liệu

TIME_WAIT: Trạng thái chờ để chắc chắn rằng remote TCP đã nhận được yêu cầu chấm dứt kết nối

…..

+ Kiểm tra toàn bộ trạng thái kết nối ứng dụng TCP

#netstat -nat | awk '{print $6}' | sort | uniq -c | sort -nr

------------

2537 TIME_WAIT

674 ESTABLISHED

18 FIN_WAIT2

14 LISTEN

5 CLOSE_WAIT

2 SYN_RECV

1 LAST_ACK

1 Foreign

1 established

+ Kiểm tra toàn bộ kết nối – thống kê theo IP

#netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort -rn

-------

1526 192.168.0.103

1431 192.168.0.110

524 192.34.234.30

16 0.0.0.0

+ Kiểm tra toàn bộ kết nối có trạng thái SYN_RECV theo IP

#netstat -atun | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 |sort | uniq -c | sort -rn
1 27.71.121.110
1 202.88.149.25
1 103.19.212.1

Một số thông tin cần chú ý:

  • grep 'tcp\|udp': Lọc lấy các kết nối TCP và UDP
  • awk '{print $5}': Chỉ in ra cột số 5 là cột IP:PORT
  • cut -d: -f1: Chia các dòng kết quả thành các cột, điểm phân chia là ký tự : sau đó lấy thông tin cột 1 (các IP không có cổng)
  • sort: sắp xếp kết quả
  • uniq -c: nhóm các IP giống nhau lại, hiển thị ra cột đầu tiên sẽ hiển thị số lượng của các IP giống nhau
  • sort -rn: sắp xếp kết quả theo số, từ thấp đến cao

+ Xem bảng định tuyến IP của kernel

#netstat -r

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 em1
43.116.81.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 em2

Chúc các bạn thành công!

Trả lời