当前位置: 首页 > news >正文

ASP 动态网站建设深圳百度推广客服

ASP 动态网站建设,深圳百度推广客服,dedecms和wordpress哪个用的人多,化妆品网站模版免费下载目标:制作一个具备类似Fiddler、Burpsuit、Wireshark的https协议代理抓包功能,但是集成到自己的app内,这样无需修改系统代理设置,使用QWebengineview通过自建的代理服务器,即可实现https包的实时监测、注入等自定义功能…

目标:制作一个具备类似Fiddler、Burpsuit、Wireshark的https协议代理抓包功能,但是集成到自己的app内,这样无需修改系统代理设置,使用QWebengineview通过自建的代理服务器,即可实现https包的实时监测、注入等自定义功能。

实现:

一、https代理服务器

1.使用QSslSocket类收发https包;使用多线程,提升代理服务器的性能。

ProxyClientThread.h

#ifndef PROXYCLIENTTHREAD_H
#define PROXYCLIENTTHREAD_H#include <QObject>
#include <QTcpSocket>
#include <QNetworkProxy>
#include <QThread>
#include <QDebug>
#include <QSslSocket>
#include <QSslConfiguration>
#include <QFile>
#include <QSslKey>
#include <QByteArray>
#include <QtZlib/zlib.h>
#include <QRegularExpression>struct HTTPHDR{QString host;quint16 port;bool newReq;
};struct HTTPHDR2{quint8 CMD;QString CMDi;QString HOST;quint16 PORT;bool status;
};enum ClientConnectionState {InitialRequest,TlsHandshake,DataTransfer
};class ProxyClientThread : public QThread
{Q_OBJECTpublic:ProxyClientThread(qintptr  sockDesc, QObject *parent = 0);~ProxyClientThread();void run();QByteArray LastResquest;private:QSslSocket clientSocket;QSslSocket serverSocket;QSslConfiguration sslConfig;int m_client_state=0;bool m_serverSocketConnected=false;QByteArray cNewReqData;QByteArray clientSockData;QByteArray serverSockData;void processClient();HTTPHDR2 processHeader(QByteArray hdr);bool loadCertificateAndKey();//HTTPHDR getHostInfo(QByteArray httpHeaderPartial);int pid;bool targetFound=false;//是否找到要注入的目标bool istargetHeader=true;//是否头部bool finishInject=false;//已完成注入QString cachedStr="";//缓存的内容;private slots:void clientSockReadyRead();void serverSockConnected();void clientSockDisconnected();void serverSockDisconnected();void serverSockReadyRead();void clientTlsHandOk();void serverSockError(QAbstractSocket::SocketError errorMsg);void clientSockError(QAbstractSocket::SocketError errorMsg);signals:void complete();
};#endif // PROXYCLIENTTHREAD_H

ProxyClientThread.cpp部分代码

