Lọc gói tin trong Wireshark với BPF

1. Bộ lọc gói Berkeley (Berkeley Packet Filter – BPF)

BPF sử dụng ba loại bộ định lượng (qualifier) chính:

Tên Chức năng Các dạng thường gặp
type Xác định đối tượng được tham chiếu, ví dụ địa chỉ IP, mạng con hoặc cổng.

host: biểu diễn tên máy chủ và địa chỉ IP

net: biểu diễn mạng con

port: biểu diễn cổng

dir Biểu diễn hướng truyền của gói tin.

src: địa chỉ nguồn

dst: địa chỉ đích

proto Biểu diễn loại giao thức khớp với gói tin.

arp

http

dns

Định dạng header IP

Header IP chứa nhiều trường quan trọng. Trong đó, địa chỉ nguồn nằm ở các byte 12–15 và địa chỉ đích nằm ở các byte 16–19. Việc nắm rõ vị trí các trường giúp viết bộ lọc BPF chính xác hơn.

Nếu cần thao tác chi tiết đến từng byte hoặc từng bit, BPF cũng hỗ trợ cú pháp proto[expr:size]. Trong đó, proto là giao thức, expr là độ lệch byte tương đối so với lớp giao thức đã cho, còn size là số byte cần thao tác. size là tùy chọn, có thể nhận giá trị 1, 2 hoặc 4; giá trị mặc định là 1.

Ví dụ, với dst host 192.168.1.1, địa chỉ đích nằm ở các byte 16–19 của header IP. Địa chỉ 192.168.1.1 chuyển sang hệ thập lục phân là 0xc0a80101, nên có thể viết:

ip[16:4] = 0xc0a80101

Nếu muốn lọc theo địa chỉ nguồn, ví dụ src host 192.168.1.1, địa chỉ nguồn nằm ở các byte 12–15, ta viết:

ip[12:4] = 0xc0a80101

2. Toán tử

and: và  or: hoặc  not: phủ định

3. Bộ lọc hiển thị

Bộ lọc hiển thị của Wireshark khác bộ lọc bắt gói ở hai điểm rõ rệt. Thứ nhất, bộ lọc hiển thị có thể được dùng sau khi Wireshark đã bắt dữ liệu. Thứ hai, cú pháp của bộ lọc hiển thị không giống cú pháp của bộ lọc bắt gói.

Trong Wireshark, khi dùng tên giao thức mạng trong bộ lọc hiển thị, các tên này phải viết thường, ví dụ arp, ip, icmp, tcp, udp, dns, http. Chẳng hạn, để chỉ hiển thị giao thức TCP, chỉ cần nhập tcp vào ô bộ lọc hiển thị.

Toán tử quan hệ

Wireshark hỗ trợ hai nhóm toán tử chính: toán tử so sánh và toán tử logic. Hầu hết các toán tử này đều có hai cách viết:

Toán tử so sánh: eq tương đương ==, ne tương đương !=, gt tương đương >, lt tương đương <, ge tương đương >=, le tương đương <=.

Toán tử logic: and tương đương &&, or tương đương ||, not tương đương !. Ngoài ra còn có hai toán tử đặc biệt là contains và matches. contains dùng để kiểm tra xem một giá trị có xuất hiện hay không; matches dùng để kiểm tra xem nội dung có khớp với một biểu thức hay không.

4. Bộ lọc bắt gói

Nếu bộ lọc được viết không hợp lệ, hộp văn bản sẽ chuyển sang màu hồng. Nếu hợp lệ, hộp văn bản sẽ có màu xanh.

Một số bộ lọc thường gặp:

  • Bắt lưu lượng của một máy chủ chỉ định: host 192.168.11.1
  • Bắt lưu lượng của một dải mạng: net 192.168.11.0/24 hoặc net 192.168.0.0 mask 255.255.255.0
  • Bắt theo địa chỉ nguồn: src net 192.168.11.0/24 hoặc src net 192.168.0.0 mask 255.255.255.0
  • Bắt theo địa chỉ đích: dst net 192.168.11.0/24 hoặc dst net 192.168.0.0 mask 255.255.255.0
  • Bắt theo cổng: port 53 hoặc port dns
  • Bắt lưu lượng theo dải cổng:
Cổng nguồn:  (tcp[0:2] > 1500 and tcp[0:2] < 1550)
Cổng đích: (tcp[2:2] > 1500 and tcp[2:2] < 1550)
tcp portrange 1501-1549

Thẻ: wireshark BPF display-filter capture-filter packet-analysis

Đăng vào ngày 9 tháng 10 lúc 17:00