Java 使用JCIFS与远程Windows实例通信时获取nca_proto_error/DCERPC_FAULT_proto_error
我目前正在尝试做一些类似于PSExec的事情,但完全是用Java实现的。 我认为我的问题与我正在做什么没有直接关系,而是如何做。 目前,我正在尝试实现远程创建和启动服务 为此,我使用了midlc工具(版本0.6.1),并使用CreateService和DeleteService调用扩展了svcctl.idl。之后,我使用midlc生成代码,用于jcifs(-t jcifs)。然后,我创建了一个测试程序,使用该类和jcifs与远程windows计算机通信 下面是代码:Java 使用JCIFS与远程Windows实例通信时获取nca_proto_error/DCERPC_FAULT_proto_error,java,rpc,psexec,jcifs,Java,Rpc,Psexec,Jcifs,我目前正在尝试做一些类似于PSExec的事情,但完全是用Java实现的。 我认为我的问题与我正在做什么没有直接关系,而是如何做。 目前,我正在尝试实现远程创建和启动服务 为此,我使用了midlc工具(版本0.6.1),并使用CreateService和DeleteService调用扩展了svcctl.idl。之后,我使用midlc生成代码,用于jcifs(-t jcifs)。然后,我创建了一个测试程序,使用该类和jcifs与远程windows计算机通信 下面是代码: rpc.po
rpc.policy_handle scHandle = new rpc.policy_handle();
SvcCtl.OpenSCManager openSCManagerRpc = new SvcCtl.OpenSCManager(host, null, 0x0001 | 0x0002, scHandle);
// Connection-oriented DCE/RPC over SMB named pipes.
DcerpcHandle handle = DcerpcHandle.getHandle("ncacn_np:" + host + "[\\PIPE\\svcctl]",
ConcurrentNtlmAuthenticator.getInstance().getNtlmPasswordAuthentication());
try {
handle.sendrecv(openSCManagerRpc);
if (openSCManagerRpc.retval != 0) {
throw new SmbException(openSCManagerRpc.retval, true);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
handle.close();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
不幸的是,我得到了一个DCERPC_FAULT_PROTO_错误别名nca_PROTO_错误别名0x1c01000b
所以我的简单问题是。。。我做错了什么
克里斯好的
我解决了这个问题。问题是,请求类型未初始化,因此设置为-1,这不是有效值。通过手动设置,我能够实际执行我尝试执行的任务:
克里斯