Làm chủ lệnh Netstat trên Linux: Từ cơ bản đến giám sát mạng nâng cao

2024-11-11

Giới thiệu

Lệnh netstat (thống kê mạng) là một trong những công cụ mạng thiết yếu trong bộ công cụ của quản trị viên hệ thống Linux. Tiện ích dòng lệnh đa năng này cung cấp cái nhìn tổng quan về các kết nối mạng, bảng định tuyến, thống kê giao diện và các thông tin quan trọng khác liên quan đến mạng.

Netstat là gì?

netstat là một tiện ích mạng dòng lệnh hiển thị nhiều thông tin liên quan đến mạng, bao gồm:

  • Các kết nối mạng (cả đến và đi)
  • Bảng định tuyến
  • Thống kê giao diện mạng
  • Kết nối giả mạo
  • Thành viên đa phát
  • Thống kê giao thức

Tại sao nó quan trọng

Các quản trị viên hệ thống và kỹ sư mạng dựa vào netstat cho một số nhiệm vụ quan trọng:

  1. Khắc phục sự cố mạng - Nhanh chóng xác định các vấn đề kết nối và tắc nghẽn mạng
  2. Giám sát bảo mật - Phát hiện các kết nối mạng trái phép và hoạt động đáng ngờ
  3. Phân tích hiệu suất - Giám sát các mẫu lưu lượng mạng và thống kê giao diện
  4. Kiểm toán hệ thống - Xem xét các dịch vụ đang hoạt động và các cổng mở

Lịch sử ngắn gọn

Lệnh netstat đã là một phần của bộ công cụ mạng TCP/IP từ những ngày đầu của các hệ thống Unix. Mặc dù nó bắt nguồn từ BSD Unix, nó đã phát triển để trở thành một công cụ tiêu chuẩn trên nhiều hệ điều hành tương tự Unix khác nhau, bao gồm cả Linux. Mặc dù được coi là "không còn được khuyến nghị" để thay thế bằng các công cụ mới hơn như ss, netstat vẫn được sử dụng rộng rãi nhờ vào:

  • Sự quen thuộc của nó với các quản trị viên hệ thống
  • Tính khả dụng rộng rãi trên các hệ thống tương tự Unix khác nhau
  • Tập hợp tính năng phong phú và các tùy chọn đầu ra chi tiết
  • Tài liệu phong phú và hỗ trợ cộng đồng

Cú pháp và cách sử dụng cơ bản

Định dạng lệnh

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

netstat [options]

Lệnh có thể được sử dụng với nhiều tùy chọn khác nhau để tùy chỉnh đầu ra dựa trên nhu cầu của bạn. Nếu không có tùy chọn nào, netstat sẽ hiển thị danh sách các socket đang mở.

Các tùy chọn và cờ phổ biến

Dưới đây là các tùy chọn thường được sử dụng nhất:

Tùy chọn Mô tả
-a Hiển thị tất cả các cổng đang lắng nghe và các kết nối hoạt động
-t Hiển thị các kết nối TCP
-u Hiển thị các kết nối UDP
-n Hiển thị địa chỉ số thay vì giải quyết tên máy chủ và cổng
-l Chỉ hiển thị các socket đang lắng nghe
-p Hiển thị PID và tên chương trình
-r Hiển thị bảng định tuyến
-i Hiển thị thống kê giao diện mạng
-s Hiển thị thống kê giao thức

Ví dụ cơ bản

  1. Xem tất cả các kết nối hoạt động
netstat -a
  1. Hiển thị tất cả các kết nối TCP
netstat -at
  1. Hiển thị các cổng đang lắng nghe với thông tin chương trình
sudo netstat -tulnp

Sự kết hợp phổ biến này hiển thị:

  • -t: Kết nối TCP
  • -u: Kết nối UDP
  • -l: Chỉ các cổng đang lắng nghe
  • -n: Địa chỉ số
  • -p: Thông tin chương trình
  1. Kiểm tra bảng định tuyến
netstat -r
  1. Xem thống kê giao diện
netstat -i

Hiểu đầu ra

