Lệnh tcpdump trong linux với các ví dụ dễ hiểu

Lệnh tcpdump trong linux là một công cụ dòng lệnh mạnh mẽ, giúp bạn bắt và phân tích lưu lượng mạng một cách chi tiết. Nó cho phép bạn xem các gói tin đi qua card mạng, hỗ trợ gỡ lỗi và phân tích bảo mật mạng hiệu quả. Với lệnh tcpdump trong linux, bạn có thể lọc gói tin theo nhiều tiêu chí như địa chỉ IP, cổng, hoặc giao thức.

Lệnh tcpdump trong linux là gì?

Command tcpdump in linux là một công cụ dòng lệnh mạnh mẽ, cho phép bạn bắt và phân tích lưu lượng mạng đi qua hoặc đến máy tính của bạn. Nó hoạt động bằng cách "nghe" các gói tin trên một giao diện mạng cụ thể và hiển thị thông tin chi tiết về chúng. Bạn có thể sử dụng command tcpdump in linux để gỡ lỗi các vấn đề mạng, kiểm tra bảo mật hoặc đơn giản là hiểu rõ hơn về cách dữ liệu di chuyển trên mạng. Với nhiều tùy chọn lọc, tcpdump giúp bạn tập trung vào lưu lượng cụ thể mà bạn quan tâm, bỏ qua những phần không cần thiết. Đây là một công cụ vô giá cho bất kỳ ai làm việc với mạng, từ quản trị viên hệ thống đến nhà phát triển phần mềm.

Giới thiệu về lệnh tcpdump

Trong bước này, bạn sẽ tìm hiểu về lệnh tcpdump, một công cụ phân tích gói tin mạng mạnh mẽ.

Lệnh tcpdump được dùng để thu thập và phân tích lưu lượng mạng trên các hệ thống Linux.

Tcpdump cho phép bạn giám sát và kiểm tra các gói tin mạng theo thời gian thực.

Đây là một công cụ giá trị để khắc phục sự cố mạng, phân tích bảo mật và hiểu hành vi mạng.

Hãy bắt đầu bằng cách cài đặt gói tcpdump trên container Ubuntu 22.04 Docker của chúng ta:

sudo apt-get update
sudo apt-get install -y tcpdump

