【问题标题】:C# pass password via StandardInput of ProcessC# 通过 Process 的 StandardInput 传递密码
【发布时间】:2017-03-18 13:29:56
【问题描述】:

下一个 C# 方法调用 rasdial VPN-Name name ** 表示从键盘输入密码。但我想将密码从 C# 应用程序传递给进程。

  public bool connect(UserCredentials userCredentials)
  {
    // "Dial" to VPN
    var psi = new ProcessStartInfo("rasdial")//("cmd")
    {
      RedirectStandardInput = true,
      RedirectStandardOutput = true,
      RedirectStandardError = true,
      //CreateNoWindow = true,
      UseShellExecute = false,  // Unusable if Streams redirected
      Arguments = $"{InterfaceName} {userCredentials.name} *"
    };

    var proc = new Process {
      StartInfo = psi
      //,EnableRaisingEvents = true
    };
    proc.Start();

    // PASS PASSWORD VIA STDIN. Does not work. Keyboard input FORCED!
    //proc.WaitForInputIdle();
    proc.StandardInput.WriteLine(userCredentials.pass);

    proc.WaitForExit();

    return true;// proc.ExitCode == 0;  // Can throws "Not exited yet"
  }

有没有办法将密码传递给rasdial

我可以调用rasdial VPN-Name login passwd这种方法缺乏安全性。已弃用任何男生都可以监控进程的参数。

【问题讨论】:

    标签: c# process passwords stdin


    【解决方案1】:

    一种解决方法

    static Process runProcRasdial()
    {
        ProcessStartInfo psi = new ProcessStartInfo("cmd") {
            RedirectStandardInput=true,
            RedirectStandardOutput=false,
            UseShellExecute=false
        };
        var proc = new Process(){
            StartInfo = psi,
            EnableRaisingEvents = true,
        };
        proc.Start();
        proc.StandardInput.WriteLine("rasdial rapa /disconnect");
        proc.StandardInput.WriteLine("rasdial rapa Ivan paswd!");
        //proc.Exited += Proc_Exited1;
        proc.StandardInput.WriteLine("exit");
        proc.WaitForExit();
        return proc;
    }
    

    如果将 paswd! 打包到 SecureString 如果看起来像正常的东西。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      相关资源
      最近更新 更多