Một đầu ra điển hình của netstat bao gồm một số cột:

  • Proto: Giao thức (TCP, UDP)
  • Recv-Q: Dữ liệu đang chờ nhận
  • Send-Q: Dữ liệu đang chờ gửi
  • Local Address: Điểm cuối cục bộ của kết nối
  • Foreign Address: Điểm cuối từ xa của kết nối
  • State: Trạng thái kết nối (LISTEN, ESTABLISHED, v.v.)

Ví dụ đầu ra khi sử dụng netstat -tan:

Proto Recv-Q Send-Q Local Address          Foreign Address        State
tcp        0      0 0.0.0.0:22            0.0.0.0:*             LISTEN
tcp        0      0 127.0.0.1:631         0.0.0.0:*             LISTEN
tcp        0      0 192.168.1.5:22        192.168.1.100:52614   ESTABLISHED

Các tính năng và tùy chọn chính

Tùy chọn hiển thị

Liệt kê tất cả các kết nối

Lệnh netstat cung cấp nhiều cách để liệt kê các kết nối mạng dựa trên nhu cầu cụ thể của bạn:

  1. Hiển thị tất cả các giao thức với địa chỉ số
netstat -an
  1. Hiển thị thông tin mở rộng
netstat -ae

Điều này thêm thông tin bổ sung như người dùng và inode

  1. Hiển thị thông tin thời gian
netstat -o

Thêm thông tin thời gian hữu ích cho việc khắc phục sự cố

Hiển thị theo giao thức

  1. Chỉ TCP
# Hiển thị tất cả các kết nối TCP bao gồm các cổng đang lắng nghe
netstat -at

# Hiển thị chỉ các cổng TCP đang lắng nghe
netstat -lt
  1. Chỉ UDP
# Hiển thị tất cả các kết nối UDP
netstat -au

# Hiển thị chỉ các cổng UDP đang lắng nghe
netstat -lu
  1. Socket miền Unix
# Hiển thị các socket miền Unix
netstat -x

Tùy chọn định dạng đầu ra

Hiển thị số

# Đầu ra số đầy đủ (không giải quyết tên)
netstat -n

# Kết hợp với các tùy chọn khác
netstat -ant  # Kết nối TCP với địa chỉ số

Lợi ích của hiển thị số:

  • Thực thi nhanh hơn
  • Không tra cứu DNS
  • Đáng tin cậy hơn trong trường hợp có sự cố DNS

Xem thông tin mở rộng

# Hiển thị thông tin quy trình
sudo netstat -p

# Hiển thị thông tin người dùng và quy trình
sudo netstat -ep

# Hiển thị thống kê giao diện mạng với thông tin mở rộng
netstat -ie

Hiển thị liên tục

# Cập nhật mỗi 2 giây
netstat -c

# Kết hợp với các tùy chọn khác để giám sát liên tục
netstat -ct  # Giám sát TCP liên tục

Hiển thị thống kê

  1. Thống kê giao thức
# Hiển thị thống kê tóm tắt cho tất cả các giao thức
netstat -s

# Hiển thị thống kê TCP chỉ
netstat -st

# Hiển thị thống kê UDP chỉ
netstat -su
  1. Thống kê giao diện
# Hiển thị thống kê giao diện
netstat -i

# Hiển thị thông tin giao diện mở rộng
netstat -ie

Ví dụ đầu ra của thống kê giao diện:

Iface    MTU   RX-OK RX-ERR RX-DRP RX-OVR   TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0    1500  158426      0      0      0   88573      0      0      0 BMRU
lo     65536   24846      0      0      0   24846      0      0      0 LRU

Trong đó:

  • RX: Thống kê nhận
  • TX: Thống kê truyền
  • OK: Gói tin thành công
  • ERR: Số lượng lỗi
  • DRP: Gói tin bị rơi
  • OVR: Sự kiện quá tải

Các trường hợp sử dụng phổ biến

Khắc phục sự cố mạng

Kiểm tra các cổng mở

  1. Tìm tất cả các cổng mở trên hệ thống
sudo netstat -tulpn | grep LISTEN

Lệnh này giúp xác định:

  • Các dịch vụ đang chạy
  • Các cổng mà chúng đang sử dụng
  • Các quy trình sở hữu các cổng này
  1. Kiểm tra xem một cổng cụ thể có đang được sử dụng không
sudo netstat -tulpn | grep ":80"    # Kiểm tra máy chủ web
sudo netstat -tulpn | grep ":3306"  # Kiểm tra MySQL