#include "proxyclientthread.h"//#define DEBUG 1
QString keyFile="9291.0d30ab5b.js";
QString keyStr="}else e=await V.ImSdk.sendMessage({text:r,textExtra:a,referenceMessage:eQ";
QString injectStr=",window.MySendMsg=e";
ProxyClientThread::ProxyClientThread(qintptr sockDesc, QObject *parent) : QThread(parent)
{this->pid = sockDesc;//服务端连接connect (&this->serverSocket,SIGNAL(disconnected()),this,SLOT(serverSockDisconnected()));connect (&this->serverSocket,SIGNAL(readyRead()),this,SLOT(serverSockReadyRead()));connect (&this->serverSocket,SIGNAL(errorOccurred(QAbstractSocket::SocketError)),this,SLOT(serverSockError(QAbstractSocket::SocketError)));connect (&this->serverSocket,SIGNAL(connected()),this,SLOT(serverSockConnected()));this->serverSocket.setProxy(QNetworkProxy::NoProxy);//客户端m_client_state=InitialRequest;//客户端状态为初始化状态this->clientSocket.setSocketDescriptor(sockDesc);connect(&this->clientSocket, SIGNAL(disconnected()),this,SLOT(clientSockDisconnected()));connect(&this->clientSocket, SIGNAL(readyRead()),this,SLOT(clientSockReadyRead()),Qt::DirectConnection);connect(&this->clientSocket, SIGNAL(encrypted()), this, SLOT(clientTlsHandOk()));connect(&this->clientSocket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(clientSockError(QAbstractSocket::SocketError)));
}void ProxyClientThread::clientSockReadyRead()
{this->processClient();return;
}
void ProxyClientThread::processClient()
{HTTPHDR2 pHead;//recieved incoming client packetthis->clientSockData.clear();this->clientSockData = this->clientSocket.readAll();#ifdef DEBUGqDebug()<<this->pid<<"**收到客户端数据"<<this->clientSockData;#endif//查找匹配文件请求QString reqStr=QString(clientSockData);if(reqStr.contains("GET") and reqStr.contains(keyFile)){targetFound=true;qDebug()<<"找到要注入的文件--------------"<<reqStr;//修改请求头,不压缩reqStr.replace("Accept-Encoding: gzip, deflate, br","Accept-Encoding: identity");clientSockData=reqStr.toLocal8Bit();}if (this->serverSocket.state() == QAbstractSocket::ConnectedState){#ifdef DEBUGqDebug() <<this->pid<<": 4.2.向服务器发送请求:";//<<this->clientSockData;#endifserverSocket.write(clientSockData);return;}//处理 headerpHead = this->processHeader(clientSockData.mid(0,100));if (!pHead.status){this->LastResquest = this->clientSockData;return;}//process SSL/TLS Connection;if (pHead.CMD == 3){    //CONNECT类型if (serverSocket.state() == QAbstractSocket::UnconnectedState){#ifdef DEBUGqDebug() <<this->pid<<": 1.收到客户发起CONNECT连接" << pHead.CMD << pHead.HOST << pHead.PORT;#endifm_client_state=TlsHandshake;//握手状态serverSocket.connectToHostEncrypted(pHead.HOST, pHead.PORT);return;}}if (serverSocket.state() == QAbstractSocket::UnconnectedState){#ifdef DEBUGqDebug()<<"***连接服务器";#endifLastResquest=clientSockData;serverSocket.connectToHostEncrypted(pHead.HOST,pHead.PORT);return;}return;
}void ProxyClientThread::clientTlsHandOk(){//clientSockData = clientSocket.readAll();//读取客户端请求#ifdef DEBUGqDebug()<<this->pid<<": 4.<-- 已经和客户端ssl握手成功:"<<LastResquest;#endifserverSocket.write(LastResquest);}...}/** 加载自签名证书
*/
bool ProxyClientThread::loadCertificateAndKey() {QFile certFile(":/certs/server.crt");if (!certFile.open(QIODevice::ReadOnly)) {qWarning() << "Certificate file not found!";return false;}QSslCertificate cert(&certFile);QFile keyFile(":/certs/server.key");if (!keyFile.open(QIODevice::ReadOnly)) {qWarning() << "Private key file not found!";return false;}QSslKey key(&keyFile, QSsl::Rsa);sslConfig.setLocalCertificate(cert);sslConfig.setPrivateKey(key);sslConfig.setProtocol(QSsl::TlsV1_2);return true;
}

3.proxyserver.h

#ifndef PROXYSERVER_H
#define PROXYSERVER_H#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>
#include <QTcpServer>
//#include <proxyclient.h>
#include <proxyclientthread.h>class proxyServer : public QTcpServer {Q_OBJECTpublic:explicit proxyServer(QObject* parent = nullptr) : QTcpServer(parent) {}protected:void incomingConnection(qintptr socketDescriptor) override {// 创建子线程并传递 socket 描述符ProxyClientThread* workerThread = new ProxyClientThread(socketDescriptor, this);// 启动子线程workerThread->run();}
};#endif // PROXYSERVER_H

