Java实现的cmd远程控制程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(

相关文档
最新文档