Xác định các kết nối hoạt động

  1. Giám sát các kết nối hiện tại
# Hiển thị tất cả các kết nối đã thiết lập
netstat -nat | grep ESTABLISHED

# Đếm số kết nối theo địa chỉ IP
netstat -nat | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
  1. Theo dõi trạng thái kết nối
# Xem phân phối trạng thái kết nối
netstat -ant | awk '{print $6}' | sort | uniq -c

Giám sát lưu lượng mạng

  1. Phân tích lưu lượng giao diện
# Theo dõi thống kê giao diện theo thời gian thực
netstat -i
watch -n 1 "netstat -i"
  1. Giám sát theo giao thức
# Giám sát thống kê lưu lượng TCP
netstat -st

# Giám sát thống kê lưu lượng UDP
netstat -su

Phân tích bảo mật

Tìm các kết nối đáng ngờ

  1. Phát hiện các cổng không bình thường
# Liệt kê tất cả các cổng đang lắng nghe không tiêu chuẩn
sudo netstat -tulpn | grep -v ":22\|:80\|:443"
  1. Kiểm tra các mẫu kết nối đáng ngờ
# Tìm các kết nối từ các IP không mong đợi
netstat -ant | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn

Phát hiện quét cổng

# Tìm các nỗ lực kết nối nhiều lần
netstat -ant | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

Kiểm toán hệ thống

  1. Xác minh dịch vụ
# Kiểm tra các quy trình đang lắng nghe trên các cổng nào
sudo netstat -tulpn | grep LISTEN | sort -k 4
  1. Ghi lại kết nối
# Tạo một nhật ký kết nối đơn giản
while true; do
    date >> connection_log.txt
    netstat -ant >> connection_log.txt
    sleep 60
done
  1. Giám sát mức sử dụng tài nguyên
# Giám sát số lượng kết nối theo dịch vụ
netstat -ant | grep ESTABLISHED | awk '{print $4}' | cut -d: -f2 | sort | uniq -c

Các tình huống khắc phục sự cố phổ biến

  1. Vấn đề máy chủ web
# Kiểm tra các kết nối máy chủ web
sudo netstat -ant | grep ":80\|:443" | awk '{print $6}' | sort | uniq -c
  1. Vấn đề kết nối cơ sở dữ liệu
# Giám sát các kết nối cơ sở dữ liệu (ví dụ MySQL)
sudo netstat -ant | grep :3306 | awk '{print $6}' | sort | uniq -c
  1. Phân tích máy chủ mail
# Kiểm tra các kết nối máy chủ mail
sudo netstat -ant | grep ":25\|:465\|:587" | awk '{print $6}' | sort | uniq -c

Sử dụng nâng cao

Kết hợp với các lệnh khác

Sử dụng với grep và awk

  1. Lọc và phân tích phức tạp
# Đếm số kết nối theo trạng thái và cổng
netstat -ant | awk '{print $6, $4}' | sort | uniq -c | sort -rn

# Giám sát các kết nối dịch vụ cụ thể theo thời gian
watch -n 1 'netstat -ant | grep ":80" | wc -l'
  1. Phân tích kết nối nâng cao
# Tạo một tóm tắt kết nối
netstat -ant | \
awk '{ip[$5]++} END {for (i in ip) print ip[i],i}' | \
sort -nr | head -n 10

Chuyển hướng đến các công cụ khác

# Sử dụng với tee để ghi nhật ký
netstat -ant | tee network_status.log

# Sử dụng với xargs để quản lý quy trình
netstat -tulpn | grep LISTEN | awk '{print $7}' | cut -d/ -f1 | xargs ps -f

Kịch bản và tự động hóa

Kịch bản giám sát cơ bản

#!/bin/bash

LOG_FILE="/var/log/network_monitor.log"

monitor_connections() {
    echo "=== Báo cáo trạng thái mạng ===" >> $LOG_FILE
    date >> $LOG_FILE
    echo "Kết nối hoạt động:" >> $LOG_FILE
    netstat -ant | grep ESTABLISHED | wc -l >> $LOG_FILE
    echo "Các cổng đang lắng nghe:" >> $LOG_FILE
    netstat -tulpn | grep LISTEN >> $LOG_FILE
    echo "=========================" >> $LOG_FILE
}

