Select random management port

This commit is contained in:
pokamest 2022-08-29 02:58:23 +03:00
parent 211f7b7965
commit 3316b73ab6
2 changed files with 24 additions and 2 deletions

View file

@ -2,6 +2,8 @@
#include <QFileInfo> #include <QFileInfo>
#include <QProcess> #include <QProcess>
#include <QTcpSocket> #include <QTcpSocket>
#include <QTcpServer>
#include <QRandomGenerator>
#include "debug.h" #include "debug.h"
#include "defines.h" #include "defines.h"
@ -121,6 +123,21 @@ void OpenVpnProtocol::sendManagementCommand(const QString& command)
} }
} }
uint OpenVpnProtocol::selectMgmtPort()
{
for (int i = 0; i < 100; ++i) {
quint32 port = QRandomGenerator::global()->generate();
port = (double)(65000-15001) * port / UINT32_MAX + 15001;
QTcpServer s;
bool ok = s.listen(QHostAddress::LocalHost, port);
if (ok) return port;
}
return m_managementPort;
}
void OpenVpnProtocol::updateRouteGateway(QString line) void OpenVpnProtocol::updateRouteGateway(QString line)
{ {
// TODO: fix for macos // TODO: fix for macos
@ -150,7 +167,10 @@ ErrorCode OpenVpnProtocol::start()
// QString vpnLogFileNamePath = Utils::systemLogPath() + "/openvpn.log"; // QString vpnLogFileNamePath = Utils::systemLogPath() + "/openvpn.log";
// Utils::createEmptyFile(vpnLogFileNamePath); // Utils::createEmptyFile(vpnLogFileNamePath);
if (!m_managementServer.start(m_managementHost, m_managementPort)) { uint mgmtPort = selectMgmtPort();
qDebug() << "OpenVpnProtocol::start mgmt port selected:" << mgmtPort;
if (!m_managementServer.start(m_managementHost, mgmtPort)) {
setLastError(ErrorCode::OpenVpnManagementServerError); setLastError(ErrorCode::OpenVpnManagementServerError);
return lastError(); return lastError();
} }
@ -173,7 +193,7 @@ ErrorCode OpenVpnProtocol::start()
} }
m_openVpnProcess->setProgram(PermittedProcess::OpenVPN); m_openVpnProcess->setProgram(PermittedProcess::OpenVPN);
QStringList arguments({"--config" , configPath(), QStringList arguments({"--config" , configPath(),
"--management", m_managementHost, QString::number(m_managementPort), "--management", m_managementHost, QString::number(mgmtPort),
"--management-client"/*, "--log", vpnLogFileNamePath */ "--management-client"/*, "--log", vpnLogFileNamePath */
}); });
m_openVpnProcess->setArguments(arguments); m_openVpnProcess->setArguments(arguments);

View file

@ -46,6 +46,8 @@ private:
QString m_configFileName; QString m_configFileName;
QTemporaryFile m_configFile; QTemporaryFile m_configFile;
uint selectMgmtPort();
private: private:
void updateRouteGateway(QString line); void updateRouteGateway(QString line);
void updateVpnGateway(const QString &line); void updateVpnGateway(const QString &line);