哈工大计算机网络实验一——HTTP代理服务器的设计与实现

这篇具有很好参考价值的文章主要介绍了哈工大计算机网络实验一——HTTP代理服务器的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验内容

1. 设计并实现一个基本HTTP代理服务器。要求在指定端口接收来自客户的HTTP请求并且根据其中的URL地址访问该地址所指向的HTTP服务器(原服务器),接收HTTP服务器的响应报文,并将响应报文转发给对应的客户进行浏览。

2. 设计并实现一个支持Cache功能的HTTP代理服务器。要求能缓存原服务器响应的对象,并能够通过修改请求报文(添加if-modified-since头行),向原服务器确认缓存对象是否是最新版本。

3. 扩展HTTP代理服务器,支持如下功能:

  • 网站过滤:允许/不允许访问某些网站;
  • 用户过滤:支持/不支持某些用户访问外部网站;
  • 网站引导:将用户对某个网站的访问引导至一个模拟网站(钓鱼)。

一、实验总体思路

首先了解一下客户端和服务器端的基本任务:

客户端(Client 服务器端(Server
  1. 根据目标服务器IP地址与端口号创建套接字,并连接服务器;
  2. 发送请求报文;
  3. 接收返回报文;
  4. 关闭连接;
  1. 对到来的请求创建套接字,绑定套接字的IP地址和端口号,对端口进行监听;
  2. 等待入连接请求;
  3. 从套接字中读取请求;
  4. 对请求进行响应,发送响应数据;
  5. 关闭连接;

本实验实现的即是一个HTTP代理服务器,接收并发送来自客户的HTTP请求,同时转发来自HTTP服务器的响应报文到客户端。在此过程中,既充当客户端,又充当服务器端的角色。

二、实验基础代理部分

1.主函数

总体上使用InitSocket()函数初始化套接字socket,利用while(true)循环与listen函数实现对指定端口的持续监听;使用accept函数接收请求,同时创建子线程进行报文的转发响应;处理完成后,等待200ms关闭该线程,并清理缓存;重复循环处理下一个请求

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

2. InitSocket()函数初始化套接字

此函数主要分为两步:加载套接字库和初始化套接字。

i). 加载套接字库。此步骤加载Socket库,并检查winsock.dll的加载是否成功以及版本是否匹配。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

ii). 初始化套接字。利用socket(AF_INET,SOCK_STREAM)方法创建套接字,第一个参数代表协议族,AF_INET表示是IPV4地址簇;第二个参数代表套接字类型,SOCK_STREAM表示是面向TCP连接的流式套接字;有时后面还会有第三个参数,代表协议号,默认设置为0;而后使用bind()方法将套接字与本机地址及响应端口绑定,并设置为监听状态。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

3. ProxyThread()线程处理函数

在线程函数中,首先需要使用ZeroMemory()方法初始化内存,再使用recv()函数接收来自客户端的HTTP请求,消息内容缓存在Buffer中,recvSize为实际收到的报文字节数,而后使用ParseHttpHead函数对HTTP报文首部进行解析。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

之后调用ConnectToServer函数,根据发送端套接字的协议族和端口号还有套接字类型,以及目的主机的IP地址和端口号进行建立和服务器之间的连接。连接成功后,调用send()将客户端发送的HTTP请求报文转发给目标服务器。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

接下来调用recv()函数等待目标服务器返回数据,可以理解为网页内容, 接受之后将返回的数据直接转发给客户端,结束本次线程处理。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

最后是异常处理,如果在过程中有异常均跳转到error,结束线程运行。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

4. ParseHttpHead()HTTP头部解析函数

根据下图HTTP请求报文头部结构,使用strtok_s()方法对报文信息进行分割提取,得到方法、URL、Host、Cookie等信息。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

5. ConnectToServer ()函数连接服务器

与InitSocket()函数中创建套接字过程类似,根据发送端套接字的协议簇和端口号还有套接字类型,以及目的主机的IP地址和端口号进行建立连接,如果连接成功,放回TRUE。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

三、Cache部分功能设计

当访问某网站时,首先通过URL对应的文件名寻找本地对应缓存文件,

1) 若无对应文件,即为第一次访问某网站,则代理服务器通过writeinCache()函数将该请求返回的响应数据写入缓存即相应文件中

2) 若匹配到本地缓存文件,则获取文件中的Date信息,利用MakeNewHTTP()函数构造条件GET报文,即为报文在Host后插入If-Modified-Since头部行。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

再向服务器端发送请求,通过服务器返回的数据码判断是否为最新的数据,若返回304,则内容并未再次更新,直接使用readCache()方法读取缓存中的内容并转发给客户端;若返回200,则将此响应报文直接发给客户端,同时更新本地缓存。

由于上述writeinCache()readCache(),MakeNewHTTP()均为简单的文件读写、字符串插入等操作,此处不再给出截图。

四、扩展功能设计

a) 网站过滤:允许/不允许访问某些网站;

设置字符串数组存储屏蔽网站地址,对请求的HTTP报文头部进行解析,提取其

