avatar

计算机网络作业2 Web服务器配置,HTTP报文捕获

计算机网络第二次实验作业——Web服务器配置,HTTP报文捕获

实验要求

(1)搭建Web服务器(自由选择系统),并制作简单Web页面,包含简单文本信息(至少包含专业、学号、姓名)。

(2)通过浏览器获取自己编写的Web页面,使用Wireshark捕获与Web服务器的交互过程,并进行简单分析说明。

Web服务器的搭建

  • 系统:windows xp 虚拟机
  • 软件:apache(phpnow)
  • 虚拟机IP:192.168.141
  • 端口:默认端口80
  • 访问方式:主机浏览器访问虚拟机ip

安装软件后,在安装路径C:\phpnow\htdocs\下添加页面,本次实验所需的html文件将统一放置在netword子路径下

具体代码内容将在下一部分(数据包捕获)详述

通过Wireshark捕获与Web服务器的交互过程

网页访问概览

打开Wireshark,选择需要捕获的网卡,这里由于是使用NAT模式下的虚拟机搭建的服务器,所以选用VMnet8

image-20201112000608600

为了观察连接的建立和页面访问的基本过程,使用一个空的文件1.html

访问

image-20201112000822612

可以看到Wireshark捕获到的内容。

image-20201112002522787

界面大致分为四个区:命令菜单区、俘获分组列表区、选定分组首部细节区、十六进制和ASCII格式分组内容区。

其中,命令菜单区的应用显示过滤器部分可以筛选显示的分组,例如image-20201112003005490可以查找TCP协议下包含80端口的消息;image-20201112003134094能够找到在sourcedestination中包含该ip的消息,由于没有使用127.0.0.1,所以查找结果为空

TCP

对于第一条消息,为TCP原型

image-20201112101752125

消息分为4个部分image-20201112110037185

  1. Frame,指的是==物理层的数据帧概况==

image-20201112102947805

  1. Ethernet II第0-13个字节,表示数据层以太网帧头部信息,包含目的地址源地址协议类型

image-20201112102623867

源地址为00:50:56:c0:00:08image-20201112101551631在数据包的第6-11字节表示发送端的物理地址,看到是主机网卡中的信息,源ip信息与源网卡信息相对应,可以看到是主机向“服务器”发送的网络请求

image-20201112102042908

目的地址为00:0c:29:8d:b9:51image-20201112102207944

在数据包的前六个字节,是虚拟机对应的网卡,表示消息发送至虚拟机网卡

image-20201112102333147

协议类型IPV4,用0x0800表示image-20201112102748946

整体格式符合定义

#pragma pack(1)//以1byte方式对齐
typedef struct FrameHeader_t {//帧首部
BYTE DesMAC[6];//6字节目的地址
BYTE SrcMAC[6];//6字节源地址
WORD FrameType;//帧类型,解析时注意大小端转换
}frameHeader_t;
  1. Internet Protocol Version 4第14-33个字节,互联网层IP包头部信息

image-20201112103627730

对应内容为

typedef struct IPHeader_t {//IP首部
BYTE Ver_HLen;
BYTE TOS;
WORD TotalLen
WORD ID;
WORD Flag_Segment
BYTE TTL;
BYTE Protocol;
WORD Checksum;//校验和
ULONG SrcIP;//源ip地址
ULONG DstIP;//目的ip地址
}IPHeader_t;

例如源IP地址为192.168.89.1,以十六进制显示在消息中为c0.a8.59.01image-20201112103816676

  1. Transmission Control Protocol第34个字节开始,传输层的数据段头部信息

image-20201112100332215

可以看到,消息是由主机的3164端口发送至虚拟机的80端口

image-20201112105805846

HTTP

选取一条HTTP消息image-20201112110358970

消息格式为在原有TCP格式的基础上,增加超文本传输协议部分

image-20201112110445800

可以看到十六进制的消息和对应的字符

连接的建立与断开

  • 找到IP对应的mac地址

image-20201112174406594

broadcast为设置目的地址为全1(十六进制下的全f),类型为ARP,用0x0806表示

image-20201112174602374

目的地址全零表示未知地址

image-20201112174855066

image-20201112174419537

主机向虚拟机回复ip地址对应的MAC

