Wireshark: là gì, phân tích lưu lượng và chặn bắt gói tin

Tác giả: IT Sectr Đã đăng: 2026-05-08 Thời gian đọc: 9 phút

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à trình bắt gói tin miễn phí có giao diện đồ họa để phân tích lưu lượng mạng.
  • Việc bắt lưu lượng được thực hiện qua giao diện mạng ở chế độ promiscuous tại tầng liên kết dữ liệu.
  • Việc lọc gói tin theo IP, cổng, giao thức và nội dung được triển khai qua ngôn ngữ BPF và display filters.
  • Phân tích HTTPS yêu cầu cấu hình SSLKEYLOGFILE hoặc proxy trung gian để giải mã phiên.
  • Gỡ lỗi di động có thể thực hiện qua kết hợp tcpdump trên thiết bị và Remote Packet Capture.

Wireshark là gì và hoạt động như thế nào

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.

Nguyên lý bắt gói tin

Ở 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.

Kiến trúc xử lý

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.

c
// 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;
}

Các tính năng chính của Wireshark

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ác định dạng và giao thức được hỗ trợ

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 công cụ phân tích

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.

Cách bắt lưu lượng bằng Wireshark

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.

Bắt trên thiết bị từ xa

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:

bash
# 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 .

Bắt lưu lượng Loopback

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.

Lọc gói tin trong Wireshark

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.

Capture Filters (BPF)

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ọcMục đích
tcp port 80Chỉ lưu lượng HTTP trên cổng chuẩn
host 192.168.1.1Gói tin từ một máy chủ cụ thể
not arpTất cả gói tin trừ yêu cầu ARP

Display Filters

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.

Phân tích lưu lượng HTTP và HTTPS

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.

Giải mã HTTPS qua SSLKEYLOGFILE

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.

bash
# 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

Phân tích gRPC và Protobuf

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 ứng dụng di động bằng Wireshark

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.

Cài đặt trên Android không cầ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 đủ.

bash
# 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

So sánh Wireshark với các giải pháp thay thế

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 so với Wireshark

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 Everywhere

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ạiHTTPS không cần khóaSửa đổi lưu lượng
WiresharkSnifferKhông (cần SSLKEYLOGFILE)Chỉ xem
CharlesProxyCó (chứng chỉ tùy chỉnh)
FiddlerProxyCó (chứng chỉ tùy chỉnh)
tcpdumpSnifferKhôngChỉ xem

Mẹo thực tế khi làm việc với Wireshark

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 chậm

Để 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.

Xuất và báo cáo

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.

Mẹo thực tế khi làm việc với Wireshark

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 chậm

Để 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.

Xuất và báo cáo

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 khác tcpdump như thế nào?

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.

Làm sao để chặn lưu lượng HTTPS trong Wireshark?

Để 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.

Tại sao Wireshark không thấy lưu lượng localhost trên Windows?

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ó thể dùng Wireshark cho ứng dụng di động không?

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.

Làm sao để lọc gói tin theo nội dung trong Wireshark?

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

  • Wireshark là công cụ chính để phân tích lưu lượng mạng trong phát triển, hỗ trợ hơn 2800 giao thức.
  • Việc bắt gói tin được thực hiện ở chế độ promiscuous qua thư viện libpcap hoặc Npcap ở cấp truy cập kênh.
  • Việc lọc chia thành capture filters (BPF, ở cấp kernel) và display filters (ngôn ngữ Wireshark, có tự động hoàn thành).
  • Giải mã HTTPS khả dụng qua SSLKEYLOGFILE cho trình duyệt Chrome và Firefox.
  • Gỡ lỗi di động được thực hiện qua PCAPdroid (Android) hoặc Remote Virtual Interface (iOS) mà không cần root.
  • gRPC và Protobuf được hỗ trợ qua việc tải tệp .proto để giải tuần tự hóa dữ liệu nhị phân.
  • Flow Graph và IO Graph giúp trực quan hóa độ trễ và tìm điểm nghẽn trong tương tác client-server.

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.

Thảo luận dự án

Đọc thêm