中的访问地址URL,并与屏蔽网站地址进行匹配,若匹配成功,则代码跳转至error部分,打印相关提示信息,立即关闭套接字,断开连接。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议

b) 用户过滤:支持/不支持某些用户访问外部网站;

一种方法是直接更改套接字绑定的主机地址,绑定主机127.0.0.1即限制仅本机用户可访问服务器ProxyServerAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1")。

也可以在accept()监听套接字时获取客户端IP与禁止访问IP进行字符串比较以实现用户屏蔽。

c) 网站引导:将用户对某个网站的访问引导至一个模拟网站

设置字符串数组存储钓鱼网站地址,设置引导目的网站地址,同样解析匹配URL,若匹配成功,则更改HTTP头部字段的访问网址URL 与Host主机地址,实现网页的钓鱼跳转。

哈工大计算机网络实验一——HTTP代理服务器的设计与实现,计算机网络,计算机网络,http,网络协议文章来源地址https://www.toymoban.com/news/detail-837036.html

到了这里,关于哈工大计算机网络实验一——HTTP代理服务器的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 哈工大计算机网络课程网络层协议详解之:DHCP协议

    在之前的网络层内容介绍中,我们讲解了IP地址的概念、IP子网/子网掩码、有类IP地址的划分,CIDR无类IP地址以及路由聚合等概念。接下来,继续介绍网络层中的另一个基础概念:作为一个主机,如何获得一个IP地址,并完成IP地址相关信息的配置。为此,重点介绍DHCP协议。

    2024年02月11日
    浏览(52)
  • 哈工大计算机网络课程网络安全基本原理之:身份认证

    在日常生活中,在很多场景下我们都需要对当前身份做认证,比如使用密码、人脸识别、指纹识别等,这些都是身份认证的常用方式。本节介绍的身份认证,是在计算机网络安全中的身份认证,从端到端之间通信的角度来看,通信双方的两个实体如何来确认另一方通信实体的

    2024年02月14日
    浏览(37)
  • 哈工大计算机网络传输层协议详解之:TCP协议

    哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理 哈工大计算机网络课程传输层协议详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 点对点通信 一个发送方、一个接收方 可靠的、按序的字节流 流水线机制

    2024年02月10日
    浏览(40)
  • 哈工大计算机网络课程网络层协议详解之:网络地址转换NAT

    上一节中,我们在DHCP协议中介绍了主机如何配置自己的IP地址,可以通过手动静态配置的方式,或者是利用DHCP协议动态配置的方式。在本节中,我们继续深入探究另一个问题,即: IP地址从哪里来? DHCP协议中我们知道了主机如何配置自己的IP地址,但是这个DHCP服务器返回的

    2024年02月11日
    浏览(36)
  • 哈工大计算机网络课程传输层协议之:拥塞控制原理剖析

    哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理 哈工大计算机网络课程传输层协议详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:TCP协议 **拥塞(Congestion)** 非正式定义:“太多发送主机发送了太多数据或者发送速度太快

    2024年02月11日
    浏览(37)
  • 哈工大计算机网络课程局域网详解之:无线局域网

    本节介绍一下平时经常使用的一个无线局域网技术,也就是通常我们使用的wifi。 wifi是IEEE 802.11这样一个系列标准所定义的无线局域网。作为802.11局域网来说,实际上存在很多版本: 802.11b 2.4-2.5GHz免费频段(unliebensed spectrum) 最高速率:11Mbps 物理层采用直接序列扩频(DSSS)

    2024年02月15日
    浏览(42)
  • 哈工大计算机网络课程局域网详解之:交换机概念

    在介绍完局域网中最具代表性的以太网技术后,接下来我们继续来看一下在局域网中使用非常广泛也是非常重要的网络设备:交换机。 本节主要面向以太网来介绍其中使用的交换机。 作为以太网交换机来说,是一个典型的数据链路层设备,可以实现对链路层数据帧的存储-转

    2024年02月15日
    浏览(45)
  • 哈工大计算机网络课程网络层协议详解之:路由算法概述与链路状态路由算法

    在前面的小节中,我们介绍了网络中路由器的路由与转发等功能。我们说 作为网络层,从功能上来说,核心功能就是要实现路由和转发。 对于转发来说,实际上就是路由器根据存储的转发表,将目的地址转发到对应的输出链路上去。在这个过程中,完成转发的重要依据,就

    2024年02月11日
    浏览(37)
  • 哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

    在互联网中,IP数据报的传输很容易出现差错,当出现差错时,最简单的处理办法就是对该IP数据报进行丢弃。但是,并不是直接丢弃就完了,为了让源主机感知到数据报出现差错,当数据报被丢弃时,IP网络会借助于ICMP协议,向发送数据报的源主机发送一个ICMP差错报文。本

    2024年02月12日
    浏览(46)
  • 哈工大计算机网络传输层协议详解之:可靠数据传输的基本原理

    哈工大计算机网络课程传输层协议详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:TCP协议 哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 什么是可靠? 不错、不丢、不乱 可靠数据传输协议 可靠数据传输对应用层、传输层、链路

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包