tcpdump thường rất mạnh mẽ cho thao tác dòng lệnh, nhưng phân tích dữ liệu dạng text lại rất phức tạp và tốn nhiều thời gian. Vì vậy, việc kết hợp khả năng bắt gói tin của tcpdump trên server với giao diện trực quan của Wireshark trên máy cá nhân, đồng thời xem realtime, là giải pháp hiệu quả cho quá trình phân tích mạng. Trong bài viết này, mình sẽ chia sẻ cho bạn cách bắt gói tin trên server và view realtime trên Local bằng wireshark chi tiết, hiệu quả.
Những điểm chính
- Định nghĩa tcpdump: Là công cụ dòng lệnh trên Linux/Unix để bắt và phân tích gói tin mạng, cho phép ghi, lọc và hiển thị dữ liệu theo thời gian thực hoặc lưu ra file.
- Cách thức hoạt động của tcpdump: Lắng nghe trên giao diện mạng, bắt gói dữ liệu và hiển thị/ghi lại theo cấu trúc thống nhất.
- Lợi ích khi sử dụng tcpdump: Xác định nhanh nguyên nhân sự cố mạng, giám sát an ninh, phân tích/tối ưu hiệu suất ứng dụng và là công cụ học tập về giao thức mạng.
- Hướng dẫn Live capture packet: Kết hợp SSH với tcpdump trên server và Wireshark trên local qua lệnh
ssh user@server_ip 'tcpdump -nn -i any -c 10000 -w - "ip and not port 22"' | sudo wireshark -k -i -
. - Phân tích lệnh: Phần
ssh
thực thi lệnh trên server;tcpdump
bắt gói tin với các tùy chọn và bộ lọc; phần| wireshark
nhận dữ liệu và hiển thị trên Wireshark local. - Kịch bản nâng cao: Lọc gói tin hiệu quả hơn, xem Real-time, lưu ra file và hướng dẫn thực hiện cho người dùng Windows.
- Lưu ý quan trọng: Tỷ lệ tcpdump an toàn, có thể lọc gói tin theo nhu cầu, kết hợp với Wireshark trên local để phân tích trực quan và cần cấu hình Firewall, cập nhật phần mềm, bảo mật SSH, sao lưu dữ liệu, giám sát tài nguyên để bảo vệ VPS.
- Câu hỏi thường gặp: Giải đáp những câu hỏi thường gặp liên quan đến cách bắt gói tin bằng tcpdump.
tcpdump là gì?
tcpdump là một công cụ dòng lệnh mạnh mẽ, dùng để bắt và phân tích các gói dữ liệu mạng trên các hệ điều hành Linux/Unix. Công cụ này cho phép ghi lại, lọc cũng như hiển thị các gói tin đang được truyền qua giao diện mạng của máy tính trong thời gian thực hoặc lưu ra file để phân tích bằng phần mềm chuyên dụng như Wireshark.
Ngoài ra, tcpdump còn hỗ trợ rất nhiều tùy chọn lọc (Theo IP, cổng, giao thức,…), giúp quản trị viên, kỹ sư mạng dễ dàng kiểm tra, theo dõi, phát hiện sự cố hoặc đánh giá bảo mật mạng. Đây là một trong những công cụ kiểm thử, giám sát và phân tích lưu lượng mạng phổ biến nhất hiện nay trên môi trường server không có giao diện đồ họa.

Hình thức tồn tại của tcpdump
Công cụ tcpdump
hoạt động và trình bày kết quả theo hai hình thức chính. Khi được thực thi, tcpdump sẽ lắng nghe trên một card mạng được chỉ định, bắt các gói tin phù hợp với một biểu thức logic do người dùng cung cấp và hiển thị một bản tóm tắt trực tiếp trên màn hình theo thời gian thực. Ngoài ra, tcpdump
còn cung cấp khả năng lưu lại toàn bộ nội dung của các gói tin đã bắt được vào một file, thường có định dạng .pcap
. File này có thể được sử dụng để phân tích sâu hơn sau đó bằng chính lệnh tcpdump
với tùy chọn -r
hoặc thông qua các công cụ phân tích mạng đồ họa chuyên dụng như Wireshark.
Trong trường hợp không có tùy chọn giới hạn số lượng gói tin, tcpdump
sẽ tiếp tục chạy cho đến khi nhận được tín hiệu ngắt từ người dùng. Sau khi kết thúc quá trình, tcpdump sẽ hiển thị một báo cáo thống kê, bao gồm các thông tin sau:
- Packet captured: Số lượng gói tin đã được bắt và xử lý.
- Packet received by filter: Số lượng gói tin được bộ lọc tiếp nhận.
- Packet dropped by kernel: Số lượng gói tin đã bị nhân hệ điều hành (kernel) bỏ qua, thường do bộ đệm không đủ.