Ví dụ về đầu ra:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:5 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [2,276 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [2,644 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [11.3 kB]
Fetched 5,255 kB in 2s (2,627 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libpcap-dev libpcap0.8 tcpdump
Suggested packages:
  tcpdump-dbg
The following NEW packages will be installed:
  libpcap-dev libpcap0.8 tcpdump
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 521 kB of archives.
After this operation, 1,455 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpcap0.8 amd64 1.10.1-5ubuntu1 [146 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpcap-dev amd64 1.10.1-5ubuntu1 [185 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 tcpdump amd64 4.99.1-3ubuntu1 [190 kB]
Fetched 521 kB in 0s (3,837 kB/s)
Selecting previously unselected package libpcap0.8:amd64.
(Reading database ... 14289 files and directories currently installed.)
Preparing to unpack .../libpcap0.8_1.10.1-5ubuntu1_amd64.deb ...
Unpacking libpcap0.8:amd64 (1.10.1-5ubuntu1) ...
Selecting previously unselected package libpcap-dev:amd64.
Preparing to unpack .../libpcap-dev_1.10.1-5ubuntu1_amd64.deb ...
Unpacking libpcap-dev:amd64 (1.10.1-5ubuntu1) ...
Selecting previously unselected package tcpdump.
Preparing to unpack .../tcpdump_4.99.1-3ubuntu1_amd64.deb ...
Unpacking tcpdump (4.99.1-3ubuntu1) ...
Setting up libpcap0.8:amd64 (1.10.1-5ubuntu1) ...
Setting up libpcap-dev:amd64 (1.10.1-5ubuntu1) ...
Setting up tcpdump (4.99.1-3ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.1) ...

Bây giờ chúng ta đã cài đặt tcpdump, hãy khám phá một số cách sử dụng cơ bản:

sudo tcpdump -i any -n

Ví dụ về đầu ra:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
16:25:32.792941 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 1, length 64
16:25:32.793005 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 1, length 64
16:25:33.792998 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 2, length 64
16:25:33.793058 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 2, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel

Tùy chọn -i any yêu cầu tcpdump thu thập lưu lượng trên tất cả các interface mạng khả dụng.

Còn -n ngăn chặn việc phân giải DNS của địa chỉ IP, điều này có thể làm chậm quá trình thu thập.

Lệnh này sẽ bắt đầu thu thập lưu lượng mạng và hiển thị các gói tin đã thu thập theo thời gian thực.

Bạn có thể nhấn Ctrl+C để dừng quá trình thu thập.

Thu thập Network Traffic với tcpdump

Trong bước này, bạn sẽ học cách sử dụng lệnh tcpdump để thu thập network traffic và phân tích các packet đã thu thập.

Chúng ta hãy bắt đầu bằng việc thu thập tất cả network traffic trên interface mạng mặc định nhé.

sudo tcpdump -i any -c 10

Ví dụ về output:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
16:29:56.832591 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 3, length 64
16:29:56.832648 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 3, length 64
16:29:57.832607 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 4, length 64
16:29:57.832663 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 4, length 64
16:29:58.832617 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 5, length 64
16:29:58.832673 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 5, length 64
16:29:59.832628 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 6, length 64
16:29:59.832684 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 6, length 64
17:00:00.832638 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 7, length 64
17:00:00.832694 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 7, length 64
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Option -c 10 yêu cầu tcpdump thu thập tối đa 10 packet rồi dừng lại.

Bạn cũng có thể thu thập các packet và lưu chúng vào một file để phân tích sau này.

sudo tcpdump -i any -w network_capture.pcap

Lệnh này sẽ bắt đầu thu thập network traffic và lưu nó vào file tên network_capture.pcap. Nhấn Ctrl+C để dừng việc thu thập.

Để xem các packet đã thu thập, bạn có thể dùng một công cụ phân tích giao thức mạng như Wireshark.

Ngoài ra, bạn có thể dùng lệnh tcpdump để phân tích file đã thu thập.

sudo tcpdump -r network_capture.pcap

Lệnh này sẽ hiển thị nội dung của file network_capture.pcap.

Lọc Dữ Liệu Mạng với tcpdump

Trong bước này, bạn sẽ học cách sử dụng tcpdump để lọc dữ liệu mạng dựa trên nhiều tiêu chí khác nhau.

Các tiêu chí bao gồm địa chỉ IP, cổng (port) và các giao thức (protocol) khác nhau trong mạng.

Hãy bắt đầu bằng cách chỉ thu thập (capture) dữ liệu của giao thức HTTP:

sudo tcpdump -i any -c 10 tcp port 80

Ví dụ về kết quả đầu ra:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
17:04:01.832648 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [S], seq 3569349168, win 64240, options [mss 1460,sackOK,TS val 1000 ecr 0,nop,wscale 7], length 0
17:04:01.832702 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [S.], seq 2662318800, ack 3569349169, win 65160, options [mss 1460,sackOK,TS val 1000 ecr 1000,nop,wscale 7], length 0
17:04:01.832736 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [.], ack 1, win 502, length 0
17:04:01.832747 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [P.], seq 1:74, ack 1, win 502, length 73
17:04:01.832766 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [.], ack 74, win 512, length 0
17:04:01.832774 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [P.], seq 1:1449, ack 74, win 512, length 1448
17:04:01.832785 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [.], ack 1449, win 502, length 0
17:04:01.832793 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [F.], seq 74, ack 1449, win 502, length 0
17:04:01.832807 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [F.], seq 1449, ack 75, win 512, length 0
17:04:01.832815 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [.], ack 1450, win 502, length 0
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Bộ lọc tcp port 80 yêu cầu tcpdump chỉ thu thập các gói tin trên cổng TCP 80, là cổng tiêu chuẩn cho HTTP.

Bạn cũng có thể lọc theo địa chỉ IP một cách dễ dàng:

sudo tcpdump -i any -c 10 host 172.17.0.2

Lệnh này sẽ thu thập 10 gói tin đầu tiên đến hoặc đi từ địa chỉ IP 172.17.0.2.

Ngoài ra, bạn có thể kết hợp nhiều bộ lọc với nhau để có kết quả chính xác hơn:

sudo tcpdump -i any -c 10 tcp port 80 and host 172.17.0.2

Lệnh này sẽ thu thập 10 gói tin đầu tiên là lưu lượng HTTP đến hoặc đi từ địa chỉ IP 172.17.0.2.

Kết luận cho linux tcpdump command

```html

Vậy là chúng ta đã cùng nhau khám phá những điều thú vị về tcpdump trên Linux. Hy vọng qua bài viết này, bạn đã có cái nhìn tổng quan và biết cách sử dụng linux tcpdump command để phân tích lưu lượng mạng. Đừng ngại thử nghiệm các tùy chọn khác nhau để hiểu rõ hơn về cách hoạt động của chúng. Việc thực hành thường xuyên sẽ giúp bạn làm chủ công cụ mạnh mẽ này một cách nhanh chóng. Tcpdump thực sự là một trợ thủ đắc lực cho việc gỡ rối mạng và bảo mật hệ thống. Hãy nhớ rằng, việc hiểu rõ lưu lượng mạng là chìa khóa để đảm bảo hệ thống của bạn hoạt động trơn tru và an toàn. Chúc bạn thành công trên con đường khám phá thế giới mạng!

```
Last Updated : 15/10/2025