# Chạy mỗi 5 phút
while true; do
    monitor_connections
    sleep 300
done

Kịch bản phân tích nâng cao

#!/bin/bash

analyze_network() {
    echo "=== Phân tích mạng ==="
    
    echo -e "\n10 kết nối IP hàng đầu:"
    netstat -ant | grep ESTABLISHED | \
    awk '{print $5}' | cut -d: -f1 | \
    sort | uniq -c | sort -rn | head -n 10
    
    echo -e "\nTrạng thái kết nối:"
    netstat -ant | awk '{print $6}' | \
    sort | uniq -c | sort -rn
    
    echo -e "\nSử dụng cổng:"
    netstat -ant | awk '{print $4}' | \
    cut -d: -f2 | sort | uniq -c | sort -rn | head -n 10
}

# Lưu vào tệp với dấu thời gian
analyze_network | tee -a "network_analysis_$(date +%Y%m%d_%H%M%S).log"

Giám sát hiệu suất

Theo dõi mức sử dụng tài nguyên

  1. Tác động đến CPU và bộ nhớ
# Giám sát mức sử dụng tài nguyên của netstat
while true; do
    ps aux | grep netstat | grep -v grep
    sleep 1
done
  1. Hiệu suất giao diện mạng
#!/bin/bash
# Giám sát lưu lượng giao diện
INTERVAL=1
INTERFACE="eth0"

while true; do
    R1=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
    T1=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
    sleep $INTERVAL
    R2=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
    T2=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
    
    RBPS=$(( ($R2 - $R1) / $INTERVAL ))
    TBPS=$(( ($T2 - $T1) / $INTERVAL ))
    
    echo "Giao diện $INTERFACE:"
    echo "RX: $(($RBPS/1024)) KB/s"
    echo "TX: $(($TBPS/1024)) KB/s"
    echo "------------------------"
done

Giải pháp giám sát lâu dài

#!/bin/bash
# Tạo báo cáo thống kê mạng hàng giờ

LOGDIR="/var/log/netstat_reports"
mkdir -p $LOGDIR

generate_report() {
    TIMESTAMP=$(date +%Y%m%d_%H)
    REPORT="$LOGDIR/netstat_report_$TIMESTAMP.log"
    
    echo "Báo cáo mạng - $(date)" > $REPORT
    echo "=========================" >> $REPORT
    
    echo "Tóm tắt kết nối:" >> $REPORT
    netstat -s >> $REPORT
    
    echo "Thống kê giao diện:" >> $REPORT
    netstat -i >> $REPORT
    
    echo "Kết nối hiện tại:" >> $REPORT
    netstat -ant >> $REPORT
}

# Chạy tạo báo cáo
generate_report

Mẹo tích hợp

  1. Kết hợp với giám sát hệ thống
# Thêm vào các kịch bản giám sát hệ thống
if [ $(netstat -ant | grep ESTABLISHED | wc -l) -gt 100 ]; then
    echo "Phát hiện số lượng kết nối cao" | mail -s "Cảnh báo mạng" [email protected]
fi
  1. Chức năng báo cáo tùy chỉnh
network_summary() {
    local port="$1"
    echo "Kết nối trên cổng $port:"
    netstat -ant | grep ":$port" | awk '{print $6}' | sort | uniq -c
}

# Cách sử dụng: network_summary 80

Các lựa chọn thay thế cho netstat

Lệnh ss

ss (Thống kê Socket) là sự thay thế hiện đại cho netstat trong các hệ thống Linux. Nó thường nhanh hơn và phong phú tính năng hơn so với netstat.

Lợi thế chính của ss

  • Thực thi nhanh hơn, đặc biệt trên các hệ thống có nhiều kết nối
  • Thông tin socket chi tiết hơn
  • Hỗ trợ tốt hơn cho các giao thức mới hơn
  • Sử dụng tài nguyên hệ thống thấp hơn

So sánh với netstat

# Lệnh netstat so với ss tương đương

# Liệt kê tất cả các kết nối
netstat -a
ss

# Hiển thị các cổng TCP đang lắng nghe
netstat -tln
ss -tln

# Hiển thị thông tin quy trình
netstat -p
ss -p

# Hiển thị thống kê
netstat -s
ss -s

Ví dụ sử dụng ss

# Hiển thị thông tin socket chi tiết
ss -i