Một số tùy chọn trong lệnh tcpdump
Tùy chọn | Mô tả |
---|---|
Lựa chọn giao diện và gói tin | |
-i <interface> | Lắng nghe và bắt gói tin trên một giao diện mạng cụ thể. |
-D | Liệt kê tất cả các giao diện mạng có sẵn mà tcpdump có thể lắng nghe. |
-c <N> | Dừng việc bắt gói tin sau khi đã nhận đủ N gói. |
-s <size> | Thiết lập kích thước tối đa của mỗi gói tin được bắt. Sử dụng -s 0 để bắt toàn bộ gói tin. |
-F <tệp_tin> | Sử dụng các quy tắc lọc từ một file được chỉ định thay vì nhập trực tiếp trên dòng lệnh. |
Định dạng hiển thị | |
-n | Không phân giải địa chỉ IP thành tên miền. |
-nn | Không phân giải địa chỉ IP và cả số cổng thành tên dịch vụ. |
-v, -vv, -vvv | Hiển thị thông tin chi tiết hơn về gói tin. Mức độ chi tiết tăng dần với -vv và -vvv . |
-q | Hiển thị kết quả một cách ngắn gọn, ít chi tiết hơn. |
-x , -A | -x : Hiển thị nội dung gói tin ở định dạng Hexadecimal.-A: Hiển thị nội dung gói tin ở định dạng ASCII. |
-e | Hiển thị địa chỉ MAC (liên kết lớp 2) của người gửi và người nhận trong kết quả. |
-t , -tt | -t : Không hiển thị dấu thời gian trên mỗi dòng.-tt: Hiển thị dấu thời gian dưới dạng số Unix. |
-N | Không hiển thị phần tên miền đủ điều kiện (FQDN). Ví dụ: host thay vì host.example.com . |
Thao tác với file | |
-w <tệp_tin> | Ghi lại các gói tin đã bắt được vào một file có định dạng .pcap để phân tích sau. |
-r <tệp_tin> | Đọc và phân tích các gói tin từ một file .pcap đã được ghi lại trước đó. |
Nâng cao và tùy chỉnh khác | |
-S | Hiển thị số thứ tự tuyệt đối thay vì tương đối. |
-K | Không thực hiện việc kiểm tra tổng kiểm của các gói tin. |
-B <size> | Thiết lập kích thước bộ đệm cho việc bắt gói tin. |
-L | Liệt kê các loại liên kết dữ liệu mà giao diện mạng hỗ trợ. |
-y <type> | Lựa chọn một loại liên kết dữ liệu cụ thể để bắt gói tin. |
Cách thức hoạt động của tcpdump
tcpdump hoạt động bằng cách lắng nghe trên giao diện mạng của máy tính, nhận diện mọi gói dữ liệu truyền tới hoặc rời khỏi máy và cho phép bạn xem trực tiếp hoặc lưu lại nội dung giao tiếp mạng đó để phân tích sau. Bạn có thể sử dụng lệnh lọc để chỉ bắt các gói tin phù hợp với nhu cầu, qua đó giúp dễ dàng kiểm tra, gỡ lỗi hoặc phân tích mạng. Ngoài ra, tcpdump còn có thể lưu lại dữ liệu thành file để phân tích sau bằng các công cụ khác như Wireshark.

Các lợi ích khi sử dụng tcpdump
- Công cụ
tcpdump
giúp bạn xác định nhanh nguyên nhân của các vấn đề mạng thông qua việc phân tích dữ liệu thô. tcpdump
hỗ trợ hiệu quả việc giám sát an ninh bằng cách phát hiện các hoạt động mạng bất thường như quét cổng hoặc các kết nối trái phép.- Việc sử dụng
tcpdump
cho phép bạn phân tích và tối ưu hóa hiệu suất ứng dụng bằng cách kiểm tra độ trễ và tình trạng mất gói tin. - Công cụ tcpdump đóng vai trò như một phương tiện học tập giá trị, giúp bạn hiểu sâu hơn về cách các giao thức mạng vận hành trên thực tế.

