В настоящее время я пытаюсь сделать что-то похожее на PSExec, но полностью на Java.Я думаю, что моя проблема напрямую не связана с тем, что я делаю, но как.В настоящее время я пытаюсь реализовать создание и запуск службы удаленно.
Для этого я взял в руки инструмент midlc (версия 0.6.1) и расширил svcctl.idl с помощью вызовов CreateService и DeleteService.После этого я использовал midlc для генерации кода для использования с jcifs (-t jcifs).Затем я создал тестовую программу для использования этого класса и jcifs для связи с удаленной машиной Windows.
Вот код для этого:
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_ERRORnca_proto_error alias 0x1c01000b
Итак, мой простой вопрос: что я делаю не так?
Крис