Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách sử dụng tcpdump để bắt gói tin (Packet Capture)

Bắt gói tin là cách rất hữu ích phân tích hoạt động bên trong của mạng. Có nhiều công cụ khác nhau phát triển cho mục đích này. Trong số đó có tcpdump. Bài viết này chỉ cách tận dụng tốt nhất công cụ tuyệt vời này cho kỹ sư mạng và penetration tester.

tcpdump là gì?

tcpdump là công cụ phân tích gói tin mạng được phát triển và phát hành năm 1988 bởi nhóm khoa học máy tính làm việc tại Phòng thí nghiệm Berkeley Lawrence và Nhóm Nghiên cứu Mạng của họ. Nó dùng để hiển thị nội dung gói tin mà máy tính gửi và nhận. Tiện ích đi kèm nhiều tùy chọn để bắt gói tin cụ thể và tập trung hơn. Một số tùy chọn bao gồm các giao thức mạng và giao diện mạng khác nhau.

Cài đặt

Nhiều bản phân phối Linux đã cài sẵn tiện ích. Tuy nhiên, nếu bản phân phối bạn chọn không có, cài đặt may mắn thay nhanh và đơn giản.

Nếu dùng Ubuntu hoặc Debian, cài bằng apt:

sudo apt install tcpdump

Trên CentOS, làm tương tự bằng yum:

sudo yum install tcpdump

Trên Arch Linux bằng pacman:

sudo pacman -S tcpdump

Cơ bản

Đã cài tcpdump, xem hướng dẫn bằng cờ -h:

tcpdump -h

Hiển thị danh sách cờ bạn có thể dùng với công cụ.

Nếu muốn xem hướng dẫn chi tiết và toàn diện hơn, xem trang man (manual page) bằng lệnh man:

man tcpdump

Chạy bắt gói tin cơ bản bằng lệnh:

tcpdump

Dùng lệnh riêng không chỉ định giao diện mạng, công cụ sẽ chọn một trong các giao diện có sẵn trên hệ thống.

Nếu không muốn tcpdump giải quyết tên máy chủ (resolve hostnames) mà chỉ muốn xuất địa chỉ IP, dùng cờ -n:

tcpdump -n

Nếu muốn chỉ định số gói tin muốn bắt, dùng cờ -c:

tcpdump -c [số gói tin]

Chỉ định giao diện mạng

Chỉ định giao diện mạng lựa chọn bằng cờ -i:

tcpdump -i [giao_diện]

Hai tên giao diện mạng phổ biến nhất trên hầu hết hệ thống là eth0 và wlan0:

tcpdump -i eth0
tcpdump -i wlan0

Nếu muốn bắt dữ liệu trên tất cả giao diện, dùng tùy chọn any:

tcpdump -i any

Chỉ định cổng/phạm vi cổng

Nếu chỉ muốn bắt dữ liệu dùng số cổng cụ thể, dùng lệnh:

tcpdump -i [giao_diện] port [số cổng]

Ví dụ bắt lưu lượng trên giao diện eth0 và cổng 443 (HTTPS):

tcpdump -i eth0 port 443

Bên cạnh đó, tcpdump cho phép chỉ định phạm vi cổng:

tcpdump -i [giao_diện] portrange [phạm vi cổng]

Chỉ định host hoặc subnet

Sẽ có lúc bạn muốn giới hạn gói tin bắt chỉ những gói gửi/nhận từ host hoặc subnet cụ thể. May mắn thay, tcpdump cho phép làm vậy.

Chỉ định host bằng định dạng:

tcpdump -i [giao_diện] host [host]

Ví dụ, bắt lưu lượng trên eth0 và chỉ định host là 127.0.0.1 (địa chỉ loopback của bạn):

tcpdump -i eth0 host 127.0.0.1

Nếu muốn chỉ định subnet mạng dùng ký pháp CIDR, dùng định dạng:

tcpdump -i [giao_diện] net [subnet]

Ví dụ:

tcpdump -i eth0 net 10.0.0.0/8

Bạn cũng chỉ định trực tiếp host nguồn:

tcpdump -i [giao_diện] src [host]

Và host đích:

tcpdump -i [giao_diện] dst [host]

Chỉ định mức độ chi tiết (Verbosity)

tcpdump cho phép chỉ định mức độ chi tiết của bắt gói tin. Rất hữu ích khi không muốn bị choáng ngợp bởi lượng thông tin trong quá trình bắt.

Có ba tùy chọn tăng dần cho verbosity: cờ -v, -vv và -vvv:

tcpdump -i [giao_diện] -v
tcpdump -i [giao_diện] -vv
tcpdump -i [giao_diện] -vvv

Tùy chọn đầu chỉ định verbosity thấp nhất, tùy chọn ba chỉ định cao nhất.

Lưu kết quả bắt vào file

Thường hữu ích lưu dữ liệu bắt được vào file, để phân tích và giải thích thêm.

Làm bằng cờ -w:

tcpdump -i [giao_diện] -w [tên_file]

Ví dụ, lưu dữ liệu bắt vào file "capture.txt":

tcpdump -i eth0 -w capture.txt

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

1. Nhận lỗi "Operation not permitted". Làm sao giải quyết?

Lỗi phổ biến người dùng gặp khi dùng tcpdump:

tcpdump báo lỗi này khi bạn không có quyền cần thiết để bắt gói tin. Trong hầu hết trường hợp, giải quyết bằng sudo. Ví dụ:

sudo tcpdump -i eth0

2. Làm sao biết giao diện mạng nào có sẵn?

tcpdump có chức năng tích hợp cho phép kiểm tra giao diện mạng có sẵn trên hệ thống.

Để kiểm tra giao diện, dùng cờ -D:

tcpdump -D