Tìm hiểu định dạng chung của một dòng giao thức Tcpdump
Khi tcpdump
thu thập và hiển thị thông tin về một gói tin TCP, mỗi dòng đầu ra sẽ tuân theo một cấu trúc thống nhất. Việc hiểu rõ cấu trúc này là yếu tố then chốt để bạn có thể diễn giải chính xác luồng giao tiếp mạng. Một dòng thông tin TCP điển hình có định dạng chung như sau:
[Timestamp] [Protocol] [Source IP].[Source Port] > [Destination IP].[Destination Port]: [Flags], [Sequence Numbers], [Window Size], [Options], [Data Length]
Mỗi thành phần trong định dạng này cung cấp một thông tin quan trọng về gói tin:
- 1. Dấu thời gian: Trường đầu tiên của dòng ghi lại thời điểm chính xác khi gói tin được thu thập bởi card mạng, với độ chính xác đến micro giây.
- 2. Thông tin giao thức và nguồn/đích: Phần tiếp theo xác định giao thức lớp mạng (Thường là
IP
hoặcIPv6
), theo sau là địa chỉ IP nguồn và cổng nguồn, ngăn cách bởi dấu>
, sau đó là địa chỉ IP đích và cổng đích. - 3. Cờ TCP (Flags): Mục
Flags
là một chỉ báo quan trọng về trạng thái và mục đích của gói tin trong một phiên kết nối TCP. Mỗi ký tự đại diện cho một cờ điều khiển khác nhau:[S]
(SYN): Gói tin dùng để khởi tạo một kết nối mới.[P]
(PUSH): Gói tin yêu cầu hệ điều hành của bên nhận đẩy dữ liệu lên cho ứng dụng ngay lập tức.[F]
(FIN): Gói tin dùng để yêu cầu đóng một kết nối.[R]
(RST): Gói tin dùng để đặt lại một kết nối một cách đột ngột, thường do lỗi.[.]
(Dấu chấm): Ký tự này là một cách viết tắt, thể hiện rằng cờ ACK (Acknowledgement) đã được thiết lập, xác nhận rằng dữ liệu đã được nhận.
- 4. Số thứ tự và số xác nhận: Các số
seq
vàack
là cơ chế cốt lõi đảm bảo tính toàn vẹn và đúng trình tự của dữ liệu trong giao thức TCP. - 5. Kích thước cửa sổ: Trường
win
thể hiện kích thước của cửa sổ nhận của bên gửi, tính bằng byte, thông báo cho bên nhận biết còn bao nhiêu dung lượng bộ đệm trống, đóng vai trò chính trong cơ chế kiểm soát luồng của TCP. - 6. Độ dài dữ liệu: Cuối cùng, trường
length
chỉ định độ dài của phần dữ liệu thực tế được vận chuyển trong gói tin.

Hướng dẫn chi tiết cách bắt gói tin Real-time
Các công cụ cần chuẩn bị
Để thực hiện kỹ thuật này, bạn cần đảm bảo có sẵn các công cụ sau:
- Trên Server:
tcpdump
: Công cụ bắt gói tin dòng lệnh tiêu chuẩn trên hầu hết các hệ điều hành Linux.- Quyền truy cập SSH vào server.
- Trên máy Local (Máy tính cá nhân):
- Wireshark: Công cụ phân tích gói tin đồ họa hàng đầu.
- Một SSH client (Terminal trên macOS/Linux hoặc PuTTY/WSL trên Windows).
Hướng dẫn chi tiết cách bắt gói tin realtime
Để live capture packet trên Server và view realtime trên máy local bằng wireshark, bạn sử dụng lệnh sau:
ssh user@server_ip 'tcpdump -nn -i any -c 10000 -w - "ip and not port 22"' | sudo wireshark -k -i -
Bây giờ, bạn hãy phân tích chi tiết dòng lệnh này.
Bước 1: Phía Server – Thực thi tcpdump
qua SSH
Phần ssh user@server_ip '...'
chịu trách nhiệm thực thi lệnh bắt gói tin trên máy chủ từ xa.
ssh user@server_ip
: Khởi tạo một kết nối SSH đến server với user và server_ip tương ứng.'tcpdump ...'
: Lệnh được đặt trong dấu nháy đơn sẽ được thực thi trên server ngay sau khi kết nối thành công. Dưới đây là các tùy chọn củatcpdump
:-nn
: Tùy chọn -nn giúp giữ nguyên địa chỉ IP và số port ở dạng số, không chuyển đổi thành tên miền hoặc tên dịch vụ, nhờ đó tốc độ hiển thị kết quả bắt gói dữ liệu sẽ nhanh và chính xác hơn do không phải chờ tra cứu DNS hoặc dịch vụ.-i any
: Lắng nghe trên tất cả các card mạng, nếu bạn muốn chỉ định một card mạng cụ thể (Ví dụ: card mạng public), bạn có thể dùng-i eth0
.-c 10000
:tcpdump
sẽ kết thúc sau khi capture đủ 10,000 packets.-w -
: Yêu cầutcpdump
ghi output ra luồng tiêu chuẩn, ký hiệu là-
, thay vì ghi ra file.pcap
để có thể chuyển hướng dữ liệu đi nơi khác."ip and not port 22"
: Là một bộ lọc để loại trừ chính traffic của phiên SSH mà chúng ta đang sử dụng (Thường chạy trên port 22). Nếu không có bộ lọc này, bạn sẽ tạo ra một vòng lặp vô hạn và làm nhiễu kết quả phân tích.

