Wireshark là công cụ phân tích lưu lượng mạng mã nguồn mở hàng đầu, được dùng để bắt và kiểm tra gói tin theo thời gian thực. Công cụ hỗ trợ hơn hai nghìn giao thức mạng và hoạt động trên mọi nền tảng chính. Theo Wireshark User Guide (2026), tiện ích được dùng để chẩn đoán mạng, gỡ lỗi API và phân tích bảo mật trong phát triển di động và web.
Điểm chính
Wireshark là chương trình mã nguồn mở (GPLv2) bắt các gói dữ liệu đi qua giao diện mạng của máy tính. Chương trình dựa trên thư viện libpcap (Unix) hoặc Npcap (Windows) để bắt tại tầng liên kết dữ liệu của mô hình OSI.
Ở chế độ bình thường, card mạng chỉ nhận các khung gửi đến địa chỉ MAC của nó. Wireshark chuyển giao diện sang chế độ promiscuous (không phân biệt), trong đó hệ thống xử lý mọi khung đi qua bất kể người nhận. Dữ liệu bắt được được chuyển vào kernel qua raw socket, sau đó thư viện libpcap sao chép chúng vào không gian người dùng để phân tích.
Wireshark sử dụng kiến trúc mô-đun: mỗi giao thức được triển khai như một dissector riêng — plugin phân tích dữ liệu nhị phân và hiển thị chúng dưới dạng có cấu trúc. Tính đến năm 2026, chương trình đã triển khai dissector cho 2 874 giao thức, bao gồm HTTP/2, QUIC, gRPC và MQTT. Các dissector hoạt động qua hệ thống cây giao thức — mỗi gói tin được phân tích từng lớp: từ khung Ethernet đến tầng ứng dụng.
// Ví dụ về dissector đơn giản cho giao thức tùy chỉnh
static int dissect_custom(tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree, void *data) {
proto_item *ti = proto_tree_add_item(tree, hf_custom_field,
tvb, 0, tvb_captured_length(tvb), ENC_NA);
return 0;
}
Giao diện đồ họa của Wireshark được chia thành ba bảng: danh sách gói tin (packet list), chi tiết giao thức (packet details) và dump thập lục phân (packet bytes). Mỗi bảng được cập nhật theo thời gian thực và hỗ trợ điều hướng tương tác — nhấp vào dòng gói tin sẽ mở cấu trúc đầy đủ của nó.
Công cụ đọc các tệp bắt ở định dạng pcap, pcapng, snoop và NetMon. Có thể xuất sang JSON, XML, CSV và văn bản thường. Trong số các giao thức chính của tầng ứng dụng có HTTP/HTTPS, DNS, DHCP, TCP, UDP, TLS, QUIC, WebSocket, MQTT, AMQP và Protobuf. Đối với phát triển di động, việc hỗ trợ gRPC và HTTP/2 với ghép kênh luồng đặc biệt quan trọng.
Các tiện ích tích hợp bao gồm Follow Stream (khôi phục toàn bộ hội thoại TCP/UDP/TLS), IO Graph (biểu đồ băng thông), thống kê hội thoại (Conversations) và hệ thống phân cấp giao thức (Protocol Hierarchy). Tính năng Flow Graph trực quan hóa chuỗi gói tin giữa các nút, giúp dễ tìm nguyên nhân độ trễ khi gỡ lỗi tương tác client-server.
Việc bắt đầu bắt bắt đầu bằng việc chọn giao diện mạng — Ethernet, Wi-Fi, Bluetooth PAN hoặc Loopback. Trên Windows có thể cần cài Npcap ở chế độ WinPcap API Compatible Mode. Để bắt trên thiết bị di động, sử dụng Remote Packet Capture qua đường hầm SSH.
Trên thiết bị Android, lưu lượng được bắt qua tcpdump hoặc PCAPdroid rồi chuyển tệp về máy tính làm việc. Lệnh bắt từ xa qua ADB:
# Bắt lưu lượng trên Android qua ADB shell
adb shell tcpdump -i wlan0 -s 0 -w /sdcard/capture.pcap
# Sao chép sang máy tính
adb pull /sdcard/capture.pcap .
Trên Windows, lưu lượng localhost (127.0.0.1) không đi qua giao diện vật lý, vì vậy Wireshark không nhìn thấy trực tiếp. Giải pháp là cài Npcap với tùy chọn Loopback Support hoặc chuyển hướng lưu lượng qua RawCap. Trên Linux và macOS, giao diện loopback (lo) được bắt mà không cần cấu hình thêm.
Wireshark cung cấp hai loại bộ lọc: capture filters (áp dụng trước khi bắt, ở cấp libpcap) và display filters (áp dụng cho dữ liệu đã bắt). Capture filters sử dụng cú pháp BPF (Berkeley Packet Filter), display filters — ngôn ngữ riêng của Wireshark có tự động hoàn thành.
Bộ lọc BPF được viết ở định dạng tcpdump và chạy trong kernel, giúp giảm thiểu mất gói tin khi tải cao. Ví dụ về bộ lọc:
| Bộ lọc | Mục đích |
|---|---|
| tcp port 80 | Chỉ lưu lượng HTTP trên cổng chuẩn |
| host 192.168.1.1 | Gói tin từ một máy chủ cụ thể |
| not arp | Tất cả gói tin trừ yêu cầu ARP |
Display filters được áp dụng sau đó và hỗ trợ các điều kiện phức tạp với toán tử logic and, or, not. Ví dụ: http.request.method == "POST" and ip.src == 192.168.0.100 sẽ lọc chỉ các yêu cầu POST từ một IP cụ thể. Có thể lưu bộ lọc dưới dạng mục yêu thích để tái sử dụng.
Lưu lượng HTTP được hiển thị trong Wireshark ở dạng dễ đọc: phương thức yêu cầu, URI, tiêu đề và nội dung phản hồi. Chức năng Follow TCP Stream tập hợp toàn bộ hội thoại giữa client và server trong một cửa sổ. Đối với HTTPS cần giải mã phiên TLS, vì nội dung được mã hóa.
Trình duyệt Chrome và Firefox hỗ trợ biến môi trường SSLKEYLOGFILE, biến này ghi khóa phiên TLS vào tệp văn bản. Wireshark sử dụng tệp này để giải mã bản ghi. Cấu hình thực hiện qua Preferences → Protocols → TLS → (Pre)-Master-Secret log filename.
# Khởi chạy Chrome với ghi log khóa TLS
export SSLKEYLOGFILE=/tmp/sslkeys.log
google-chrome .
# Sau khi bắt, chỉ định đường dẫn trong Wireshark
# Edit → Preferences → Protocols → TLS → Log Filename
gRPC sử dụng HTTP/2 làm phương thức truyền tải và Protobuf để tuần tự hóa dữ liệu. Wireshark giải mã thông điệp gRPC nếu cung cấp tệp .proto kèm định nghĩa cấu trúc. Dissector Protobuf ánh xạ các trường nhị phân với tên từ tệp proto, điều quan trọng khi gỡ lỗi kiến trúc microservice.
Gỡ lỗi di động qua Wireshark yêu cầu chuyển lưu lượng của thiết bị qua máy tính. Phương pháp đáng tin cậy nhất là tạo điểm phát Wi-Fi trên máy tính xách tay và chuyển hướng lưu lượng qua NAT. Trên Android cũng có phương pháp VPN với ứng dụng PCAPdroid mà không cần quyền root.
PCAPdroid tạo dịch vụ VPN cục bộ chuyển hướng lưu lượng của ứng dụng đến Wireshark qua luồng UDP. Ứng dụng không yêu cầu quyền root và hỗ trợ lọc theo từng tiến trình. Các tệp pcap thu được được mở trong Wireshark để phân tích đầy đủ.
# Nhận lưu lượng từ PCAPdroid trên máy tính
# PCAPdroid → Settings → PCAP dumper → UDP Exporter
nc -l -u 192.168.0.10 12345 > capture.pcap
Wireshark là công cụ phổ quát, nhưng với các tác vụ cụ thể tồn tại những giải pháp chuyên biệt hơn. tcpdump hiệu quả hơn cho việc bắt trên máy chủ không cần đồ họa, Charles Proxy tiện hơn để phân tích lưu lượng HTTPS, còn Fiddler — dùng để kiểm tra lưu lượng web với khả năng sửa đổi yêu cầu ngay lập tức.
Charles Proxy hoạt động như máy chủ proxy trung gian có khả năng chặn HTTPS qua chứng chỉ SSL riêng. Khác với Wireshark, Charles không cần cấu hình SSLKEYLOGFILE và có thể không chỉ xem mà còn sửa đổi lưu lượng — thay thế phản hồi, mô phỏng độ trễ và lặp lại yêu cầu.
Fiddler là công cụ proxy khác phổ biến trong hệ sinh thái .NET. Nó cung cấp trình soạn thảo yêu cầu tích hợp, hỗ trợ AutoResponder cho các mock và trình soạn thảo để tạo yêu cầu tùy chỉnh. Fiddler phù hợp hơn để phân tích lưu lượng web của trình duyệt, còn Wireshark — để phân tích mạng cấp thấp.
| Công cụ | Loại | HTTPS không cần khóa | Sửa đổi lưu lượng |
|---|---|---|---|
| Wireshark | Sniffer | Không (cần SSLKEYLOGFILE) | Chỉ xem |
| Charles | Proxy | Có (chứng chỉ tùy chỉnh) | Có |
| Fiddler | Proxy | Có (chứng chỉ tùy chỉnh) | Có |
| tcpdump | Sniffer | Không | Chỉ xem |
Wireshark đòi hỏi hiểu biết về các nguyên tắc cơ bản của việc bắt lưu lượng. Một kịch bản thường gặp là tìm nguồn độ trễ trong ứng dụng di động qua bộ lọc tcp.analysis.ack_rtt. Để tìm yêu cầu HTTP chậm, hãy dùng điều kiện http.time lớn hơn 1.
Để tìm yêu cầu HTTP chậm, hãy lọc http.time lớn hơn 1 — Wireshark sẽ hiển thị các yêu cầu có thời gian phản hồi hơn 1 giây. Kết hợp với ip.addr để phân tích máy chủ cụ thể. IO Graph với khoảng 1 giây sẽ hiển thị rõ các đỉnh tải.
Wireshark hỗ trợ xuất sang CSV, JSON và XML qua menu File. Để phân tích tự động, hãy dùng tshark — phiên bản console hoạt động trong các pipeline CI/CD. Tshark hỗ trợ cùng các bộ lọc và định dạng đầu ra như phiên bản đồ họa.
Wireshark đòi hỏi hiểu biết về các nguyên tắc cơ bản của việc bắt lưu lượng. Một kịch bản thường gặp là tìm nguồn độ trễ trong ứng dụng di động qua bộ lọc tcp.analysis.ack_rtt. Để tìm yêu cầu HTTP chậm, hãy dùng điều kiện http.time lớn hơn 1.
Để tìm yêu cầu HTTP chậm, hãy lọc http.time lớn hơn 1 — Wireshark sẽ hiển thị các yêu cầu có thời gian phản hồi hơn 1 giây. Kết hợp với ip.addr để phân tích máy chủ cụ thể. IO Graph với khoảng 1 giây sẽ hiển thị rõ các đỉnh tải.
Wireshark hỗ trợ xuất sang CSV, JSON và XML qua menu File. Để phân tích tự động, hãy dùng tshark — phiên bản console hoạt động trong các pipeline CI/CD. Tshark hỗ trợ cùng các bộ lọc và định dạng đầu ra như phiên bản đồ họa.
Các câu hỏi thường gặp
Wireshark cung cấp giao diện đồ họa với trực quan hóa gói tin, bộ lọc tích hợp và thống kê. tcpdump là tiện ích console không có GUI, tiện cho việc bắt trên máy chủ qua SSH. Wireshark đọc được tệp của tcpdump và ngược lại.
Để giải mã cần tệp khóa phiên TLS (SSLKEYLOGFILE). Chrome và Firefox xuất khóa khi khởi động với biến môi trường. Đường dẫn tệp được chỉ định trong cài đặt Protocols → TLS trong Wireshark.
Lưu lượng loopback trên Windows không đi qua driver Npcap theo mặc định. Giải pháp là cài Npcap với tùy chọn Loopback Support hoặc dùng tiện ích RawCap để bắt lưu lượng cục bộ.
Có, qua việc chuyển lưu lượng qua máy tính. Android hỗ trợ bắt qua PCAPdroid (không cần root) hoặc tcpdump (cần root). iOS yêu cầu RVI (Remote Virtual Interface) qua macOS hoặc jailbreak để bắt.
Display filter frame contains tìm chuỗi hoặc dãy hex trong toàn bộ gói tin. Ví dụ: frame contains "password" sẽ tìm các gói có chứa chuỗi password ở bất kỳ trường nào. Để tìm chính xác theo trường, dùng http.request.uri contains "api".
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm