Giám sát các yêu cầu HTTP đang hoạt động trên giao diện mạng?


79

Đối với mục đích gỡ lỗi, tôi muốn theo dõi các yêu cầu http trên giao diện mạng.

Sử dụng một tcpdumpdòng lệnh ngây thơ tôi nhận được quá nhiều thông tin cấp thấp và thông tin tôi cần không được trình bày rõ ràng.

Việc chuyển lưu lượng truy cập qua tcpdumpmột tệp và sau đó sử dụng wiresharkcó nhược điểm là nó không hoạt động.

Tôi tưởng tượng một cách sử dụng công cụ như thế này:

$ monitorhttp -ieth0 --only-get --just-urls
2011-01-23 20:00:01 GET http://foo.example.org/blah.js
2011-01-23 20:03:01 GET http://foo.example.org/bar.html
...

Tôi đang sử dụng Linux.


Có một câu hỏi tương tự được trả lời trên superuser.com/questions/67428/possible-to-catch-urls-in-linux
AlexD

Câu trả lời:


100

Hãy thử tcpflow:

tcpflow -p -c -i eth0 port 80 | grep -oE '(GET|POST|HEAD) .* HTTP/1.[01]|Host: .*'

Đầu ra là như thế này:

GET /search?q=stack+exchange&btnI=I%27m+Feeling+Lucky HTTP/1.1
Host: www.google.com

Rõ ràng bạn có thể thêm các phương thức HTTP bổ sung vào câu lệnh grep và sử dụng sedđể kết hợp hai dòng thành một URL đầy đủ.


Một lợi thế của tcpflownó là nó đã có sẵn trong các kho lưu trữ mặc định trong Ubuntu 10.04 (jowersniffer, httpry thì không). Thông tin gói nói rằng các đoạn IP không được ghi lại đúng cách - không biết, nếu điều này quan trọng đối với trường hợp sử dụng này - có lẽ jowersniffer có thể xử lý chúng tốt hơn.
maxschlepzig

Vì bạn chỉ cần lấy URL nên có vẻ như nó sẽ không quan trọng. Tcpflow sẽ hiển thị các gói theo thứ tự chúng được nhận trên giao diện. Do đó, nếu bạn đang cố gắng nắm bắt nội dung tệp, bạn có thể nhận được các gói không theo thứ tự và sẽ tạo ra một tệp bị hỏng. Nhưng trường hợp sử dụng của bạn được liệt kê trong câu hỏi tôi nghĩ rằng điều này sẽ làm việc cho bạn. Bạn cũng có thể mở rộng grep của mình (hoặc xóa -o) để xem thêm dữ liệu gói để sắp xếp hoặc không có gì sau này.
bahamat

@bahamat "tcpflow" có thể hoạt động với URL https không?
Maulik tuần tra

Càng ngày, câu trả lời là không. Trước đây, SSL đủ yếu để nếu bạn có quyền truy cập vào khóa được sử dụng cho luồng, bạn có thể giải mã bất kỳ lưu lượng truy cập nào được sử dụng với khóa đó. Ngày nay, hầu hết các trang web sẽ sử dụng khóa bí mật hoàn hảo về phía trước và đàm phán các khóa phù du. Tùy chọn tốt nhất hiện nay là một proxy trong suốt được gọi là "vết sưng trong dây".
bahamat

1
không có gì bằng cách, trong khi duyệt, sử dụng wifi: sudo tcpflow -p -c -i wlo2 port 80 | grep -oE '(NHẬN | BÀI | TRƯỚC). * HTTP / 1. [01] | Máy chủ :. *'
Ses

23

Bạn có thể sử dụng httpry hoặc Justniffer để làm điều đó.

httpry có sẵn, ví dụ như thông qua kho lưu trữ gói Fedora.

Cuộc gọi ví dụ:

# httpry -i em1

(trong đó em1biểu thị một tên giao diện mạng)

Ví dụ đầu ra:

2013-09-30 21:35:20    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/6281/editor-heartbeat/edit    HTTP/1.1
2013-09-30 21:35:20    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:35:49    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/validate-body                 HTTP/1.1
2013-09-30 21:35:49    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:33:33    192.168.0.1      92.197.129.26    >    GET     cdn4.spiegel.de    /images/image-551203-breitwandaufmacher-fgoe.jpg    HTTP/1.1