image-20201112175136403
  • 三次握手

image-20201112172547597

由第7条消息可以看到,采用的是HTTP/1.1,使用双端口进行连接,防止头阻塞

对于每个端口,由主机向服务器发送连接建立请求SYN,服务器向主机回复SYN消息并携带确认消息ACK,主机收到服务器的回复并再次向服务器发送ACK

img
  • 四次挥手

image-20201112172915542

同样,使用双端口,对于每个端口有以下过程

  1. 主机向服务器发送连接断开请求,服务器回复确认,
  2. 服务器关闭与服务器的连接,并发送FIN和ACK。客户端收到消息,回复确认

获取网页文字信息

网页

<html>
<head>
<title>Michelle</title>
<h1>1811494 刘旭萌 </h1>
</head>
<body>
信息安全专业
</body>
</html>

image-20201112154539585

使用过滤器进行查找image-20201112154559243

在这个区找到我们写的html内容,可以看到我们的文件一共由九行,与上述代码相对应image-20201112154649040

image-20201112154757917

中文由\xxx八进制编码显示,在字符区由16进制表示,例如使用URL解码工具

image-20201112160423104

获取图片信息

<html>
<head>
<title>Michelle</title>
<h1>1811494 刘旭萌 </h1>
</head>
<body>
<img src=/1.jpg>
</body>
</html>
image-20201112173222234

利用GET请求图片文件,

image-20201112200512027

返回状态码200代表请求成功,同时返回图片内容(43号消息)

image-20201112201105459

与图片的16进制编码进行比对,证明是图片内容

image-20201112201157687

获取视频信息

<body>
<video width="300"height="240"controls="controls">
<source src="video.mp4",type="video/mp4"/>
</video>
</body>
</body>
</html>

image-20201112211017884

捕捉到一系列数据包

image-20201112210246578

  1. TCP包中的win代表接收窗口的大小,即表示这个包的发送方当前还有多少缓存区可以接收数据

  2. TS(Timestamps) Timestamps在tcp选项中包括两个32位的timestamp: TSval(Timestamp value)和TSecr(Timestamp Echo Reply)。如果设置了TS这个选项,发送方发送时,将当前时间填入TSval,接收方回应时,将发送方的TSval填入TSecr即可(注意发送或接收都有设置TSvalTSecr )。

  3. “TCP segment of a reassembled PDU”,指TCP层收到上层大块报文后分解成段后发出去

  4. PSH所表达的是发送方通知接收方传输层应该尽快的将这个报文段交给应用层

通过观察可以发现消息显示出明显的周期性,即服务器发送三条消息,最后一条带有psh标志,客户端回应一条ack消息,且len=0

最后,返回状态码206,表示部分请求成功,视频获取完毕image-20201112211755746

在文本框输入信息并回显

<html>
<head>
<title>1811494</title>
</head>
<body>
<script language="javascript">
function getLoginMsg(){
loginMsg=document.loginForm;
alert("name:"+loginMsg.userName.value+"\n");
}
</script>
<form name="loginForm">
name:<input type="text" name="userName"/><br/><br/>
<input type="button" value="submit" onclick="getLoginMsg()"/>
</form>
</body>
</html>
image-20201112214858365

输入姓名,点击submit

image-20201112214932278

页面回显,但是在wireshark中没有找到回显内容相关数据包,猜测是因为使用了alert的函数是由浏览器直接处理的,并不将数据提交至服务器

image-20201112214956163

总结

image-20201112220026261
  1. 在实验过程中,我们发现,当第一次请求页面并请求成功时,页面会返回状态码200表示请求成功,并同时返回页面的html内容;当再次请求且页面没有修改时会返回304表示页面未修改可以直接使用浏览器缓存的内容
  2. 传输流程整体为:
    1. 客户端发出请求,服务器在局域网内(因为使用的是本地的虚拟机)发送查找网卡请求并找到ip对应的物理地址
    2. 三次握手建立连接
    3. 进行页面请求,服务器返回html内容
    4. 请求并返回图片和视频等内容
    5. 四次挥手断开连接

参考:

Author: Michelle19l
Link: https://gitee.com/michelle19l/michelle19l/2021/01/15/大三上/计网/计网作业2/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