Làm chủ lệnh Netstat trên Linux: Từ cơ bản đến giám sát mạng nâng cao
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:
- 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
- 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ờ
- 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
- 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
- Xem tất cả các kết nối hoạt động
netstat -a
- Hiển thị tất cả các kết nối TCP
netstat -at
- 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
- Kiểm tra bảng định tuyến
netstat -r
- 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:
- Hiển thị tất cả các giao thức với địa chỉ số
netstat -an
- 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
- 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
- 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
- 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
- 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ê
- 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
- 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ở
- 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
- 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
- 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
- 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
- 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"
- 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ờ
- 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"
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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'
- 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
- 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
- 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
- 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
- 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ụ
- 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ụ
- 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
- 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
- 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
- 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'
- 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ố
- 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
}
- 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
}
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