从不在域中的计算机访问共享文件夹
Posted
技术标签:
【中文标题】从不在域中的计算机访问共享文件夹【英文标题】:Access a shared folder from a machine not in the domain 【发布时间】:2010-04-29 10:21:49 【问题描述】:我正在用c#编写一个应用程序,它使用远程连接到其他机器,并在每台机器上植入一个可执行文件然后执行它。每台机器在本地创建一个专用的共享文件夹,然后异步尝试写入其他机器的共享文件夹。
问题是当一台机器尝试写入另一台机器的共享文件夹时(如果它们不在同一个域中),它会失败。如果我尝试从一台机器手动访问另一台机器的共享文件夹,系统会提示我输入凭据,即使我可以看到共享文件夹为所有人提供了完全权限。
有人知道如何解决这个问题吗?
谢谢!
【问题讨论】:
你的用户是什么?不要认为你可以成为本地系统或本地服务。 【参考方案1】:您可以通过 P/Invoke 使用 LogonUser API 来实现这一点,但您需要一些机制来获取用户密码(用户的键盘是一个很好的方法;))
DllImport("advapi32.dll", SetLastError=true)]
static extern bool LogonUser(
string principal,
string authority,
string password,
LogonTypes logonType,
LogonProviders logonProvider,
out IntPtr token);
void login()
bool result = LogonUser(
"Alice", "ACME", // "ACME\Alice"
pwd,
LogonTypes.Batch,
LogonProviders.Default,
out token);
if (result)
//off you go
【讨论】:
这就是问题所在,我无法获取用户凭据,这就是我使用共享文件夹的原因,所以我不需要它。谢谢。 您无法访问共享文件夹而不对其进行身份验证?安全隐患是巨大的!您唯一的其他选择是让您的网络管理员允许访客访问共享,但这有点疯狂..以上是关于从不在域中的计算机访问共享文件夹的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JCIFS 将文件从 SMB 共享复制到不在域中的本地驱动器