2010-05-26 33 views
11

Tôi đang cố gắng đánh cắp dữ liệu HTTP qua libpcap và nhận tất cả nội dung http (header + payload) sau khi xử lý tải trọng TCP.Tái tạo dữ liệu từ PCAP sniff

Theo thảo luận của tôi tại Writing an http sniffer (or any other application level sniffer), tôi đang gặp vấn đề do phân mảnh - tôi cần phải tạo lại toàn bộ luồng (hoặc chống phân mảnh) để nhận gói HTTP hoàn chỉnh và đây là nơi tôi cần trợ giúp.

Cảm ơn bạn đã dự đoán !!

Trả lời

9

Nó thực sự khá đơn giản. Chỉ cần lấy các khung ethernet mà bạn nhận được từ pcap và trích xuất các gói tin IP từ chúng, lắp lại bất kỳ gói nào bị phân mảnh. Sau đó, sắp xếp lại các phân đoạn TCP từ các gói IP, theo các số thứ tự, chú ý rằng bạn loại bỏ bất kỳ dữ liệu trùng lặp nào. Sau đó, xử lý luồng dưới dạng luồng HTTP. Tất nhiên, HTTP không có trong các gói; nó là một giao thức tầng ứng dụng, nhưng tôi chắc chắn điều này sẽ hiển nhiên khi bạn đã thực hiện tất cả công việc khác này. Hãy chú ý khi bạn làm tất cả những điều này để kiểm tra các tiêu đề IP và phân đoạn TCP, để đảm bảo rằng dữ liệu của bạn là chính xác. Ngoài ra, nếu pcap xảy ra để bỏ lỡ bất kỳ gói dữ liệu nào, hãy đảm bảo bạn xử lý điều này một cách thích hợp.

Để giúp bạn dọc theo Linux TCP stack nên cung cấp tham chiếu ngắn gọn về quy trình này khi nó xảy ra trong hạt nhân.

+1

Cảm ơn bạn! Tôi có điểm :) – Ishi

5

Thay vì tự lắp ráp lại luồng, bạn có thể sử dụng tcptrace để lắp ráp lại tệp pcap. Tôi tin rằng -e sẽ làm điều đó.

Một khi bạn có dữ liệu ứng dụng lớp trong một mảnh, bạn có thể áp dụng HTTP header đơn giản phân tích .... Perhps từ một thư viện như http://github.com/ry/http-parser

+0

Cảm ơn Joe ... Tôi sẽ thử những công cụ này nếu tôi không thể tự mình làm được. Cảm ơn một lần nữa! – Ishi

2

Để tái tạo lại dữ liệu chứa trong một tập tin pcap một công cụ tuyệt vời là Xplico: http://www.xplico.org

2

Công cụ tốt nhất để tái cấu trúc nội dung http từ tệp pcap là justniffer. Nó sử dụng prtion của hạt nhân Linux để phân mảnh lại gói tin tcp IP e.

Các vấn đề liên quan