Giám sát lưu lượng HTTP bằng tcpdump


42

Để giám sát lưu lượng HTTP giữa máy chủ và máy chủ web, tôi hiện đang sử dụng tcpdump. Điều này hoạt động tốt, nhưng tôi muốn loại bỏ một số dữ liệu thừa trong đầu ra (tôi biết tcpflowwireshark, nhưng chúng không có sẵn trong môi trường của tôi).

Từ tcpdumptrang người đàn ông:

Để in tất cả các gói HTTP IPv4 đến và từ cổng 80, tức là chỉ in các gói có chứa dữ liệu, ví dụ, các gói SYN và FIN và các gói chỉ ACK.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Lệnh này

sudo tcpdump -A 'src example.com và cổng tcp 80 và (((ip [2: 2] - ((ip [0] & 0xf) << 2)) - ((tcp [12] & 0xf0) >> 2) )! = 0) '

cung cấp đầu ra sau:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Cờ [P.], seq 918827135: 918827862, ack 351213824, thắng 4316, tùy chọn [nop, nop, TS val 4093273405

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 Máy chủ 200 OK: Apache / 2.2.3 (Mũ đỏ) Loại nội dung: text / html; bộ ký tự = UTF-8 Ngày: Thứ bảy, 14 tháng 11 năm 2009 18:35:22 GMT Tuổi: 7149
Nội dung Độ dài: 438

<HTML> <Head> <TITLE> Trang web mẫu </ TITLE> </ HEAD> <body>
<p> Bạn đã truy cập trang web này ... </ p> </ BODY> </ HTML>

Điều này là gần như hoàn hảo, ngoại trừ phần nổi bật. Đây là gì, kết thúc - quan trọng hơn - làm thế nào để tôi thoát khỏi nó? Có lẽ đó chỉ là một chút tinh chỉnh cho biểu thức ở cuối lệnh?

Câu trả lời:


39

tcpdump in các gói hoàn chỉnh. "Rác" mà bạn thấy thực sự là các tiêu đề gói TCP.

bạn chắc chắn có thể xoa bóp đầu ra với một tập lệnh perl, nhưng tại sao không sử dụng tshark, phiên bản văn bản của wireshark thay thế?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

nó có cùng các đối số như tcpdump (cùng một thư viện) nhưng vì nó là một bộ phân tích nên nó có thể kiểm tra gói sâu để bạn có thể tinh chỉnh các bộ lọc của mình hơn nữa, tức là

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'


1
Cảm ơn - sau khi thử tất cả các đề xuất, tshark có vẻ như là công cụ tốt nhất cho công việc. Tôi hiện đang sử dụng "tshark -d tcp.port == 8070, http -R 'http.request hoặc http.response'". Bây giờ nếu tôi chỉ có thể khiến tshark "theo dòng tcp" giống như wireshark có thể (Điều này được hỏi rất nhiều, nhưng tôi vẫn chưa tìm thấy câu trả lời). "-V" hiển thị thông tin về các gói TCP và IP, v.v., điều mà tôi không quan tâm. Nhưng tôi đoán tôi có thể loại bỏ điều đó bằng cách sử dụng tập lệnh.
otto.poellath

4
Bạn cũng có thể tìm kiếm "NHẬN" trong bộ lọc chụp bằng cách khớp các giá trị ASCII cho từng ký tự : tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Tôi đã thêm một trang vào trang web của Wireshark một lúc trước để giúp bạn tạo các bộ lọc bắt khớp chuỗi: wireshark.org/tools/opes-cf.html
Gerald Combs

18

hãy xem ngrep - nó có ích cho bạn.

làm tài liệu tham khảo cho những người khác httpry [máy chủ dường như ngừng hoạt động nhưng tôi hy vọng nó tạm thời] và tshark cũng hữu ích cho phân tích giao thức thụ động - thứ nhất chỉ dành cho http, thứ hai - nhiều hơn nữa.


2
+1 cho ngrep. Công cụ rất hữu ích.
tylerl

ngrep và httpry trông chắc chắn hữu ích, nhưng ngrep không biết về HTTP và AFAIK, httpry chỉ hoạt động với các tiêu đề HTTP và không thể hiển thị dữ liệu tải trọng.
otto.poellath

@sapporo - chắc chắn - ngrep là giao thức bất khả tri, nhưng bạn có thể thêm bộ lọc pcap "cổng 80" và nhận .. trong [hầu hết các trường hợp] chỉ lưu lượng truy cập http.
pQd

Imo, ngrep tốt hơn 100000x so với tcpdump
Daniel W.

5

Hãy thử httpry hoặc justniffer

Justniffer hoạt động tốt trên các gói tcp sắp xếp lại retrasmissions và phân mảnh ip


1
Cảm ơn! justniffer là những gì tôi đang tìm kiếm (tôi nghĩ đó là công cụ duy nhất được đề cập rất đơn giản đo lường thời gian yêu cầu).
gkop

1

Tôi sẽ đề nghị sử dụng một dòng lệnh tcpdump chết lặng lưu trữ mọi thứ trong một tệp pcap cho quá trình đăng bài. Tùy thuộc vào chính xác những gì bạn đang xem xét chẩn đoán tcpflow hoạt động tuyệt vời để kết nối thông tin lại với nhau theo cách mạch lạc để phân tích.

Một số thông tin tốt khác bao gồm một số cách sử dụng cho httpry có thể được tìm thấy tại: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html


0

Máy chủ web bạn đang sử dụng không tạo ra nhật ký? Chắc chắn đó là cách tốt hơn để giám sát lưu lượng HTTP, có rất nhiều công cụ để phân tích dữ liệu và bất kỳ máy chủ web có thẩm quyền nào cũng sẽ tạo ra các nhật ký đáng tin cậy.


4
Thông suốt. Tôi tưởng tượng rằng anh ấy đã nghĩ về điều đó, mặc dù. Đôi khi thật hữu ích khi theo dõi dữ liệu thực tế được gửi giữa điểm A và điểm B.
tylerl

0

Có một số công cụ có sẵn trên thị trường được thiết kế đặc biệt để theo dõi Lưu lượng HTTP. Fiddler2 ( http://www.fiddler2.org ) và HTTP Debugger Pro là những ví dụ về các công cụ như vậy.


4
Cảm ơn lời đề nghị của bạn. Thật không may, cả hai công cụ dường như chỉ hoạt động trên Windows. Tôi đã không đề cập đến nó, nhưng tôi đang loay hoay với một cái gì đó hoạt động trên Linux.
otto.poellath
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.