Tshark: Sự kết hợp hoàn hảo giữa tcpdump và Wireshark
Làm việc với network trên Linux, tcpdump thường là cái tên đầu tiên xuất hiện trong đầu. Nó nhẹ, có sẵn ở mọi nơi, nhưng lại “đuối” khi bạn cần đào sâu vào tầng ứng dụng như xem HTTP headers, SQL queries hay bắt tay SSL/TLS. Ngược lại, Wireshark là một cỗ máy phân tích hạng nặng với giao diện đồ họa cực kỳ trực quan. Tuy nhiên, bạn không thể cài đặt môi trường Desktop lên các server production chỉ để soi gói tin.
Tshark xuất hiện để lấp đầy khoảng trống đó. Về cơ bản, nó là Wireshark phiên bản dòng lệnh. Nó sở hữu toàn bộ sức mạnh của các bộ giải mã (dissectors) từ Wireshark nhưng lại hoạt động mượt mà trong terminal qua SSH. Sau khoảng nửa năm chuyển hẳn sang dùng tshark cho các tác vụ automation và debug từ xa, mình nhận ra đây mới thực sự là công cụ “đáng đồng tiền bát gạo” nhất của một kỹ sư hệ thống.
Điểm khác biệt cốt lõi giữa ba công cụ:
- tcpdump: Ưu tiên tốc độ. Phù hợp để bắt gói tin nhanh, lọc cơ bản ở layer 3-4 (IP, Port).
- Wireshark GUI: Ưu tiên trải nghiệm. Phù hợp để phân tích thủ công các luồng TCP stream phức tạp trên máy cá nhân sau khi đã có file .pcap.
- tshark: Ưu tiên chiều sâu. Phù hợp để soi sâu (Deep Packet Inspection) ngay trên server, tự động hóa việc trích xuất dữ liệu ra định dạng JSON/CSV để xử lý tiếp.
Tại sao mình lại chọn tshark cho môi trường Production?
Dưới đây là những lý do khiến tshark trở thành lựa chọn hàng đầu trong các dự án thực tế mình từng triển khai:
Ưu điểm
- Mổ xẻ gói tin đến từng byte: Tshark hiểu được hơn 3.000 giao thức. Bạn có thể lọc chính xác đến từng field trong gói tin DNS mà tcpdump gần như không thể làm được nếu không dùng regex phức tạp.
- Xuất dữ liệu cực linh hoạt: Mình thường dùng tshark để xuất dữ liệu ra định dạng JSON, sau đó đẩy trực tiếp vào ELK Stack hoặc dùng script Python để parse log tự động.
- Tiết kiệm tài nguyên: Hoạt động hoàn hảo qua SSH, không cần tốn băng thông để tải file pcap nặng hàng GB về máy cá nhân để đọc.
- Thống kê trong tích tắc: Bạn có thể thống kê HTTP response code hay top 10 IP truy cập nhiều nhất chỉ với một dòng lệnh duy nhất.
Nhược điểm cần lưu ý
- Ăn RAM/CPU hơn tcpdump: Do phải “thấu hiểu” nội dung gói tin, tshark sẽ tốn tài nguyên hơn. Trên các server đang quá tải (CPU > 80%), bạn nên cân nhắc kỹ.
- Cú pháp hơi ‘hack não’: Việc phân biệt giữa Capture Filter (tầng kernel) và Display Filter (tầng ứng dụng) ban đầu sẽ làm bạn hơi rối.
Ba tình huống bạn nên quẳng GUI đi để dùng tshark
Hãy mở tshark ngay khi bạn rơi vào các kịch bản sau:
- Cần debug lỗi trên server ở site xa, nơi băng thông kết nối quá yếu để tải file
.pcapdung lượng lớn. - Cần giám sát traffic đặc thù, ví dụ: bắt tất cả các request HTTP có status 5xx và ghi log riêng.
- Trích xuất nhanh danh sách các domain mà server đang query tới để kiểm tra dấu hiệu mã độc hoặc kết nối lạ.
Triển khai tshark: Từ cài đặt đến kỹ thuật lọc nâng cao
Cài đặt và cấu hình nhanh
Trên Ubuntu, câu lệnh vẫn rất quen thuộc:
sudo apt update && sudo apt install tshark -y
Một mẹo nhỏ: Khi trình cài đặt hỏi về quyền bắt gói tin cho user thường, hãy chọn Yes. Sau đó thêm user của bạn vào group để tránh việc luôn phải gõ sudo:
sudo usermod -aG wireshark $USER
# Đừng quên logout và login lại nhé!
Bắt gói tin trực tiếp (Live Capture)
Để xem nhanh traffic trên interface eth0, bạn dùng:
tshark -i eth0
Nếu traffic quá dày đặc, hãy giới hạn lấy 20 gói tin đầu tiên để kiểm tra cấu trúc:
tshark -i eth0 -c 20
Kỹ thuật lọc “thần thánh” với Display Filters (-Y)
Đây là vũ khí mạnh nhất của tshark. Ví dụ, để lọc tất cả các request HTTP GET đang chạy:
tshark -i eth0 -Y "http.request.method == GET"
Hoặc kiểm tra xem có ai đang query DNS đến domain của bạn không:
tshark -i eth0 -Y "dns.qry.name == itfromzero.com"
Trích xuất dữ liệu chuyên sâu với Fields
Thay vì đọc cả mớ hỗn độn, hãy chỉ lấy thứ bạn cần. Ví dụ: lấy IP nguồn, IP đích và User-Agent:
tshark -i eth0 -n -Y "http.request" -T fields -e ip.src -e ip.dst -e http.user_agent
Lưu ý: Tham số -n giúp tắt phân giải tên miền, giúp tshark chạy nhanh hơn đáng kể trên hệ thống tải cao.
Kinh nghiệm thực tế: Xử lý lỗi Packet Loss trong 5 phút
Mình từng gặp ca debug khó khi hệ thống microservices bị chậm vào lúc 10h sáng. Latency nhảy vọt từ 10ms lên tận 500ms nhưng không rõ nguyên nhân từ đâu. Lúc đó, CPU server đang mấp mé 70%, việc kéo file pcap về máy là bất khả thi.
Mình dùng tshark để lọc ngay các gói tin TCP Retransmission – dấu hiệu rõ nhất của nghẽn mạng hoặc mất gói:
tshark -i eth0 -Y "tcp.analysis.retransmission" -T fields -e ip.src -e ip.dst
Kết quả thật bất ngờ: Gần 40% traffic truyền lại tập trung vào một service cũ đang gọi vào database với timeout chỉ 50ms. Khi traffic tăng, DB phản hồi chậm nhẹ khiến service này liên tục gửi lại gói tin, gây ra tình trạng “tự mình bóp mình”. Nhờ tshark, mình xác định đúng IP và port chỉ sau vài phút quan sát.
Lời khuyên: Khi chạy trên production, hãy dùng thêm Capture Filter (tham số -f) để lọc bớt traffic ngay từ tầng kernel, giảm tải cho CPU:
# Chỉ bắt port 443 và tìm các lỗi SSL Handshake
tshark -i eth0 -f "tcp port 443" -Y "tls.alert_message"
Tshark là một con dao đa năng. Chỉ cần nắm vững các bộ lọc, bạn sẽ thấy việc quản trị network không còn là nỗi ám ảnh mỗi khi có sự cố xảy ra.