Bước 2: Phía Local – Dùng Wireshark để lọc dữ liệu
Phần | wireshark ...
nhận dữ liệu từ tcpdump
và hiển thị.
|
(Pipeline): Là một toán tử của shell, có chức năng lấy toàn bộ standard output của lệnh bên trái (ssh...
) và truyền đi để làm standard input cho lệnh bên phải (wireshark...
).wireshark
: Khởi chạy ứng dụng Wireshark.-k
: Bắt đầu phiên bắt gói tin ngay lập tức.-i -
: Yêu cầu Wireshark đọc dữ liệu từ luồng tiêu chuẩn (standard input) với ký hiệu là-
, thay vì từ một card mạng hay một file.

Khi chạy lệnh, một cửa sổ Wireshark sẽ bật lên và bạn sẽ thấy các gói tin từ server xuất hiện trực tiếp, sẵn sàng để bạn phân tích.

Kinh nghiệm
Các kịch bản nâng cao và tùy chỉnh
1. Lọc gói tin hiệu quả hơn
Bạn có thể thay đổi bộ lọc của tcpdump
để chỉ bắt những gì mình cần, giúp giảm nhiễu và tập trung vào vấn đề:
- Lọc theo IP:
host 1.2.3.4
- Lọc theo cổng:
port 443
- Lọc theo giao thức:
icmp
hoặcarp
- Kết hợp bộ lọc:
host 8.8.8.8 and port 53
(Bắt gói tin DNS đến và đi từ server 8.8.8.8)
Ví dụ: Để bắt gói tin ping (ICMP) đến server, bạn dùng lệnh sau:
ssh user@server_ip 'tcpdump -nn -i any -U -s0 -w - "icmp"' | wireshark -k -i -
2. Xem Real-time và lưu ra File
Nếu muốn vừa phân tích trực tiếp, vừa lưu lại một bản .pcap
để xem lại sau, bạn có thể dùng lệnh tee
với cú pháp như sau:
ssh user@server_ip 'tcpdump -i any -U -s0 -w - "not port 22"' | tee captured_from_server.pcap | wireshark -k -i -
Lệnh tee
sẽ sao chép luồng dữ liệu đi qua, một bản ghi ra file captured_from_server.pcap
và một bản tiếp tục được đưa đến Wireshark.
3. Dành cho người dùng Windows
Nếu dùng Windows, bạn cần có PuTTY (Sử dụng plink.exe
) hoặc WSL (Windows Subsystem for Linux).
- Với PuTTY: Bạn cần đảm bảo đường dẫn đến
plink.exe
vàWireshark.exe
là chính xác. - Powershell:
& "C:\Program Files\PuTTY\plink.exe" -ssh -l user server_ip "tcpdump -i any -U -s0 -w - 'not port 22'" | & "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
- Với WSL: Dòng lệnh hoàn toàn tương tự như trên Linux.
Câu hỏi thường gặp
Tại sao nên dùng tcpdump thay vì Wireshark trực tiếp trên server?
Tcpdump phù hợp với các server không có giao diện đồ họa, tiêu tốn rất ít tài nguyên, có khả năng lọc gói tin mạnh mẽ. Việc kết hợp với Wireshark trên máy cá nhân giúp bạn phân tích dữ liệu trực quan, tiết kiệm thời gian, tránh việc upload file lớn về local.
Dùng lệnh tcpdump có an toàn không?
Câu trả lời là Có. Lệnh hướng dẫn chỉ thực hiện thao tác đọc và xuất dữ liệu các gói tin mạng, không có tác động ghi hoặc làm thay đổi hệ thống.
Có thể chỉ bắt gói tin của một giao thức/cổng nhất định không?
Câu trả lời là Có. Bạn thay đổi bộ lọc trong lệnh tcpdump, ví dụ:
– Theo IP: host 1.2.3.4
– Theo cổng: port 443
– Theo giao thức: icmp
Kết hợp điều kiện bằng toán tử and, or, not tuỳ mục đích theo dõi.
Kết luận
Kỹ thuật kết hợp ssh
, tcpdump
và wireshark
là một kỹ năng quan trọng đối với bất kỳ ai làm việc với hệ thống mạng, giúp việc gỡ lỗi phức tạp trên server từ xa trở nên trực quan và hiệu quả hơn. Bằng việc sử dụng thành thạo lệnh trên, bạn có thể nhanh chóng xác định và giải quyết các sự cố mạng, từ đó tiết kiệm được rất nhiều thời gian và công sức.