# Hiển thị thông tin thời gian
ss -o

# Hiển thị mức sử dụng bộ nhớ
ss -m

# Lọc theo trạng thái
ss state established

# Lọc theo cổng
ss sport = :80

Các lựa chọn hiện đại

lsof (Liệt kê các tệp mở)

# Hiển thị các kết nối mạng
lsof -i

# Hiển thị các cổng đang lắng nghe
lsof -i -P -n | grep LISTEN

# Hiển thị các kết nối đã thiết lập
lsof -i | grep ESTABLISHED

nmap

# Quét các cổng mở
nmap localhost

# Quét cổng chi tiết
nmap -sV localhost

iptraf-ng

  • Giám sát lưu lượng IP theo thời gian thực
  • Thống kê giao thức chi tiết
  • Thống kê giao diện
  • Giám sát trạm LAN

Khi nào sử dụng cái gì

Sử dụng netstat khi:

  • Làm việc trên các hệ thống cũ
  • Cần tính tương thích đa nền tảng
  • Theo dõi tài liệu đã được thiết lập
  • Chạy các chẩn đoán mạng đơn giản

Sử dụng ss khi:

  • Làm việc trên các hệ thống Linux hiện đại
  • Cần thực thi nhanh hơn
  • Xử lý nhiều kết nối
  • Cần thông tin socket chi tiết

Sử dụng lsof khi:

  • Cần xem thông tin mô tả tệp
  • Muốn liên kết các kết nối mạng với các quy trình
  • Khắc phục sự cố ứng dụng

Sử dụng nmap khi:

  • Thực hiện kiểm toán bảo mật
  • Cần quét cổng chi tiết
  • Phân tích các dịch vụ mạng

Hướng dẫn di chuyển

Chuyển từ netstat sang ss

lệnh netstat tương đương ss Mô tả
netstat -t ss -t Hiển thị các kết nối TCP
netstat -u ss -u Hiển thị các kết nối UDP
netstat -l ss -l Hiển thị các socket đang lắng nghe
netstat -p ss -p Hiển thị thông tin quy trình
netstat -n ss -n Không giải quyết tên
netstat -a ss Hiển thị tất cả các socket
netstat -r ip route Hiển thị bảng định tuyến

Ví dụ di chuyển kịch bản

# Kịch bản netstat cũ
#!/bin/bash
netstat -tulpn | grep LISTEN > listening_ports.log

# Tương đương ss mới
#!/bin/bash
ss -tulpn | grep LISTEN > listening_ports.log

Mẹo chọn công cụ

  1. Cân nhắc hiệu suất
  • Đối với các hệ thống quy mô lớn: Sử dụng ss
  • Đối với các kiểm tra cơ bản: Cả hai công cụ đều hoạt động tốt
  • Đối với phân tích chi tiết: Kết hợp nhiều công cụ
  1. Vấn đề tương thích
# Kiểm tra xem ss có sẵn không
if command -v ss >/dev/null 2>&1; then
    ss -tulpn
else
    netstat -tulpn
fi
  1. Yêu cầu tính năng
  • Giám sát cơ bản: netstat/ss
  • Phân tích bảo mật: nmap
  • Liên kết quy trình: lsof
  • Giám sát theo thời gian thực: iptraf-ng

Các thực hành và mẹo tốt nhất

Cân nhắc hiệu suất

Tối ưu hóa việc sử dụng lệnh

  1. Sử dụng đầu ra số khi có thể
# Chậm hơn (với giải quyết DNS)
netstat -ta

# Nhanh hơn (không có giải quyết DNS)
netstat -tan
  1. Giới hạn kích thước đầu ra
# Thay vì hiển thị tất cả các kết nối
netstat -a

# Lọc thông tin cụ thể
netstat -an | grep ':80'
  1. Tránh việc kiểm tra liên tục
# Không được khuyến nghị cho các hệ thống bận rộn
netstat -c

# Cách tiếp cận tốt hơn với khoảng thời gian kiểm soát
while true; do
    netstat -an | grep ESTABLISHED
    sleep 5
done

Các cạm bẫy phổ biến

Vấn đề sử dụng tài nguyên

  • Vấn đề: Sử dụng CPU quá mức trong quá trình giải quyết tên
