Man In the Middle Proxy Server
-
کسی با کیو اس اس ال ساکت کار کرده اینجا؟
-
p{direction:rtl; text-align: right}. مشکلت چیه؟
-
ye prxy server benvisam, to brosweram proxy ro set mikonam, ama darkhasti ke browser mide ro nemitoonam az tarighe serveram begiram ... codeesh ham injast
Server.h
@ #ifndef SERVER_H
#define SERVER_H#include <QTcpServer> #include <QSslSocket> #include <QSslKey> #include <QDebug> #include <QAbstractSocket> class Server : public QTcpServer { Q_OBJECT public: explicit Server(QObject *parent = 0); signals: public slots: private slots: void sltEncrypted(); void sltReadFromClient(); void sltSslErrors(QList<QSslError> errList); void sltSslModeChanged(QSslSocket::SslMode); void sltStateChanged(QAbstractSocket::SocketState); void sltSocketError(QAbstractSocket::SocketError); protected: void incomingConnection(int socketDescriptor); }; #endif // SERVER_H
@
Server.cpp
@ #include "server.h"
Server::Server(QObject *parent) : QTcpServer(parent) { this->listen(QHostAddress::Any,3555); if(this->isListening()) { qDebug()<<"Is listening to port 3555"; }else{ qDebug()<<"Listen nemikone"; } qDebug()<<"___________________________________________________"; qDebug()<<"___________________________________________________"; } //************************************************************************************************ void Server::incomingConnection(int socketDescriptor) { QSslSocket *mySslSocket = new QSslSocket(this); if(mySslSocket->setSocketDescriptor(socketDescriptor)) { connect(mySslSocket,SIGNAL(encrypted()),this,SLOT(sltEncrypted())); connect(mySslSocket,SIGNAL(readyRead()),this,SLOT(sltReadFromClient())); connect(mySslSocket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sltSslErrors(QList<QSslError>))); connect( mySslSocket, SIGNAL(modeChanged(QSslSocket::SslMode)), this,SLOT(sltSslModeChanged(QSslSocket::SslMode))); connect( mySslSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(sltStateChanged(QAbstractSocket::SocketState))); connect(mySslSocket,SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(sltSocketError(QAbstractSocket::SocketError))); }else{ delete mySslSocket; } mySslSocket->setLocalCertificate("D://server.pem",QSsl::Pem); mySslSocket->setPrivateKey("D://server.pem",QSsl::Rsa,QSsl::Pem); if(mySslSocket->localCertificate().isNull()) { qDebug()<<"localCertificate is null"; }else{ qDebug()<<"localCertificate is Ok"; } if(mySslSocket->privateKey().isNull()) { qDebug()<<"PrivateKey is null"; } else{ qDebug()<<"PrivateKey is Ok"; } mySslSocket->startServerEncryption(); } //*************************************************************************************************** void Server::sltEncrypted() { qDebug()<<"........................encrypted........................."; //some code } //*************************************************************************************************** void Server::sltReadFromClient() { qDebug()<<"read from client"; // some code } //*************************************************************************************************** void Server::sltSslErrors(QList<QSslError> errList) { qDebug() << "MySslServer::sslErrors("; foreach( QSslError err, errList ) qDebug() << " " << err.errorString(); qDebug() << ")"; } //*************************************************************************************************** void Server::sltSslModeChanged(QSslSocket::SslMode mode) { qDebug() << "MySslServer::sslModeChanged(" << (int)mode << ")"; } //**************************************************************************************************** void Server::sltSocketError(QAbstractSocket::SocketError socketErr) { qDebug() << "MySslServer::SocketErrors(" <<(int)socketErr << ")"; } //**************************************************************************************************** void Server::sltStateChanged(QAbstractSocket::SocketState state) { qDebug() << "MySslServer::stateChanged(" << (int)state << ")"; }@
main.cpp
@ #include <QtCore/QCoreApplication>
#include "server.h"int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Server myServer; return a.exec(); }@
vaghty az browseram darkhast mifrestam ba in SocketError movajeh mishamo socket close mishe.
output :
QAbstractSocket::SslHandshakeFailedError 13
The SSL/TLS handshake failed, so the connection was closed -
moshkel too hanshake beine browser va ssl sockete proxy servere.... ama nemidoonam chejoori bayad rafesh konam
-
p{direction: rtl; text-align: right}. کدت طولانیه نمی خونم ولی برای اینکه مطمئن بشی مشکل در handshake یا نه چک کن ببین همین کد با QTcpSocket کار میکنه؟
دوم اینکه QSslSocket مثل QTcpSocket عمل میکنه ولی برای راه اندازی اون فانکشن های زیر کلیدی هستند.@
ssl.setLocalCertificate(".crt file");
ssl.setPrivateKey(".key file");ssl.startServerEncryption();
ssl.waitForEncrypted();
@p{direction: rtl; text-align: right}. مطمئن شو که از فانکشن های بالا به ترتیب استفاده کرده باشی.
p{direction: rtl; text-align: right}. یک خواهش از دوستان: لطفا وقتی از شما درخواست کد میشه، فقط همون قطعه کدی که باید بررسی بشه رو بگذارید تا قابل فهم باشه.
-
Inaro ke dooste aziz too helpe QSslSocket ham neveshte.
moshkele Cipher List bood. Bayad Cipher List set beshe.
Moshkel ham daghighan hamin jast ke shoma code man ro nakhoonde nazar dadi. Man hamoon ghesmat haye ro gozashtam ke niaze. ta kasi ke mikhoone motavajeh she ke che chizi miss shode.
shoma ham age code ro mikhoondi mtevajeh mishodi ke
bq. ssl.setLocalCertificate(".crt file");
ssl.setPrivateKey(".key file");in karo too codam kardam..
-
p{direction:rtl; text-align: right}. Cypherlist رو در صورتی نیاز دارین که بخواین امنیت ارتباط SSL تضمین شده باشه. یعنی اینکه لایسنس شما هیچ خطایی نداشته باشه. در حالت عادی از سمت client با صدا کردن
@
tcp->ignoreSslErrors();
tcp->connectToHostEncrypted("IP", PORT);
@p{direction:rtl; text-align: right}. میتونین از خطاها چشم پوشی کنین و ارتباط به هر شکلی که باشه برقرار میشه