HTTPプロトコル:pipeline、1つのパケットに複数のリクエストがあり、1つのパケットに複数の応答がある
3054 ワード
一、テストパッケージの入手方法
1.1コードのコンパイル、実行、発注
コンパイル:g++test.cpp生成a.out
実行:./a.out
1.2パケットのキャプチャ
tcpdump -i eth0 tcp and host 113.31.27.226 and port 80 -w 123.pcap
二、パケット分析
123.pcapをwindowsにダウンロードすると、wiresharkで分析できます.
123.pcapダウンロードアドレス:http://download.csdn.net/detail/kanguolaikanguolaik/6486303
123 pcapの4番目のパケットは、リクエストパケットであり、このパケットには3つのリクエストが含まれている.
123 pcapの6番目のパケットは、応答パケットであり、このパケットには2つの応答が含まれている.
1.1コードのコンパイル、実行、発注
コンパイル:g++test.cpp生成a.out
実行:./a.out
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
using namespace std;
int main(int argc, char* argv[])
{
int sock_srv = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr_srv;
bzero(&addr_srv, sizeof(struct sockaddr_in));
addr_srv.sin_addr.s_addr = inet_addr("113.31.27.226");
addr_srv.sin_family = AF_INET;
addr_srv.sin_port = htons(80);
int ret = connect(sock_srv, (struct sockaddr*)&addr_srv, sizeof(struct sockaddr));
if(ret < 0)
{
cout<<"fail to connect."<<endl;
close(sock_srv);
return -1;
}
char buf[1500] = {"GET /aa.mp4?asf=sdaf HTTP/1.1\r
\
Host: 113.31.27.226\r
\
Connection: keep-alive\r
\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r
\
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36\r
\
Accept-Encoding: gzip,deflate,sdch\r
\
Accept-Language: zh-CN,zh;q=0.8\r
\
\r
\
GET /fetch_ldns.png HTTP/1.1\r
\
Host: ns.pb.cachecn.net\r
\
Connection: keep-alive\r
\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r
\
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36\r
\
Accept-Encoding: gzip,deflate,sdch\r
\
Accept-Language: zh-CN,zh;q=0.8\r
\
\r
\
GET /40x.jpg HTTP/1.1\r
\
Host: ns.pb.cachecn.net\r
\
Connection: keep-alive\r
\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r
\
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36\r
\
Accept-Encoding: gzip,deflate,sdch\r
\
Accept-Language: zh-CN,zh;q=0.8\r
\
\r
"};
cout<<"buf len: "<<strlen(buf)<<endl;
ret = write(sock_srv, buf, strlen(buf));
if(ret < 0)
{
cout<<"fail to write."<<endl;
close(sock_srv);
return -1;
}
char rcv_buf[1500];
do
{
bzero(rcv_buf, 1500);
ret = read(sock_srv, rcv_buf, 1500);
if(ret < 0)
{
cout<<"fail to read."<<endl;
close(sock_srv);
return -1;
}
if(0 == ret)
{
cout<<"read finished."<<endl;
break;
}
cout<<"recv data: "<<rcv_buf<<endl;
}while(ret > 0);
close(sock_srv);
return 0;
}
1.2パケットのキャプチャ
tcpdump -i eth0 tcp and host 113.31.27.226 and port 80 -w 123.pcap
二、パケット分析
123.pcapをwindowsにダウンロードすると、wiresharkで分析できます.
123.pcapダウンロードアドレス:http://download.csdn.net/detail/kanguolaikanguolaik/6486303
123 pcapの4番目のパケットは、リクエストパケットであり、このパケットには3つのリクエストが含まれている.
123 pcapの6番目のパケットは、応答パケットであり、このパケットには2つの応答が含まれている.