计算机网络课程设计之网络代理服务器的设计与实现
前言
本实验因为时间有限,写的比较草率。。。
白嫖容易,创作不易,本文原创,转载请注明!!!
源码和可运行程序:
链接:https://pan.baidu.com/s/1A9KctmpP2JJgyW2wLrehIg
提取码:Lin2
计算机网络课程设计:
计算机网络课程设计之网络聊天程序的设计与实现
计算机网络课程设计之Tracert与Ping程序设计与实现
计算机网络课程设计之基于 IP 多播的网络会议程序
计算机网络课程设计之网络嗅探器的设计与实现
计算机网络课程设计之电子邮件客户端程序设计与实现
计算机网络课程设计之TELNET 终端设计与实现
计算机网络课程设计之网络代理服务器的设计与实现
计算机网络课程设计之简单 Web Server 程序的设计与实现
Qt入门系列:
Qt学习之C++基础
Qt学习之Qt安装
Qt学习之Qt基础入门(上)
Qt学习之Qt基础入门(中)
Qt学习之Qt基础入门(下)
创作不易,整个课程设计程序3000多行代码,所有实验都写在了一个程序中,时间有限,能力不足,转载望注明!!!
本文链接
个人博客:https://ronglin.fun/archives/276
PDF链接:见博客网站
CSDN: https://blog.csdn.net/RongLin02/article/details/122510609
实验题目
网络代理服务器的设计与实现
实验目的
实现一个简易的 proxy 程序。proxy 程序的功能:能够做“二传手”的工作。它自身处在能同时连通外界目标服务器和我的机器的位置上。我的机器把请求发送给它,它接受请求,把请求原封不动的抄下来发送给外界目标服务器;外界目标服务器响应了请求,把回答发送给它,它再接受回答,把回答原封不动的抄下来发送给我的机器。这样,我的机器实际上是把它当作了目标服务器(由于是原封不动的转抄,请求和回答没有被修改)。而它则是外界目标服务器的客户端。
总体设计
(含背景知识或基本原理与算法、或模块介绍、设计步骤等)
一共想了三种实现方法
第一种:
这种最简单,这个Proxy的设计思路为写一个proxy客户端和一个proxy服务器,客户端和服务器用TCP连接,然后客户端将要请求的网站发给服务器,然后服务器发出一个HTTP/HTTPS请求,然后将请求的返回数据再通过TCP把数据发送给proxy客户端。这种思路有一个问题就是当关闭代理的时候,proxy客户端是没有办法发出请求的
第二种:
这种思路是在思路一的基础上,给客户端增加一个判断,如果连接了proxy服务器的时候,就把网站发送给proxy服务器,如果没有连接proxy服务器的话,就自己发出一个HTTP/HTTPS请求,然后处理接受的数据,这种是最符合proxy代理的展示作用的
第三种:
这种思路是前两者的增强版,因为前两者只是用来展示作用,实际上是没啥实际作用的,我想的第三种思路是,当启动proxy服务器的时候,监听客户端发出的所有请求,作为一个中介,然后拦截下来,分析请求头,然后重新构造一个请求发出,然后把返回结果通过TCP返还给proxy客户端
详细设计
(含主要的数据结构、程序流程图、关键代码等)
时间有限,决定用第一种思路
难点主要在于Qt发出一个HTTP/HTTPS请求,HTTP简单,但是HTTPS比较麻烦,下面说明一下Qt如何发出一个HTTP/HTTPS请求
参考博客:
https://blog.csdn.net/gongjianbo1992/article/details/97568863
//构建一个manager对象
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
//manager具有异步API,当http请求完成后,会通过finished信号进行通知
connect(manager,&QNetworkAccessManager::finished,this,&MyClass::replyFinished);
//发送异步get请求
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
当完成请求的接收数据的时候,会触发槽函数,然后就可以处理数据,处理数据如下:
//connect(manager,&QNetworkAccessManager::finished,this,&MyClass::replyFinished);
//槽函数
void MyClass::replyFinished(QNetworkReply *reply)
{if(reply->error()!=QNetworkReply::NoError){//处理中的错误信息qDebug()<<"reply error:"<<reply->errorString();}else{//请求方式qDebug()<<"operation:"<<reply->operation();//状态码qDebug()<<"status code:"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();qDebug()<<"url:"<<reply->url();//qDebug()<<"raw header:"<<reply->rawHeaderList();//获取响应信息const QByteArray reply_data=reply->readAll();qDebug()<<"read all:"<<reply_data;}reply->deleteLater();
}
然后完成了一次HTTP请求
对于HTTPS的请求
首先要先获取需要的OpenSSL版本
bool bSupp = QSslSocket::supportsSsl();QString buildVersion = QSslSocket::sslLibraryBuildVersionString();QString version = QSslSocket::sslLibraryVersionString();
// true "OpenSSL 1.0.2j 26 Sep 2016" "OpenSSL 1.0.2f 28 Jan 2016"
// qDebug() << bSupp << buildVersion << version << endl;
我这里输出
true "OpenSSL 1.0.2j 26 Sep 2016" "OpenSSL 1.0.2f 28 Jan 2016"
说明需要的是OpenSSL 1.0.2j
的版本,然后去搜索,下载好两个文件放在exe同级文件夹下即可
// 发送https请求前准备工作;QSslConfiguration config;QSslConfiguration conf = request.sslConfiguration();conf.setPeerVerifyMode(QSslSocket::VerifyNone);conf.setProtocol(QSsl::AnyProtocol);request.setSslConfiguration(conf);request.setUrl(QUrl(URL));manager->get(request);
然后配置好即可
实验结果与分析
界面如下
先启动proxy服务器,然后登录,然后点击请求
然后请求成功,发现请求的百度的数据已经返回回来了。
小结与心得体会
时间仓促,没有写的很好,只是为了实现演示而设计功能,不过对于proxy有了了解。
=w=
计算机网络课程设计之网络代理服务器的设计与实现相关推荐
- 计算机网络课程设计之网络嗅探器的设计与实现
前言 本实验难点是在于Windows下的raw socket有太多的限制,因此用winpcap编程功能更加强大,但是根据指导书要求要用原始套接字,原始套接字在Linux系统下也十分强大,结尾附上Lin ...
- 7、网络代理服务器的设计与实现
一.设计题目 7.网络代理服务器的设计与实现 二.设计内容 实现一个简易的 proxy 程序.proxy 程序的功能:能够做"二传手"的工作.它自身处在能同时连通外界目标服务器和我 ...
- 网络代理服务器的设计与实现
功能需求 实现一个简易的 proxy 程序.proxy 程序的功能:能够做"二传手"的工作.它自身处在能同时连通外界目标服务器和我的机器的位置上.我的机器把请求发送给它,它接受请求 ...
- 计算机网络实验1:HTTP 代理服务器的设计与实现
目录 一.修改并理解参考代码 1.修改错误 2.基本代理服务器原理 二.附加功能的实现 1.网站过滤:允许/不允许访问某些网站 2.用户过滤:支持/不支持某些用户访问外部网站 3.网站引导:将用户对某 ...
- 计算机网络课程设计之基于 IP 多播的网络会议程序
前言 本实验难点在于环境的配置,尤其是多网卡配置,经过查阅资料和多次小伙伴们测试,最后终于找到问题的根源 问题分析和配置主要放在实验结果与分析栏中 结尾附上指导书的IP多播源码 白嫖容易,创作不易,本 ...
- 计算机网络课程设计之网络聊天程序的设计与实现
前言 计算机网络课程设计开始,要求用C/C++,而且有些题目还要有图形界面,因此决定用Qt写图形界面,同时决定用一个程序完成所有的实验设计. 白嫖容易,创作不易,本文原创,转载请注明!!! 源码和可运 ...
- 计算机网络课程设计之简单 Web Server 程序的设计与实现
前言 本实验是实现一个简易的webserver,我们一直在访问网站,甚至还做过Web课程设计,部署过Tomcat等等,所以说这次实验能更深入的了解其原理 白嫖容易,创作不易,本文原创,转载请注明!!! ...
- 计算机网络课程设计之TELNET 终端设计与实现
前言 Telnet设计是一个比较麻烦的东东,因为Telnet服务器需要部署,而且网络上的资料比较少,最后通过在云服务器CentOS上安装Telnet服务器然后自己的程序作为一个Telnet客户端测试成 ...
- 计算机网络课程设计之电子邮件客户端程序设计与实现
前言 本实验主要是用smtp协议发邮件,收邮件要用到POP3,时间有限,只实现了发邮件,实现过程放在总体设计中 白嫖容易,创作不易,本文原创,转载请注明!!! 源码和可运行程序: 链接:https:/ ...
最新文章
- pandas学习之Series结构
- 实现困境突破:中小企业家的三项修炼
- 参考文献 如何控制别自动换行_word里插入参考文献时,出现自动换行,排版很难看,怎么解决?有图!求大神指教!...
- soap协议_Go和SOAP
- c语言无符号中符号什么意思,C语言中无符号与有符号及相加问题
- Express app.get 进行路由 Route 设置
- 欢迎使用CSDN-markdown编辑器7-3
- 两种方法查看MFC源代码
- 关于Google Guava的几个问题
- 【Flutter】Dart的工厂构造方法单例对象初始化列表
- linux socket版本 can,linux socket can程序cantool
- VIX 指数构造详细证明过程
- 中国冰淇淋市场深度评估及发展趋势预测报告(2022版)
- qurlinfo在qt5中_QT5编译使用QFtp的方法步骤
- 递归和动态规划的一个区别(递归是自顶向下,然后返回计算;动态规划是自低向上运算)
- 中国腹肌刺激器行业发展动态与投资前景预测报告(2022-2027)
- python元组切片_Python中如何对元组进行切片
- (小)算法题(长期更新)
- python连接打印机打印收据单_使用python打印收据
- Python Django框架的安装及基本用法
热门文章
- Nginx伪静态配置和常用Rewrite伪静态规则集锦
- monkey 环境搭建
- 关于telnet: connect to address 190.168.6.6: No route to host 报错处理
- Eclipse+PyDev 安装和配置(转)
- codeblocks下libcurl的配置
- Android 向服务器发送XML数据及调用webservice
- 非985,计算机专业的大学生该如何自学编程?
- Debian Linux下如何以root账号登录桌面
- 如何用FineReport制作一张报表(一)
- 在mount里看到哪个设备文件的一些笔记