Java实现的cmd远程控制程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java不能调用Win_Api,所以直接用Win_Api就行不通了。但是我们可以借助DLL 来实现。
以下就是cmdDLL的实现过程:
首先,用在cmd命令提示符下执行javac Server.java (接下来它将调用cmdDLL.dll的函数 CMD)生成一个Server.class文件,接下来就是用这个Server.class文件生成Server.h文件(执行javah Server.h)。
其次,先写一个.cpp文件,在这个.cpp程序中我们将先前已经弄好的Server.h 要包含在这个cmdDLL.cpp文件中,因为Server.h文件是接下来Server.java中要调用的CMD者个函数的声明。
cmdDLL.cpp文件如下:
//begin
#include "Server.h"
#include
#include
JNIEXPORT void JNICALL Java_Server_CMD (JNIEnv * env, jclass,jstring a )
{
const char* str = env->GetStringUTFChars(a,0);
char str_1[100] = {0};
strncpy(str_1,str,strlen(str)-1);
char str_2[100] = " > out.txt";
strcat(str_1,str_2);
system(str_1);
}
//end
执行以下命令(需要vc环境):
cl/c cmdDLL.cpp
link cmdDLL.obj /dll
以生成一个cmdDLL.Dll文件。
cmdDLL.Dll中的void CMD(String args)这个函数的功能:
(1)接受上层的一个string args 然后将其类型转换后得到一个const char* str。
const char* str = env->GetStringUTFChars(a,0);
(2)由于我们需要向Client回显cmd中的内容所以这里我们就需要将回显先转移到out.txt中
char str_1[100] = {0};
strncpy(str_1,str,strlen(str)-1);
char str_2[100] = " > out.txt";
strcat(str_1,str_2);
然后将数据以文本的形式存到out.txt(准备给Client回显)中。
最后就是要实现str_1这个指令了(在cmd之下),我所使用的方法是int system(const char* args)。比如现在位置是D:\,然后str_1 = “dir > out.txt”,那么其将在Server端显示cmdDLL的DLL文件。
二:实现了Java在Server端使用cmd命令的功能,接下来要实现的就是TCP 链接了。
首先,比如Client端向Server端发送一条命令比如说dir ,那么在客户端会显示现在Server.class所在的文件夹。
图二
显示其它文件夹则必须加上其绝对路径如dir E:E-book。图三
还可以是执行别的指令如shutdown,type……等待。
bug:欲对Server上的Java文件和C文件进行编译或链接必须将其放在Server.class所在的本文件夹。
程序代码:
//=================================================================== ===================
//************服务端代码
****************************************************************
//=================================================================== ===================
Server:
/*
* 文件名:Server.java
* 环境:Eclipse 3.2 + VS 2005
* 功能:远程控制程序Client端(受控端)
* 作者:lwm1986
* 日期:2007.5.17
* E-mail : Lauvenman@
* QQ:271096597
*/
import java.io.*;
import .*;
class Server{
static
{
System.loadLibrary("cmdDLL");//加载DLL。
}
public native static void CMD(String b);
public static void main(String argv[]) throws Exception
{
String ClientSentence;//接收Client传来的命令
Server callDll = new Server();
ServerSocket welcomeSocket = new ServerSocket(2000);
//在Port:1033端口处等Client
while (true)
{
Socket conncetionSocket = welcomeSocket.accept(); //等.......
BufferedReader inFromClient = new BufferedReader(
new
InputStreamReader(conncetionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(