# Lệnh gây vấn đề
watch -n 1 'netstat -ta'

# Thay thế tốt hơn
watch -n 1 'netstat -tan'

Vấn đề quyền truy cập

  • Vấn đề: Thiếu thông tin quy trình
# Sẽ hiển thị thông tin không đầy đủ
netstat -p

# Sử dụng đúng
sudo netstat -p

Diễn giải đầu ra

  • Vấn đề: Hiểu sai trạng thái kết nối
# Hiểu lầm phổ biến với TIME_WAIT
netstat -ant | grep TIME_WAIT

# Phân tích tốt hơn với ngữ cảnh
netstat -ant | awk '{print $6}' | sort | uniq -c

Mẹo cho việc sử dụng hàng ngày

Tạo các alias hữu ích

# Thêm vào ~/.bashrc
alias ns='netstat -tulpn'
alias nsc='netstat -ant | grep ESTABLISHED'
alias nsl='sudo netstat -tulpn | grep LISTEN'

Kiểm tra bảo mật nhanh

# Kiểm tra các cổng đang lắng nghe không bình thường
check_ports() {
    echo "Các cổng đã biết:"
    sudo netstat -tulpn | grep -E ':22|:80|:443'
    echo -e "\nCác cổng không biết:"
    sudo netstat -tulpn | grep -vE ':22|:80|:443'
}

Mẫu giám sát

# Mẫu giám sát kết nối
monitor_connections() {
    local port=$1
    local threshold=$2
    
    count=$(netstat -an | grep ":$port" | grep ESTABLISHED | wc -l)
    if [ $count -gt $threshold ]; then
        echo "Cảnh báo: $count kết nối trên cổng $port vượt quá ngưỡng $threshold"
    fi
}

# Cách sử dụng: monitor_connections 80 100

Tài liệu và ghi nhật ký

Tạo nhật ký hữu ích

#!/bin/bash
# Ghi nhật ký trạng thái mạng

log_network_status() {
    local logfile="/var/log/network_status.log"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    {
        echo "=== Trạng thái mạng tại $timestamp ==="
        echo "Các cổng đang lắng nghe:"
        netstat -tulpn | grep LISTEN
        echo "Các kết nối hiện tại:"
        netstat -ant | awk '{print $6}' | sort | uniq -c
        echo "=================================="
    } >> "$logfile"
}

Quy trình hoạt động tiêu chuẩn

# Mẫu cho các kiểm tra định kỳ
daily_network_check() {
    echo "1. Kiểm tra các cổng đang lắng nghe..."
    sudo netstat -tulpn | grep LISTEN
    
    echo "2. Kiểm tra các kết nối đã thiết lập..."
    netstat -ant | grep ESTABLISHED | wc -l
    
    echo "3. Kiểm tra trạng thái kết nối..."
    netstat -ant | awk '{print $6}' | sort | uniq -c
    
    echo "4. Kiểm tra thống kê giao diện..."
    netstat -i
}

Hướng dẫn khắc phục sự cố

  1. Vấn đề kết nối
connection_troubleshoot() {
    local port=$1
    echo "=== Khắc phục sự cố kết nối cho cổng $port ==="
    echo "1. Kiểm tra xem cổng có đang lắng nghe không:"
    sudo netstat -tulpn | grep ":$port"
    
    echo "2. Kiểm tra các kết nối hoạt động:"
    netstat -ant | grep ":$port" | awk '{print $6}' | sort | uniq -c
    
    echo "3. Kiểm tra trạng thái kết nối:"
    netstat -ant | grep ":$port" | awk '{print $6}' | sort | uniq -c
}
  1. Giám sát tài nguyên hệ thống
resource_check() {
    echo "=== Kiểm tra tài nguyên hệ thống ==="
    echo "1. Tổng số kết nối:"
    netstat -ant | wc -l
    
    echo "2. Kết nối theo IP:"
    netstat -ant | grep ESTABLISHED | \
    awk '{print $5}' | cut -d: -f1 | \
    sort | uniq -c | sort -nr | head -5
    
    echo "3. Mức sử dụng bộ nhớ của các quy trình mạng:"
    ps aux | grep -E 'netstat|ss' | grep -v grep
}

Lệnh Netstat trên Linux

Câu hỏi thường gặp (FAQ)

