Làm cách nào để kiểm tra các yêu cầu HTTP gửi đi của một ứng dụng?


70

Ứng dụng của tôi đang gửi yêu cầu HTTP đến một số máy chủ và tôi muốn xem dữ liệu thực tế mà nó đang gửi. Một số chi tiết tôi muốn xem:

  • Phương thức yêu cầu (GET / POST / PUT, v.v.)
  • Kiểu nội dung
  • Thân hình

Cách tốt nhất và đơn giản để thực hiện điều này là gì?


"phương pháp yêu cầu, loại nội dung, cơ thể và vv" Bạn đang nói về kiểm tra cụ thể HTTP? Có phải HTTPS (được bảo mật) bởi bất kỳ cơ hội nào không?
gertvdijk

Vâng, bạn đúng nhưng nó không gửi bằng trình duyệt
megas

Xin lỗi, đó chỉ là các yêu cầu HTTP
megas

3
Được rồi, vậy là tốt rồi. Nó chỉ là một hoặc một nhóm nhỏ các máy chủ mà nó đang nói chuyện? Và không có ứng dụng nào khác đang nói chuyện với các máy chủ đó? Nếu cả hai có, thì câu trả lời về Wireshark là những gì tôi sẽ đi. Tìm hiểu làm thế nào nó hoạt động. Nó không khó lắm đâu.
gertvdijk

Câu trả lời:


71

Chà, cho tất cả những người hâm mộ tcpdump =)

CHẠY TẤT CẢ NHỮNG QUY TẮC NÀY NHƯ ROOT !!!

Có được root trong một thiết bị đầu cuối với

sudo -i

Để chụp các gói RAW ...

sudo tcpdump -i any -w /tmp/http.log &

Điều này sẽ nắm bắt tất cả các gói thô, trên tất cả các cổng, trên tất cả các giao diện và ghi chúng vào một tệp , /tmp/http.log.

Chạy ứng dụng của bạn. Nó rõ ràng sẽ giúp nếu bạn không chạy bất kỳ ứng dụng nào khác sử dụng HTTP (trình duyệt web).

Giết chết tcpdump

killall tcpdump

Để đọc nhật ký, sử dụng -Acờ và dẫn đầu ra tới less:

tcpdump -A -r /tmp/http.log | less

Các -Alá cờ in ra "tải trọng" hoặc văn bản ASCII trong các gói. Điều này sẽ gửi đầu ra less, bạn có thể trang lên và xuống. Để thoát less, gõ Q.

Khi tôi truy cập Google, tôi thấy (trong các gói thô):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdumpcó một bộ tùy chọn dài để tinh chỉnh việc thu thập dữ liệu từ việc chỉ định giao diện mạng đến các cổng đến địa chỉ IP nguồn và đích. Nó KHÔNG thể giải mã (vì vậy nó sẽ không hoạt động với HTTPS).

Khi bạn biết những gì bạn quan tâm, bạn có thể sử dụng một số tùy chọn tcpdumpđể chỉ ghi lại dữ liệu quan tâm. Chiến lược chung là trước tiên ghi lại tất cả các gói, xem lại dữ liệu thô và sau đó chỉ thu thập các gói quan tâm.

Một số cờ hữu ích (tùy chọn):

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

Có một đường cong học tập, cả việc sử dụng tcpdumpvà học cách phân tích dữ liệu bạn thu thập. Để đọc thêm, tôi đánh giá cao Primer của Daniel Miessler tcpdumpvới các ví dụ .


1
cái này không thu được gì trên Ubuntu 14.04 của tôi. Máy tính xách tay của tôi kết nối với internet qua bộ định tuyến wifi. Điều đó sẽ làm cho một sự khác biệt để sử dụng tcpdump? Khi tôi giết nó, nó chỉ nói 0 packets captured 0 packets received by filter 0 packets dropped by kernel Nhưng tôi đã mở một loạt các trang web trong trình duyệt Chrome khi tcpdump đang theo dõi.
faizal

1
ahh các bài viết liên kết đã giúp. tcpdump -i any -w /tmp/http.log &đã làm việc.
faizal

22

Cài đặt đầu tiên tcpflowtừ kho chính thức của Ubuntu:

sudo apt-get install tcpflow

Sau đó chạy lệnh này để kiểm tra tất cả các yêu cầu HTTP trên cổng tiêu chuẩn:

sudo tcpflow -p -c port 80

1
và xem kết quả ở đâu? Cảm ơn bạn!
Gediminas

2
@Gediminas bạn có thể thấy đầu ra trong thiết bị đầu cuối. Xin lưu ý rằng lưu lượng HTTPS không được hiển thị. Hãy thử truy cập một HTTP như httpvshttps.com
Vanni Totaro 28/03/18

1
Tiện lợi hơn nhiều so với tcpdump nếu bạn chỉ muốn xem các yêu cầu và không phải xử lý tất cả các chi tiết TCP (syn, ack ...)
herm

13

Tôi muốn đề nghị bạn thử WiresharkCài đặt Wireshark

Xin lưu ý rằng Wireshark khá tiên tiến và do đó có thể mất một chút để làm quen. Tôi đã không sử dụng nó trong một vài năm, nhưng nó vẫn hoàn hảo cho những gì bạn đang theo đuổi - nếu không có quá nhiều tính năng.

Thông tin về Wireshark và cách sử dụng có thể được tìm thấy tại trang chủ của Wireshark .


1
Điều này không làm việc cho một quá trình duy nhất. Bạn sẽ nhận được tất cả lưu lượng truy cập trên giao diện và bạn sẽ phải lọc nó bằng IP / giao thức, v.v. wireshark - lọc theo quy trình / pid
gertvdijk

vâng, nhưng nó có thể dễ dàng thực hiện với giao diện wireshark.
Panther

2
Tôi đã từng thử wireshark trước đây và nó quá tiên tiến đối với tôi, tôi đang tìm kiếm một lựa chọn khác
megas

4
Tùy chọn khác là tcpdump. tcpdump là một công cụ dòng lệnh, sẽ dễ dàng thực hiện công việc, nhưng có một đường cong học tập dốc hơn. danielmiessler.com/study/tcpdump
Panther

1
@gertvdijk - như bạn muốn;) Hãy thoải mái thêm vào những điều cơ bản
Panther

5

Cũng có thể hiển thị với lệnh, cho đầu ra gọn gàng, ngay cả đối với SSL:

sudo tcpdump dst port 80
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.