【问题标题】:Trying to setup a proxy via a c++ program. Doesn't work尝试通过 c++ 程序设置代理。不工作
【发布时间】:2018-11-20 23:18:41
【问题描述】:

我正在尝试通过 c++ 程序设置代理,但它不起作用。 该程序本身运行良好,但实际上,它没有设置任何内容。

这是代码:

#include <iostream>
#include <windows.h>
#include <string>
using namespace std;

void newproxy();

int main (){

    int ch = 0;

    cout << "Select the option:\n\n\t(1)Set a NEW proxy\n\t(2)View the current proxy settings\n\t(3)Clear ALL proxy settings\n\t(4)Exit\n\n\t";
    cin >> ch;
    cin.ignore();
    switch (ch){

        case 1 :
            system("cls");
            newproxy();
            break;

        case 2 :
            system("cls");
            system("netsh winhttp show proxy");
            system("pause");
            system("cls");
            main();
            break;

        case 3 :
            system("cls");
            system("netsh winhttp reset proxy");
            system("cls");
            cout << "ALL proxy settings cleared\n\n";
            main();
            break;

        case 4 :
            return 0;
            break;

    }
}

void newproxy(){

    string ip;
    string port;
    int ch = 0;

    cout << "Insert ip: ";
    getline (cin, ip);
    cout << "Inster port: ";
    getline(cin, port);
    cout << "\nAre those the correct ip and port? " << ip << ":" << port << "\n\n\t(1)Yes (2)No (3)Abort\n\n\t";
    cin >> ch;
    cin.ignore();
    switch (ch){

        case 1 :
            break;

        case 2 :
            system("cls");
            newproxy();
            break;

        case 3 : 
            system("cls");
            main();
            break;

    }
    system(("netsh winhttp set proxy proxy-server="+ip+":"+port).c_str());
    system("cls");
    cout << "Proxy succesfully setted\n\n";
    main();
}

当我设置一个新代理时,即使我重新启动程序,程序实际上也会看到并显示它,但实际上什么也没做。如果我打开浏览器并搜索“我的 IP”,它会显示与我在 Windows 设置中设置时不同的相同公共 IP。

有人可以帮助我吗? 是代码有问题还是其他问题?

谢谢。

【问题讨论】:

  • 无关:mainnewproxy 调用 main。不要打电话给main。只有运行时应该调用main。如果一个程序调用main你得到Undefined Behaviour(UB),UB可以做任何事情。有时你会得到你想要的。有时你没有。有时你这样做,直到突然你不这样做。 UB是程序中可能发生的绝对最糟糕的事情。不惜一切代价避免它。而是将菜单代码分离到自己的函数中并调用菜单函数。
  • @user4581301 我什至没有注意到这一点。好电话。
  • system 必须支持从裸机嵌入式系统开始的大量可能目标。不保证提供任何有用的反馈。您的程序使用它发出的命令可能会非常失败并且无法知道。幸运的是,您使用的是 Windows,我很确定 system 在我使用的每个针对 Windows 的工具链上都会返回程序的退出代码。检查返回码以确保命令有效。如果您没有得到有效的返回码,请尝试使用ShellExecuteShellExecuteEx,Windows 系统调用可能会提供更多详细信息。

标签: c++ windows proxy netsh


【解决方案1】:
 system((std::string("netsh winhttp set proxy ") + ip +":" + port).c_str());

你几乎拥有它。

要使用 Netsh.exe 工具配置代理服务器,请按以下步骤操作:

单击开始,单击运行,键入 cmd,然后单击确定。

在命令提示符下,键入 netsh winhttp set proxy proxyservername:portnumber,然后按 Enter。

祝你好运。

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 2014-03-13
    • 2021-10-02
    • 2015-12-23
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多