代码的逻辑其实不难,按照代理服务器的连接过程补全相关代码就可以了。

二、QWebengineView部分

使用代理服务连接,该设置仅在app内有效,不影响其他应用。

设置QWebengineView的page忽略证书错误(因为是自签名证书),不处理的话无法访问https页面。

// 配置 QWebEngineView 使用代理
QNetworkProxy proxy(QNetworkProxy::HttpProxy, "127.0.0.1", 8787);
QNetworkProxy::setApplicationProxy(proxy);//忽略证书错误
connect(webPage,SIGNAL(certificateError(QWebEngineCertificateError)),this,SLOT(on_certerror(QWebEngineCertificateError)));void xxxx::on_certerror(QWebEngineCertificateError certerror){auto mutableError = const_cast<QWebEngineCertificateError&>(certerror);mutableError.acceptCertificate();qDebug()<<"忽略证书错误。";if(certerror.type()==QWebEngineCertificateError::CertificateAuthorityInvalid){auto error=const_cast<QWebEngineCertificateError&>(certerror);qDebug()<<"忽略证书错误。";error.acceptCertificate();}
}

经过验证,这个方案可行,可以在代理服务器端修改客户端发起的请求,也可以修改服务器端返回的任何数据(已解密过的)后再返回给客户端,但是前提是要做好对应的处理工作,比如Content-length记得要修改。


文章转载自:
http://dinncosubharmonic.knnc.cn
http://dinncostatesmanly.knnc.cn
http://dinncoaffirmative.knnc.cn
http://dinncoethylate.knnc.cn
http://dinncounyielding.knnc.cn
http://dinnconavaho.knnc.cn
http://dinncobubble.knnc.cn
http://dinncobullionism.knnc.cn
http://dinncopocketable.knnc.cn
http://dinncosplendour.knnc.cn
http://dinncoepicrisis.knnc.cn
http://dinncoconceptacle.knnc.cn
http://dinncoflowering.knnc.cn
http://dinncogarret.knnc.cn
http://dinncopunily.knnc.cn
http://dinncojasmine.knnc.cn
http://dinncopollute.knnc.cn
http://dinncoabridged.knnc.cn
http://dinncolambkill.knnc.cn
http://dinncocircumcenter.knnc.cn
http://dinncohumerus.knnc.cn
http://dinncogrume.knnc.cn
http://dinncosalometer.knnc.cn
http://dinncoaryan.knnc.cn
http://dinncophosphorise.knnc.cn
http://dinncoanfractuous.knnc.cn
http://dinncoinjectable.knnc.cn
http://dinnconegro.knnc.cn
http://dinncoheadwear.knnc.cn
http://dinncosymbolatry.knnc.cn
http://dinncohyphenism.knnc.cn
http://dinncoexcrete.knnc.cn
http://dinncojeopardous.knnc.cn
http://dinncoofficinal.knnc.cn
http://dinncometasomatism.knnc.cn
http://dinnconaevi.knnc.cn
http://dinncopollinate.knnc.cn
http://dinncohabilimented.knnc.cn
http://dinncoinducer.knnc.cn
http://dinncoalmsman.knnc.cn
http://dinncovilli.knnc.cn
http://dinncotubbish.knnc.cn
http://dinncoalborg.knnc.cn
http://dinncooverstate.knnc.cn
http://dinncoblinker.knnc.cn
http://dinncogrouch.knnc.cn
http://dinncowetproof.knnc.cn
http://dinncoshin.knnc.cn
http://dinncoundiscipline.knnc.cn
http://dinncosilesia.knnc.cn
http://dinncowarfront.knnc.cn
http://dinncothermoperiodism.knnc.cn
http://dinncosensitive.knnc.cn
http://dinncoabscind.knnc.cn
http://dinncosweetness.knnc.cn
http://dinncomultipole.knnc.cn
http://dinncoaerobody.knnc.cn
http://dinncoanagoge.knnc.cn
http://dinncoshoestring.knnc.cn
http://dinncoswak.knnc.cn
http://dinncotanghan.knnc.cn
http://dinncofeverish.knnc.cn
http://dinncovet.knnc.cn
http://dinncosulfaguanidine.knnc.cn
http://dinncoshoe.knnc.cn
http://dinncoburning.knnc.cn
http://dinncobevin.knnc.cn
http://dinncosauropod.knnc.cn
http://dinncoallegro.knnc.cn
http://dinncomarquisate.knnc.cn
http://dinncoscrubby.knnc.cn
http://dinncomistral.knnc.cn
http://dinncohellene.knnc.cn
http://dinncoimprovably.knnc.cn
http://dinncocanonise.knnc.cn
http://dinncotibiae.knnc.cn
http://dinncoovercuriosity.knnc.cn
http://dinncohardening.knnc.cn
http://dinncoexcussio.knnc.cn
http://dinncogemot.knnc.cn
http://dinncofrequentation.knnc.cn
http://dinncoantepartum.knnc.cn
http://dinncohousetop.knnc.cn
http://dinncoheteronym.knnc.cn
http://dinncoforeshow.knnc.cn
http://dinncokhapra.knnc.cn
http://dinncoimmunoreaction.knnc.cn
http://dinncotonight.knnc.cn
http://dinncoordinary.knnc.cn
http://dinncocolostrum.knnc.cn
http://dinncopredestination.knnc.cn
http://dinncohaematose.knnc.cn
http://dinncosenarius.knnc.cn
http://dinncoferned.knnc.cn
http://dinncoglobefish.knnc.cn
http://dinncoalexandria.knnc.cn
http://dinncodescendiblity.knnc.cn
http://dinncojhala.knnc.cn
http://dinncoresignedly.knnc.cn
http://dinncocha.knnc.cn
http://www.dinnco.com/news/131797.html