Q: Tại sao tôi không thể thấy thông tin quy trình (PID)?

A: Điều này thường do quyền truy cập. Chạy lệnh với sudo:
sudo netstat -tulpn

Tùy chọn -p yêu cầu quyền root để hiển thị thông tin quy trình.

Q: Sự khác biệt giữa trạng thái LISTEN và ESTABLISHED là gì?

A: 
- LISTEN: Chỉ ra rằng một dịch vụ đang lắng nghe trên cổng đó, chờ kết nối
- ESTABLISHED: Đại diện cho một phiên kết nối đang hoạt động, hiện tại

Q: Làm thế nào để kiểm tra các kết nối cho một cổng cụ thể?

A: Bạn có thể sử dụng grep để lọc các kết nối theo cổng:

# Kiểm tra tất cả các kết nối trên cổng 80
netstat -an | grep ":80"

# Kiểm tra chỉ các cổng đang lắng nghe
netstat -tunl | grep ":80"

Q: Tại sao lệnh netstat của tôi chạy chậm?

A: Hai lý do chính:
1. Giải quyết DNS - Sử dụng tùy chọn -n để tránh giải quyết tên
2. Quá nhiều kết nối - Sử dụng lọc hoặc xem xét chuyển sang ss

# Ví dụ lệnh nhanh hơn
netstat -tan | grep ESTABLISHED

Q: Liệu netstat có ảnh hưởng đến hiệu suất hệ thống không?

A: Việc kiểm tra thường xuyên có thể ảnh hưởng đến hiệu suất. Các thực hành tốt nhất:
1. Tăng khoảng thời gian kiểm tra
2. Sử dụng lọc để giảm đầu ra
3. Xem xét ss cho các hệ thống quy mô lớn
4. Tránh chế độ liên tục (-c) trên các hệ thống bận rộn

Q: Làm thế nào để xác định ứng dụng nào đang sử dụng một cổng cụ thể?

A: Sử dụng các lệnh này:
# Hiển thị quy trình sử dụng cổng 80
sudo netstat -tulpn | grep ":80"

# Thay thế bằng lsof
sudo lsof -i :80

Q: Làm thế nào tôi có thể theo dõi trạng thái kết nối?

A: Một số cách tiếp cận:

# Đếm số kết nối theo trạng thái
netstat -ant | awk '{print $6}' | sort | uniq -c

# Giám sát các kết nối đã thiết lập
watch -n 1 'netstat -ant | grep ESTABLISHED | wc -l'

Q: Làm thế nào tôi có thể kiểm tra các kết nối đáng ngờ?

A: Tìm kiếm:
1. Các cổng không bình thường:
netstat -tulpn | grep -vE ':22|:80|:443'

2. Số lượng kết nối cao từ một IP duy nhất:
netstat -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

Q: Làm thế nào để phát hiện các nỗ lực quét cổng?

A: Giám sát các kết nối SYN_RECV:
netstat -ant | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c

Q: Sự khác biệt giữa các tùy chọn -t và -u là gì?

A:
-t : Hiển thị chỉ các kết nối TCP
-u : Hiển thị chỉ các kết nối UDP

Bạn có thể kết hợp chúng:
netstat -tu : Hiển thị cả TCP và UDP

Q: Làm thế nào để lưu đầu ra của netstat vào một tệp?

A: Một số phương pháp:

# Đầu ra cơ bản vào tệp
netstat -ant > network_status.log

# Với dấu thời gian
(date; netstat -ant) > network_status.log

# Ghi nhật ký liên tục
while true; do
    netstat -ant >> network_log.txt
    sleep 300
done

Q: Thông báo "Địa chỉ đã được sử dụng" trong đầu ra của netstat có nghĩa là gì?

A: Điều này chỉ ra rằng một cổng đã được sử dụng bởi một quy trình khác. Để tìm nó:
sudo netstat -tulpn | grep "<port_number>"

Q: Tại sao tôi thấy nhiều kết nối TIME_WAIT?

A: TIME_WAIT là bình thường sau khi các kết nối đóng. Tuy nhiên, quá nhiều có thể chỉ ra:
1. Lưu lượng kết nối cao
2. Có thể có vấn đề mạng
3. Ứng dụng không tái sử dụng kết nối

Giám sát với:
netstat -ant | grep TIME_WAIT | wc -l