(đầu ra được rút ngắn một chút)


Làm cách nào tôi có thể hiển thị tiêu đề hoặc nội dung của yêu cầu hoặc phản hồi?
Mohammed Noureldin

không có gì sudo httpry -i wlo2 (trong đó wlo2 là tên thiết bị wifi)
Ses

7

Tôi đang tìm kiếm một cái gì đó tương tự, với yêu cầu bổ sung rằng nó cũng hoạt động cho https .

Các công cụ dựa trên pcap như tcpflow httpry urlsnarfkung fu tcpdump khác hoạt động tốt cho http, nhưng đối với các yêu cầu an toàn, bạn không gặp may.

Tôi đã đưa ra urldump , đó là một gói nhỏ xung quanh mitmproxy .
iptablesđược sử dụng để chuyển hướng lưu lượng truy cập đến proxy, vì vậy nó hoạt động minh bạch.

$ sudo urldump   
http://docs.mitmproxy.org/en/stable/certinstall.html
http://docs.mitmproxy.org/en/stable/_static/js/modernizr.min.js
https://media.readthedocs.org/css/sphinx_rtd_theme.css
https://media.readthedocs.org/css/readthedocs-doc-embed.css
https://media.readthedocs.org/javascript/readthedocs-doc-embed.js
...

Xem README để biết thêm.


1

Tôi nghĩ Wireshark có khả năng làm những gì bạn muốn

Về mặt tích cực, nó rất mạnh mẽ, bạn có thể cài đặt nó thông qua apt-get và nó đi kèm với GUI.

Tuy nhiên, hệ thống bộ lọc rất phức tạp - nhưng có các hướng dẫn tốt được tích hợp và nó sẽ cung cấp cho bạn tổng quan trực tiếp hoặc bắt đầu / dừng lưu lượng.

Nhập từ 'http' vào bộ lọc có thể sẽ cung cấp cho bạn những gì bạn đang tìm kiếm (tức là lưu lượng truy cập chính do người dùng tạo).


Muốn biết lý do tại sao điều này đã bị hạ cấp. Wireshark có thể đọc giao diện một cách nhanh chóng và lọc để chỉ lưu lượng truy cập http.
Kevin M

@Kevin M, Chà, tôi không đánh giá thấp câu trả lời của bạn. Nhưng để công bằng, câu trả lời của bạn là một chút không đầy đủ và lạc đề. 1) Nó bỏ lỡ chi tiết về cách sử dụng chính xác wireshark, nghĩa là nên sử dụng bộ lọc, biểu thức bộ lọc chính xác, v.v. 2) nó không cho phép sử dụng dòng lệnh như được phác họa trong câu hỏi - ngay cả khi tôi ổn với Cách tiếp cận GUI, chế độ xem mặc định hiển thị các yêu cầu GET, trong đó tên miền không được hiển thị cạnh nhau - không thuận tiện cho trường hợp sử dụng được phác thảo.
maxschlepzig

Ý tôi là: s / câu trả lời của bạn / Câu trả lời của Phobia /
maxschlepzig

1

Một lựa chọn tốt khác có thể là nethogs

Trên fedora có sẵn trong số các gói cốt lõi, và trên centos bạn có thể lấy nó thông qua repo epel.


1

Ngoài ra còn có chương trình dòng lệnh urlsnarflà một phần của gói DSNiff (cũng được đóng gói với ví dụ Fedora 19).

Thí dụ:

# urlsnarf -i em1
urlsnarf: listening on em1 [tcp port 80 or port 8080 or port 3128]
jhost - - [29/May/2014:10:25:09 +0200] "GET http://unix.stackexchange.com/questions HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/css/style-V5-2-2.css HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/jscfg/http/global-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/javascript-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/interface-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/netmind-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/favicon.ico HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
[..]

(khi duyệt đầu tiên đến SE và sau đó đến spiegel.de)

Hạn chế: DSNarf không hỗ trợ IPv6 . Tôi có thể sao chép báo cáo lỗi này với 0.17 trên Fedora 19. Cũng có vẻ như bị phá vỡ dưới Ubuntu atm đáng tin cậy (hoạt động tốt trong sáng suốt).

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.