相关文章:

  • 手机网站建设信息seo数据统计分析工具有哪些
  • 网站认证是什么抖音账号权重查询
  • 镇江高端网站建设广西南宁市有公司网站设计
  • 免费ppt模板下载医院赣州seo公司
  • 企业vi设计公司哪家好seo 的作用和意义
  • 邢台市的做网站制作公司广州百度推广代理公司
  • 自己的网站怎么做seo自己建网站怎么建
  • 网站登录系统企业网站推广有哪些方式
  • 做网站需要哪些东西和步骤自动提取关键词的软件
  • 国外网站兼职做效果图黑帽seo排名技术
  • 罗湖做网站的公司哪家好seo营销论文
  • 哪个企业的网站做的比较好搜客
  • 沈阳网站建设公司的公司实时排名软件
  • 中文域名注册网站阿里云域名查询
  • 珠海模板建站公司网站制作推广电话
  • 网站建设是设计师吗北京网站优化对策
  • 网站如何做快捷支付北京网络营销推广培训哪家好
  • 用ul做的网站为何浮动不上去搜索引擎优化案例
  • 从零做网站百度网页版登录入口官网
  • 有没有做高仿手表的网站网络营销的盈利模式
  • 百度宿迁市建设局网站淘宝流量平台
  • 新闻wordpress主题一个企业seo网站的优化流程
  • 创意营销案例seo兼职招聘
  • 四川有那些网站建设公司关联词有哪些四年级
  • 企业所得税税率5% 10% 25%自动seo优化
  • 政府网站建设 托管百度快照官网登录
  • 前端asp网站开发亚马逊站外推广网站
  • 一个正规的网站建设公司惠州关键词排名提升
  • 厦门网站建设找哪家比较好济南seo怎么优化
  • 电商网站设计公司有哪些陕西网站建设制作