java远程执行windows命令

时间:2022-06-23 04:53:48
需要在java应用系统中远程调用windows平台上的命令,并接收返回信息,怎么实现呢?

注:跟黑客无关

windows平台与java应用系统在同一局域网内,windows平台上不允许安装任何其他软件(允许开启必要的windows服务)
在java应用系统中需要调用windows的命令,比如说查看windows下的硬盘大小,并返回到应用系统中。

怎么实现,高分求助!

29 个解决方案

#1


可以通过IPC$来连接你的windows系统并执行命令。

#2


我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。

#3


最新消息,有人建议我用WMI实现,但具体方法不详
大家再讨论一下?

#4


楼上的楼上,python脚本调用有两个问题:
1、是不是要再搭建一个python的运行环境?
2、python脚本的返回值怎么取呢

#5


引用 4 楼 realzxs 的回复:
楼上的楼上,python脚本调用有两个问题:
1、是不是要再搭建一个python的运行环境?
2、python脚本的返回值怎么取呢


用jython就可以,python的java实现

#6


package com.dos;

public class DosTest{

public static void main(String [] args){
try{
Process process=Runtime.getRuntime().exec("p.exe");
process.waitFor();
System.out.println("DOS Sucess");
}catch(Exception e){
e.printStackTrace();
}

}




这个还要用到网络程序,自己想下吧..

#7


楼上的兄弟,看你的代码,似乎是调用本地的一个exe文件?
如果是在linux平台那应该就不行了吧?

#8


楼主也只要求Windows而已


如果只是在Windows上,你可以去微软网站下载一个psexec这个exe下来,然后你可以通过这个exe要求远程的机器执行相关的命令并得到返回结果。

psexec.exe \\hostname -u administrator -p password ipconfig


这样你在Java中直接运行上述命令就可以了。

#9


Java中就可以Process process=Runtime.getRuntime().exec(cmd); 并process.getInputStream来得到返回结果

#10


引用 2 楼 herowach 的回复:
我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。


不知道这个python脚本是怎么运行呢?
能不能在详细一点信息?

#11


引用 8 楼 ChDw 的回复:
楼主也只要求Windows而已 


如果只是在Windows上,你可以去微软网站下载一个psexec这个exe下来,然后你可以通过这个exe要求远程的机器执行相关的命令并得到返回结果。 

psexec.exe \\hostname -u administrator -p password ipconfig 


这样你在Java中直接运行上述命令就可以了。

不好意思啊,没写清楚,java系统是装在linux下的

#12


引用 10 楼 realzxs 的回复:
引用 2 楼 herowach 的回复:
我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。 
 

不知道这个python脚本是怎么运行呢? 
能不能在详细一点信息?


因为这块不是我做的,我只是看到了这个功能,所以具体PY怎么实现的我也不知道,但PY是可以给JAVA返回信息的,访问远程机器成功与否的信息是会返回到JAVA端的,JAVA还要将这个信息显示到界面告诉用户呢

#13


这块属于设备控制,被控制端应该不需要装PY的运行环境,但服务端肯定是要装的

#14


虽然还是没好答案,但可能给俺指明了方向
先谢一个

#15


引用 12 楼 herowach 的回复:
引用 10 楼 realzxs 的回复:
引用 2 楼 herowach 的回复: 
我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。 


不知道这个python脚本是怎么运行呢? 
能不能在详细一点信息? 
 

因为这块不是我做的,我只是看到了这个功能,所以具体PY怎么实现的我也不知道,但PY是可以给JAV…

再问一句,你们的python是安装在windows还是linux?

#16


如果是linux,不知道是否需要什么针对windows的包

#17


如何可以的话在windows系统中开启telnet服务,并通过java的socket连接并执行系统命令。也就是说需要用java实现telnet的客户端,实现应该不难。

#18


使用WMI理论上也是可行的 只是使用java通过WMI来实现还没研究过

#19


我们的系统是支持WIN和LINUX的,两种系统有没有分开处理就不知道了,但安装包是一个通用的

#20


如果只是在Windows上,你可以去微软网站下载一个psexec这个exe下来,然后你可以通过这个exe要求远程的机器执行相关的命令并得到返回结果。

psexec.exe \\hostname -u administrator -p password ipconfig


这样你在Java中直接运行上述命令就可以了。

#21


现在的困难是被监控的windows主机不允许开启telnet(基本来说,就只能用WMI了)
监控程序肯定是运行在linux平台上

#22


使用telnet的方法基本已经实现,不过这是针对被监控的unix平台的(unix的telnet一般是都需要开启的),但是windows平台一般的习惯是不能开telnet,所以才要针对windows的默认服务来进行通讯。
难啊

#23


使用telnet的方法基本已经实现,不过这是针对被监控的unix平台的(unix的telnet一般是都需要开启的),但是windows平台一般的习惯是不能开telnet,所以才要针对windows的默认服务来进行通讯。
难啊

#24


在linux下有个samba服务 可以和windows进行通讯。通讯是通过连接windows的ipc$来实现的,smbclient这个工具可以显示与windows的通讯,你可以用java来实现。

#25


标记一下

#26


Process process=Runtime.getRuntime().exec("p.exe"); 
process.getInputStream就得到返回结果,但有的外部命令就返回不了,建议在调用后把结果写在指定文件了,再读取文件就OK了!

#27


引用 26 楼 mingzhangming 的回复:
Process process=Runtime.getRuntime().exec("p.exe"); 
process.getInputStream就得到返回结果,但有的外部命令就返回不了,建议在调用后把结果写在指定文件了,再读取文件就OK了!

很感谢这位的回帖,不过这很明显需要调用exe文件,也就是windows平台的
我需要是在linux平台下的
其实windows平台下有很好的解决方案(com4j)

#28


引用 24 楼 zyflys 的回复:
在linux下有个samba服务 可以和windows进行通讯。通讯是通过连接windows的ipc$来实现的,smbclient这个工具可以显示与windows的通讯,你可以用java来实现。

多谢提醒,不过暂时没空搞这个了
等我抽空验证一下,再散分

#29


LZ兄弟找到解决方法了吗?

#1


可以通过IPC$来连接你的windows系统并执行命令。

#2


我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。

#3


最新消息,有人建议我用WMI实现,但具体方法不详
大家再讨论一下?

#4


楼上的楼上,python脚本调用有两个问题:
1、是不是要再搭建一个python的运行环境?
2、python脚本的返回值怎么取呢

#5


引用 4 楼 realzxs 的回复:
楼上的楼上,python脚本调用有两个问题:
1、是不是要再搭建一个python的运行环境?
2、python脚本的返回值怎么取呢


用jython就可以,python的java实现

#6


package com.dos;

public class DosTest{

public static void main(String [] args){
try{
Process process=Runtime.getRuntime().exec("p.exe");
process.waitFor();
System.out.println("DOS Sucess");
}catch(Exception e){
e.printStackTrace();
}

}




这个还要用到网络程序,自己想下吧..

#7


楼上的兄弟,看你的代码,似乎是调用本地的一个exe文件?
如果是在linux平台那应该就不行了吧?

#8


楼主也只要求Windows而已


如果只是在Windows上,你可以去微软网站下载一个psexec这个exe下来,然后你可以通过这个exe要求远程的机器执行相关的命令并得到返回结果。

psexec.exe \\hostname -u administrator -p password ipconfig


这样你在Java中直接运行上述命令就可以了。

#9


Java中就可以Process process=Runtime.getRuntime().exec(cmd); 并process.getInputStream来得到返回结果

#10


引用 2 楼 herowach 的回复:
我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。


不知道这个python脚本是怎么运行呢?
能不能在详细一点信息?

#11


引用 8 楼 ChDw 的回复:
楼主也只要求Windows而已 


如果只是在Windows上,你可以去微软网站下载一个psexec这个exe下来,然后你可以通过这个exe要求远程的机器执行相关的命令并得到返回结果。 

psexec.exe \\hostname -u administrator -p password ipconfig 


这样你在Java中直接运行上述命令就可以了。

不好意思啊,没写清楚,java系统是装在linux下的

#12


引用 10 楼 realzxs 的回复:
引用 2 楼 herowach 的回复:
我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。 
 

不知道这个python脚本是怎么运行呢? 
能不能在详细一点信息?


因为这块不是我做的,我只是看到了这个功能,所以具体PY怎么实现的我也不知道,但PY是可以给JAVA返回信息的,访问远程机器成功与否的信息是会返回到JAVA端的,JAVA还要将这个信息显示到界面告诉用户呢

#13


这块属于设备控制,被控制端应该不需要装PY的运行环境,但服务端肯定是要装的

#14


虽然还是没好答案,但可能给俺指明了方向
先谢一个

#15


引用 12 楼 herowach 的回复:
引用 10 楼 realzxs 的回复:
引用 2 楼 herowach 的回复: 
我们这就可以,只要输入远程机器的IP、用户名密码就可以调用那个机器上的命令,原理是JAVA去调用一个python脚本,传命令这事让PY给做了,可惜我看不到这个PY的源码,具体咋弄的我也不知道了。 


不知道这个python脚本是怎么运行呢? 
能不能在详细一点信息? 
 

因为这块不是我做的,我只是看到了这个功能,所以具体PY怎么实现的我也不知道,但PY是可以给JAV…

再问一句,你们的python是安装在windows还是linux?

#16


如果是linux,不知道是否需要什么针对windows的包

#17


如何可以的话在windows系统中开启telnet服务,并通过java的socket连接并执行系统命令。也就是说需要用java实现telnet的客户端,实现应该不难。

#18


使用WMI理论上也是可行的 只是使用java通过WMI来实现还没研究过

#19


我们的系统是支持WIN和LINUX的,两种系统有没有分开处理就不知道了,但安装包是一个通用的

#20


如果只是在Windows上,你可以去微软网站下载一个psexec这个exe下来,然后你可以通过这个exe要求远程的机器执行相关的命令并得到返回结果。

psexec.exe \\hostname -u administrator -p password ipconfig


这样你在Java中直接运行上述命令就可以了。

#21


现在的困难是被监控的windows主机不允许开启telnet(基本来说,就只能用WMI了)
监控程序肯定是运行在linux平台上

#22


使用telnet的方法基本已经实现,不过这是针对被监控的unix平台的(unix的telnet一般是都需要开启的),但是windows平台一般的习惯是不能开telnet,所以才要针对windows的默认服务来进行通讯。
难啊

#23


使用telnet的方法基本已经实现,不过这是针对被监控的unix平台的(unix的telnet一般是都需要开启的),但是windows平台一般的习惯是不能开telnet,所以才要针对windows的默认服务来进行通讯。
难啊

#24


在linux下有个samba服务 可以和windows进行通讯。通讯是通过连接windows的ipc$来实现的,smbclient这个工具可以显示与windows的通讯,你可以用java来实现。

#25


标记一下

#26


Process process=Runtime.getRuntime().exec("p.exe"); 
process.getInputStream就得到返回结果,但有的外部命令就返回不了,建议在调用后把结果写在指定文件了,再读取文件就OK了!

#27


引用 26 楼 mingzhangming 的回复:
Process process=Runtime.getRuntime().exec("p.exe"); 
process.getInputStream就得到返回结果,但有的外部命令就返回不了,建议在调用后把结果写在指定文件了,再读取文件就OK了!

很感谢这位的回帖,不过这很明显需要调用exe文件,也就是windows平台的
我需要是在linux平台下的
其实windows平台下有很好的解决方案(com4j)

#28


引用 24 楼 zyflys 的回复:
在linux下有个samba服务 可以和windows进行通讯。通讯是通过连接windows的ipc$来实现的,smbclient这个工具可以显示与windows的通讯,你可以用java来实现。

多谢提醒,不过暂时没空搞这个了
等我抽空验证一下,再散分

#29


LZ兄弟找到解决方法了吗?