跨网络命名管道给出“用户名或密码不正确”

Posted

技术标签:

【中文标题】跨网络命名管道给出“用户名或密码不正确”【英文标题】:Named Pipes Across Network Gives "The user name or password is incorrect" 【发布时间】:2017-06-11 07:55:07 【问题描述】:

致任何可以提供帮助的人!我一直在尝试让一个 c# 应用程序在两台 pc 之间的网络上谈论命名管道。这些应用程序可以在同一台电脑和同一域内的电脑上完美运行。但是当一台电脑在“工作组”中而另一台电脑在域中时,我会遇到问题。服务器上的安全不是问题,我可以让它尽可能的开放。

背景信息:

    客户端 - PC 在域中,可以通过 c$ 管理共享连接到服务器 服务器 - 不在域中,应用程序作为控制台运行,防火墙禁用,启用“允许入站文件和打印机共享”端口 445。

似乎我无法访问远程服务器上的任何命名管道。代码:

// Client Connection
PipeStream pipe = new NamedPipeClientStream("192.168.1.102", "TEMP_PIPE", PipeDirection.InOut, PipeOptions.Asynchronous, TokenImpersonationLevel.None);
((NamedPipeClientStream)pipe).Connect();


// Server Connection
PipeSecurity pipeSecurity = new PipeSecurity();
pipeSecurity.AddAccessRule(new PipeAccessRule("Everyone", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow));
PipeStream pipe = new NamedPipeServerStream("TEMP_PIPE", PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message,
                PipeOptions.Asynchronous, 0, 0, pipeSecurity);

当我尝试从客户端 Connect() 连接到服务器时,我收到“用户名或密码不正确”。错误。

我卡住了,不确定这是 C# .Net 命名管道问题还是 Windows 问题?我倾向于相信我需要在 Windows 中以某种方式启用命名管道,但不确定如何(因为用户名/密码错误)。任何帮助是极大的赞赏。提前致谢!

【问题讨论】:

【参考方案1】:

我最近遇到了同样的问题,在我的桌面上一切正常,但当我尝试与平板电脑“交谈”时却失败了。我找到了这篇文章:

https://www.ca.com/us/services-support/ca-support/ca-support-online/knowledge-base-articles.tec385226.html

对 IPC$ 的访问被拒绝。 (尤其不是身份验证代理的管道,而是 IPC 资源本身。)如果您的客户端尝试连接到不在客户端 Windows 域中的服务器,这是预期的。

我通过将我的(以前出现故障的平板电脑)直接物理连接到我的网络(即不是无线连接)对此进行了测试。应用程序正常工作,命名管道按预期响应。

一些注意事项:我所有的系统都在最新的 Windows 10 Pro 版本上(带有最近补丁的创建者更新。)所有系统都具有启用命名管道激活的 4.7 框架。此外,使用 64 位系统与 32 位平板电脑通信的测试仍然失败(无论物理连接与否,都会出现相同的错误)。 64 位到 64 位可以正常工作。

事实证明,一旦我将平板电脑物理连接到网络一次,就必须启用某些设置。现在我可以无线使用平板电脑并且命名管道正常运行。

我不是这方面的专家,所以我不确定接下来的步骤,但我想我会分享我的发现(经过大量测试和更新)。

希望这会有所帮助!

【讨论】:

以上是关于跨网络命名管道给出“用户名或密码不正确”的主要内容,如果未能解决你的问题,请参考以下文章

C#的命名管道(named pipe)

从命名管道读取不会给出任何输出并无限期地阻塞代码

进程之间的通信-命名管道通信

Windows进程间通信—命名管道

windows命名管道

windows命名管道