Làm cách nào để tôi chỉ trả lại tiêu đề http từ tshark?


12

Tôi đang sử dụng tshark để đánh hơi các gói của mình và tôi chỉ quan tâm đến tiêu đề http (tốt nhất là ở dạng được gửi, nhưng tôi sẽ lấy những gì tôi có thể nhận được).

Tôi đã thử sử dụng:

tshark tcp port 80 or tcp port 443 -V -R "http"

Điều này đã cho tôi tiêu đề, nhưng cũng có nội dung (mà tôi không muốn vì nó là một lượng lớn rác để phân tích). Tôi thực sự chỉ quan tâm đến tiêu đề, có cách nào dễ dàng để có được điều đó không (ngoài việc tự phân tích dữ liệu).

Chỉnh sửa: Tôi nên đủ điều kiện Tôi cũng quan tâm đến máy chủ / cổng để tôi có thể theo dõi các yêu cầu trên nhiều gói.

Câu trả lời:


18

Bạn có thể sử dụng các bộ lọc hiển thị tiêu đề HTTP cụ thể để hiển thị chỉ các tiêu đề yêu cầu, chỉ các tiêu đề phản hồi hoặc cả hai.

Đối với chỉ các tiêu đề yêu cầu:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

Đối với chỉ các tiêu đề phản hồi:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

Và cho cả tiêu đề yêu cầu và phản hồi:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

Lưu ý: Điều này không chỉ lọc các tiêu đề, chỉ các gói chứa các tiêu đề, do đó bạn có thể vẫn nhận được một số dữ liệu, nhưng lượng dữ liệu sẽ ít hơn bạn có thể.


Chúng tôi vẫn đang nói về một tấn dữ liệu như thể tôi có một yêu cầu cho en.wikipedia.org Tôi sẽ nhận lại 750k khi tôi thực sự chỉ muốn có ít hơn 1k trong các tiêu đề.
trzenes

tshark là một công cụ chụp gói , bạn có thể muốn xem xét một cái gì đó như Fiddler hoặc một công cụ phân tích chỉ HTTP khác.
heavyyd

Tôi không quen thuộc với fiddler nhưng mục tiêu của tôi là theo dõi thông lượng kết nối vì vậy tôi muốn biết requesttime / firstbyte / lastbyte trong khi giữ lại các tiêu đề HTTP. Tshark đã giải quyết hầu hết vấn đề của tôi, tôi chỉ cần lấy tiêu đề.
trzenes

3
Nó tạo ra "tshark: Bộ lọc chụp không hợp lệ" (Tshark 2.0.2). Như một cách giải quyết, tôi đã sử dụng:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs

5

Trong thực tế, bạn có thể! Tất cả các câu trả lời trước đó rất gần. Tất cả những gì bạn cần là -Ogắn cờ để lọc tất cả thông tin trừ HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443

1
Đây là câu trả lời chính xác.
Florin Andrei

3

Tôi đã có thể kết hợp câu trả lời từ @ematvyd và chạy nó qua bộ lọc sed tôi nhận được từ một bài viết SO - (câu trả lời của FJ) để nấu món ăn này, chỉ lọc các tiêu đề :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered

1
sed đáng sợ vì tôi không thể đọc nó nhưng làm việc như một bùa mê.
Setheron

2

Phiên bản bộ lọc của riêng tôi để dễ đọc:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

Bằng cách này, tôi chỉ thấy thông tin IP và TCP có liên quan, không có tất cả nội dung cấp thấp, cộng với thông tin HTTP hoàn chỉnh.


sudo tshark -V -s0 cổng 80 -Y "(http.request || http.response)" | awk "/ Giao thức truyền siêu văn bản /, / ^ $ /"
Lmwangi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.