[Question] Học HTTP qua các công cụ sniffer |
05/03/2008 01:43:47 (+0700) | #1 | 117903 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
(Tham khảo từ cuốn OReilly-HTTPTheDefinitiveGuide trên thư viện HVA)
Tớ sẽ cố gắng đi qua các phần chính của cuốn sách này với việc minh hoạ bằng cách sniff các packets. (Cứ lấy mục tiêu là HVA cho "nhanh gọn").
Cấu trúc của HTTP messages gồm 3 phần:
Start line: tất cả các HTTP messages đều bắt đầu với start line. Request mess nói những gì cần làm, reponse mess “nói” những gì đã xảy ra. Version number chỉ ra phiên bản cao nhất của HTTP mà ứng dụng hỗ trợ.
Header fields: name:value, kết thúc bằng blank line. Có các loại header: General, request, response, entity, extension.
Body: request and response bodies, chứa đựng bất cứ loại dữ liệu nào. Entity body chính là payload của HTTP mess, chúng là những gì mà HTTP phải “chở” đi.
Request messages là các HTTP messages gửi từ client đến web server, ví dụ:
GET /hvaonline/forums/stats.html HTTP/1.1\r\n
-----------------------------------------------------------------------------------------------------------------
Host: www.hvaonline.net\r\n
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080208 Fedora/2.0.0.12-1.fc8 Firefox/2.0.0.12\r\n
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n
Accept-Language: en-us,en;q=0.5\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n
Keep-Alive: 300\r\n
Connection: keep-alive\r\n
Referer: /hvaonline/recentTopics/list.html\r\n
Cookie: HIM_on_off=1; HIM_method=0; HIM_ckspell=1; HIM_daucu=1; JSESSIONID=7862580A89A05A9C083A6330A504C227; jforumAutoLogin=null; jforumUserId=128502; jforumUserHash=null; ComboHash=169082214d5fb9860dcca548030de22e\r\n
\r\n
-----------------------------------------------------------------------------------------------------------------
Response messages là các messages gửi từ web server đến client, ví dụ:
HTTP/1.1 200 OK\r\n
-----------------------------------------------------------------------------------------------------------------
Date: Tue, 04 Mar 2008 03:10:53 GMT\r\n
Server: Epecha\r\n
Cache-Control: max-age=300\r\n
Expires: Tue, 04 Mar 2008 03:15:53 GMT\r\n
Vary: Accept-Encoding,User-Agent\r\n
Content-Encoding: gzip\r\n
Content-Length: 6246
Keep-Alive: timeout=4, max=250\r\n
Connection: Keep-Alive\r\n
Content-Type: text/html;charset=UTF-8\r\n
\r\n
Content-encoded entity body (gzip): 6246 bytes -> 45543 bytes
-----------------------------------------------------------------------------------------------------------------
Line-based text data: text/html
\r\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> \r\n
\r\n
<html>\r\n
<head>\r\n
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">\r\n
<meta http-equiv="Pragma" content="no-cache">\r\n
<meta http-equiv="Expires" content="-1">\r\n
<meta name="description" content="HVA discussion board">\r\n
<meta name="keywords" content=", jforum, jforum java, jforum forum, forum java, java jforum, java forum, forum, rafael steil, bulletin board, java bb, javabb, hva, hvaonline, hvazone, hvaforum">\r\n
<meta name="resource-type" content="document">\r\n
<meta name="distribution" content="global">\r\n
<meta name="robots" content="index,follow">\r\n
<meta name="rating" content="general">\r\n
<style type="text/css">\r\n
<!-- \r\n
@import url( "/hvaonline/templates/viet/styles/style.css");\r\n
-->\r\n
</style>\r\n
<style type="text/css">\r\n
<!--\r\n
@import url("/hvaonline/templates/viet/styles/vi_VN.css");\r\n
-->\r\n
</style>\r\n
<title> - .:: HVAOnline ::.</title>\r\n
\r\n
</head>\r\n
<body class="vi_VN">\r\n
\r\n
<!--\r\n
Original theme from phpBB http://www.phpbb.com) subSilver\r\n
Created by subBlue design\r\n
http://www.subBlue.com\r\n
Modifications by JForum Team \r\n
Extended and customised by HVA Team\r\n
Added more features and Black Silver theme designed by HVA\r\n
...
Hãy xem về một response message khác:
HTTP/1.1 304 Not Modified\r\n
-----------------------------------------------------------
Date: Tue, 04 Mar 2008 03:10:59 GMT\r\n
Server: Epecha\r\n
Connection: Keep-Alive\r\n
Keep-Alive: timeout=4, max=250\r\n
Expires: Tue, 04 Mar 2008 03:15:59 GMT\r\n
Cache-Control: max-age=300\r\n
\r\n
-----------------------------------------------------------
(Giữa các phần của một HTTP message được ngăn cách bằng một đường kẻ ngang)
Có điểm gì khác giữa 2 response message: Bạn để ý status code của cái thứ nhất là 200 OK - tức là "success", bất kỳ dữ liệu yêu cầu nào đều nằm trong "body" của response message. Còn status code của response thứ hai là 304 Not Modified - chỉ ra rằng resource trên server không thay đổi gần đây. Responses với "status code" này không chứa đựng một entity body.
Phần tiếp theo, chúng ta sẽ tìm hiểu sâu và các thành phần trong một HTTP message. |
|
Let's build on a great foundation! |
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
05/03/2008 04:08:21 (+0700) | #2 | 117933 |
boom_jt
Member
|
0 |
|
|
Joined: 02/08/2007 23:51:10
Messages: 125
Offline
|
|
1 serie hứa hẹn rất có ích cho người muốn tìm hiểu về HTTP!
mình có 1 lưu ý nhỏ thôi, trong cái response:
HTTP/1.1 200 OK\r\n
-----------------------------------------------------------------------------------------------------------------
Date: Tue, 04 Mar 2008 03:10:53 GMT\r\n
Server: Epecha\r\n
Cache-Control: max-age=300\r\n
Expires: Tue, 04 Mar 2008 03:15:53 GMT\r\n
Vary: Accept-Encoding,User-Agent\r\n
Content-Encoding: gzip\r\n
Content-Length: 6246
Keep-Alive: timeout=4, max=250\r\n
Connection: Keep-Alive\r\n
Content-Type: text/html;charset=UTF-8\r\n
\r\n
Content-encoded entity body (gzip): 6246 bytes -> 45543 bytes ....
Dòng đc đánh dấu không có trong response, mà do Ethereal (wireshark) diễn giải cho mình hiểu, thực chất đoạn body của response đc nén kiểu gzip chứ không phải plain text như các bạn thấy.
có vài lời vậy thôi, quanta tiếp nhé |
|
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
05/03/2008 06:12:27 (+0700) | #3 | 117948 |
father_nghia_den
Elite Member
|
0 |
|
|
Joined: 06/10/2003 16:48:21
Messages: 95
Offline
|
|
Hi quanta,
Em có một số thắc mắc
Trong packet request bạn bắt được bằng wireshark em thấy có dòng
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080208 Fedora/2.0.0.12-1.fc8 Firefox/2.0.0.12\r\n
Vậy dòng này có ý nghĩa gì? Sao em để ý lúc nào cũng là Mozilla mặc dù client dùng IE để request tới webserver? |
|
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
05/03/2008 07:02:55 (+0700) | #4 | 117963 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
father_nghia_den wrote:
Hi quanta,
Em có một số thắc mắc
Trong packet request bạn bắt được bằng wireshark em thấy có dòng
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080208 Fedora/2.0.0.12-1.fc8 Firefox/2.0.0.12\r\n
Vậy dòng này có ý nghĩa gì?
Dòng User-Agent xác định tên và một vài dòng miêu tả về ứng dụng được sử dụng ở phía client. Đôi khi nó chứa một vài thông tin về máy mà client đang chạy (Như trên bạn nhìn thấy là tớ dùng Fedora kiến trúc i686)
father_nghia_den wrote:
Sao em để ý lúc nào cũng là Mozilla mặc dù client dùng IE để request tới webserver?
Tớ vừa phải cài lại IE trên Fedora để test trường hợp của bạn, output đây:
GET / HTTP/1.0\r\n
Accept: */*\r\n
Accept-Language: en-us;q=0.5\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)\r\n
Host: hvaonline.net\r\n
Connection: Keep-Alive\r\n
\r\n
còn đây là output cho Konqueror (có chức năng như một web browser);
GET / HTTP/1.1\r\n
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.8 (like Gecko)\r\n
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*\r\n
Accept-Encoding: x-gzip, x-deflate, gzip, deflate\r\n
Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5\r\n
Accept-Language: en\r\n
Host: www.hvaonline.net\r\n
Connection: Keep-Alive\r\n
\r\n
Câu hỏi này của bạn khá hay. Tớ google và tìm được câu trả lời thế này:
Note that most browsers today identify themselves using the "Mozilla" — an early name for the Navigator browser — product name, even if they are not derived from the original Netscape Navigator browser. Notice in the listing above that even Microsoft's Internet Explorer identifies itself using the "Mozilla" product name to indicate that it is roughly compatible to a specific version of Navigator or its successors. Today, "Mozilla" also refers to a newer Web browser available from the Mozilla Foundation at www.mozilla.org.
(Trích từ: http://www.ericgiguere.com/articles/masquerading-your-browser.html) |
|
Let's build on a great foundation! |
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
12/03/2008 11:10:06 (+0700) | #5 | 119045 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Hướng dẫn sử dụng Wireshark:
Trên *nix, có một công cụ sniffer nổi tiếng, đó là Wireshark. Wireshark là một công cụ phân tích các giao thức mạng. Để thông thạo các chức năng cơ bản của nó các bạn có thể đọc cuốn Syngress.Wireshark.and.Ethereal.Network.Protocol.Analyzer.Toolkit.Nov.2006, anh Golden Autumn đã upload lên tại http://rapidshare.com/files/59824751/Syngress.Wireshark.and.Ethereal.Network.Protocol.Analyzer.Toolkit.Nov.2006.pdf
Để bắt đầu, bạn chạy Wireshark với root account, màn hình xuất hiện:
Liệt kê các capture interfaces:
Danh sách các interfaces xuất hiện bao gồm: Ethernet, loopback, virtual, ...
Chọn Options trên dòng eth0:
Chọn tiếp Capture filters:
Chọn TCP HTTP port (80), nhấp OK -> nhấp Start để Wireshark tiến hành capture:
Nhấp Stop khi muốn dừng. Lọc những packets có giao thức là HTTP bằng cách:
Chọn HTTP và nhấp OK:
Kết quả xuất hiện như sau:
Chọn một packet bất kỳ, và expand dòng Hypertext Transfer Protocol để xem nội dung HTTP message:
|
|
Let's build on a great foundation! |
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
13/03/2008 02:37:15 (+0700) | #6 | 119119 |
mR.Bi
Member
|
0 |
|
|
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
|
|
bài này hay lắm, tối về em cũng học đòi làm tiếp 1 bài, có capture thế này như bác cho nó hoành tráng!
Thks! |
|
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children" |
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
15/03/2008 21:29:15 (+0700) | #7 | 119484 |
|
dabu
Elite Member
|
0 |
|
|
Joined: 03/03/2003 03:31:20
Messages: 226
Offline
|
|
Xin nói thêm về lịch sử của HTTP.
HyperText Transfer Protocol(HTTP) là giao thức lớp Application nó cung cấp một giao thức cho việc truy vấn HyperText Markup language(HTML) và các dữ liệu khác của web Site.
-Có 3 phiên bản HTTP.
+ HTTP/0.9: Là phiên bản đầu tiên đơn giản chỉ hỗ trợ tùy chọn đễ nhận được một trang Web.
+ HTTP/1.0: Phiên bản này được bỗ sung bởi nhiều trường dữ liệu gọi là các tiêu đề (header) vào thông số kỹ thuật.
+ HTTP/1.1: Là phiên bản cải tiến của HTTP/1.0, ưu điểm của HTTP/1.1 là có các kết nối ỗn định, tạo ống dẫn và kiễm soát cache.
- Các trình duyệt ngày nay cung cấp tính năng tương thích ngược giữa 2 phiên bản HTTP trên
|
|
It's time to build a new network. |
|
|
|
[Question] Re: Học HTTP qua các công cụ sniffer |
12/07/2008 22:16:34 (+0700) | #8 | 141284 |
nhutdm
Elite Member
|
0 |
|
|
Joined: 02/06/2003 12:40:50
Messages: 45
Offline
|
|
Em có một vài câu hỏi về sniffer... Mong các anh giải thích!
+ Với một sniffer, ta có thể capture được các HTTP Request dạng POST và GET gửi đến Server hay không?
+ Nêu được thì với nó ta có thể viết những ứng dụng web tự động sử dụng cURL của PHP là hiển nhiên phải không? |
|
|
|