diff --git a/vpn/client/DapCmdHandlers/DapCmdConnect.cpp b/vpn/client/DapCmdHandlers/DapCmdConnect.cpp
index fe9b4ffd0ac246df7614f06661d5d439679b2bbe..35120d8788aa7d6473f8239b36b289f4dee7903a 100644
--- a/vpn/client/DapCmdHandlers/DapCmdConnect.cpp
+++ b/vpn/client/DapCmdHandlers/DapCmdConnect.cpp
@@ -71,7 +71,9 @@ void DapCmdConnect::handle(const QJsonObject* params)
     QMap<QString, QJsonValue> mandatoryConnParams = {
         {ADDRESS_KEY, params->value(ADDRESS_KEY)},
         {PORT_KEY, params->value(PORT_KEY)},
-        {UPDATE_ROUTE_TABLE, params->value(UPDATE_ROUTE_TABLE)}
+        {UPDATE_ROUTE_TABLE, params->value(UPDATE_ROUTE_TABLE)},
+        {RUN_SCRIPT_PATH, params->value(RUN_SCRIPT_PATH)},
+        {RUN_SCRIPT_AFTER_CONNECT, params->value(RUN_SCRIPT_AFTER_CONNECT)}
     };
 
     if (!mandatoryConnParams[ADDRESS_KEY].isString() || !mandatoryConnParams[PORT_KEY].isDouble()) {
@@ -93,6 +95,13 @@ void DapCmdConnect::handle(const QJsonObject* params)
     uint16_t port = uint16_t(mandatoryConnParams[PORT_KEY].toInt());
     QString address = mandatoryConnParams[ADDRESS_KEY].toString();
 
+    QString runScriptPath = mandatoryConnParams[RUN_SCRIPT_PATH].toString();
+
+    if (!runScriptPath.isEmpty()){
+        bool runAfterConnect = mandatoryConnParams[RUN_SCRIPT_AFTER_CONNECT].toBool(true);
+        emit sigSetRunScript(runScriptPath, runAfterConnect);
+    }
+
     qDebug() << "Address:" << address << ", Port:" << port << ", UpdateRouteTable:" << updateRouteTable;
     qDebug() << "SerialKey:" << (serialKey.isEmpty() ? "No serial key provided" : "Serial key provided");
 
diff --git a/vpn/client/DapCmdHandlers/DapCmdConnect.h b/vpn/client/DapCmdHandlers/DapCmdConnect.h
index 7786d0f50e589511a4e1baa569d9ff9ed5b68346..1d8bac67d60f5b43a5ce8c18606ed5e2b19c8553 100644
--- a/vpn/client/DapCmdHandlers/DapCmdConnect.h
+++ b/vpn/client/DapCmdHandlers/DapCmdConnect.h
@@ -24,6 +24,7 @@ signals:
     void sigConnectNoAuth(const QString& address, uint16_t port);
     void sigDisconnect();
     void sigRestartService(bool if_runnning);
+    void sigSetRunScript(const QString& runScriptPath, bool runAfterConnect);
 
 private:
     const QString ACTION_KEY = "action";
@@ -33,6 +34,8 @@ private:
     const QString ADDRESS_KEY = "address";
     const QString PORT_KEY = "port";
     const QString UPDATE_ROUTE_TABLE = "updateRouteTable";
+    const QString RUN_SCRIPT_PATH = "run_script_path";
+    const QString RUN_SCRIPT_AFTER_CONNECT = "run_script_after_connect";
 
     const QString CODE_KEY = "code";
     const QString MESSAGE_KEY = "message";
diff --git a/vpn/qml/handlers/DapCmdConnect.cpp b/vpn/qml/handlers/DapCmdConnect.cpp
index 3da24dc601341b1e1837ad77be67e2770df27406..56aabea35e365fb5b87a3d7bce32824ed16cfb27 100644
--- a/vpn/qml/handlers/DapCmdConnect.cpp
+++ b/vpn/qml/handlers/DapCmdConnect.cpp
@@ -7,7 +7,8 @@ DapCmdConnect::DapCmdConnect(QObject *parent)
 }
 
 void DapCmdConnect::sendCmdConnect(const QString& a_addr, quint16 a_port,
-                                   const QString& a_user, const QString& a_pswd,  const QString& a_serial, const bool a_updateRouteTable)
+                                   const QString& a_user, const QString& a_pswd,  const QString& a_serial, const bool a_updateRouteTable,
+                                   const QString& a_runScriptPath, const bool a_runAfterConnect)
 {
     QJsonObject obj;
     obj["action"] = "Connect";
@@ -20,7 +21,10 @@ void DapCmdConnect::sendCmdConnect(const QString& a_addr, quint16 a_port,
         obj["password"] = a_pswd;
     if ( !a_serial.isEmpty() )
         obj["serial"] = QString(a_serial).remove('-');
-    obj["port"] = a_port;
+    if ( !a_runScriptPath.isEmpty() ) {
+        obj["run_script_path"] = QString(a_runScriptPath);
+        obj["run_script_after_connect"] = a_runAfterConnect;
+    }
 
     sendCmd(&obj);
 }
diff --git a/vpn/qml/handlers/DapCmdConnect.h b/vpn/qml/handlers/DapCmdConnect.h
index 552bd94a6c1a0117df1e0dc04022c34379d2f764..aa873fea639f887296ac2fa893377703e070577d 100644
--- a/vpn/qml/handlers/DapCmdConnect.h
+++ b/vpn/qml/handlers/DapCmdConnect.h
@@ -11,8 +11,9 @@ public:
     explicit DapCmdConnect(QObject *parent = nullptr);
 
 public slots:
-    void sendCmdConnect(const QString& a_addr, quint16 a_port,
-                        const QString& a_user= QString(), const QString& a_pswd = QString(),  const QString& a_serial= QString(), const bool a_updateRouteTable = true);
+    void sendCmdConnect(const QString& a_addr, quint16 a_port, const QString& a_user = QString(), const QString& a_pswd = QString(),
+                        const QString& a_serial = QString(), const bool a_updateRouteTable = true,
+                        const QString& a_runScriptPath = QString(), const bool a_runAfterConnect = false);
     void sendCmdConnectByOrder(const QString& a_addr);