再问远程监控(最高可给300分)(200分)

  • 主题发起人 主题发起人 tg
  • 开始时间 开始时间
T

tg

Unregistered / Unconfirmed
GUEST, unregistred user!
用UDP协议,局域网,c/s端实现:远程实时抓屏,鼠标,键盘遥控...
目前看来,远程抓屏的技术是成熟并且原代码公开的,只是如何实现鼠标和键盘的遥控?
关于鼠标和键盘本地如何截获? 远程如何实现,模拟?

谁有现成的原代码(如"冰河"或者自己课题成熟产品的原代码)将的300分以及人民币汇款
~~~~~~~~~~~
提供线索或者方案可以得到200分(抓屏除外)
 
我记得delphi5 有例子
可以在服务端显是客户端的鼠标点击的x,y及改变窗口的size的信息.
 
本地截获应该不是问题,你用hook查一下,都有的。
异地实现未作过,不敢乱说。但我估计,说不定也需hook.

另:tg兄,远程抓屏的源代码哪有?
 
实时抓屏看来只有在局域网内速度才能满足要求
 
人民币汇款??????????????????????????????????????
 
jingtao:你的黑洞2000可以拿来换RMB了
 
鼠标遥控不用HOOK的也不用什么控件。想问题不要太复杂化。只用六行代码
现在搞这些已经没有出头之日了,如果是前两年就好了。
如果真想要先到我主页看看吧。我要一个月后才能上网。
 
我有netbus源程序,要吗?
 
在www.swm.com.cn上有,你去看看吧
 
搞木马吗???
 
从远端模拟鼠标和键盘不是难事呵,就一个API呵。
远端控制的概念就是把远程的机器当自己的机器操作呵,ORACLE的VNC早就公开了
源码,并且是多平台的,我手里就有win9x和linux的。
不过要拿这个卖钱显然不够仗义吧:)
 
只要会远程抓屏,其它的控制只是发消息,和运用api,
一、实现原理
---- 实行远程控制,实际上就是一个服务器程序(以下简称被控程序)和一个客户程序(以下简称主控程序):被控方即为服务器程序,它监听客户的请求,并作出处理;主控方即为客户程序,它连接上服务器后,发出自己的请求,服务器便根据自已的请求进行不同的响应。
二、编写主控程序
---- 1、新建一个项目Client.dpr,并把一个TClientSocket元件放到Form上,它的属性设置如下:Port设为100(端口号可任意设置,只要求双方统一),其它属性按默认值。在窗体上添加两个TEdit:Edit1用来输入发送的字符,Edit2用来输入IP地址;添加两个TButton:Button1点击后用来连接被控机,Button2点击后用来发送字符,然后声明一个私有变量ConnectFlag,表示双方是否连接好:
private
ConnectFlag:Boolean;

---- 2、ClientSocket1的OnConnect事件代码如下:
procedure TForm1.ClientSocket1Connect
(Sender: TObject;Socket: TCustomWinSocket);
begin
ConnectFlag:=True; //表示连接成功
end;

---- 3、ClientSocket1的OnError事件代码如下:
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent:
TErrorEvent;var ErrorCode: Integer);
begin
Application.MessageBox(PChar(' 不能连接到IP地址
: ' + Edit2.Text+'。'+
#13+'可能是监听程序没有运行或网络故障!'),'
连接错误',MB_OK+MB_ICONSTOP);
ErrorCode := 0;
end;

---- 4、Button1的OnClick事件代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ClientSocket1 do begin
if Active then begin
Active := False;//在连接之前首先关闭
ConnectFlag:=False; //置连接标志为假
end;
if Length(Edit2.Text) > 0 then begin
Host := Edit2.Text; //指定IP地址或主机名
Active := True;
end;
end;
end;

---- 5、Button2的OnClick事件代码如下:
procedure TForm1.Button2Click(Sender: TObject);
begin
if ConnectFlag then
ClientSocket1.Socket.SendText(Edit1.Text)
//如果连接成功则发送字符串
else
Application.MessageBox(PChar(' 没有连接到地址 :
' + Edit2.Text+'。'+
#13+'检查IP地址是否存在或是否已经连接!'),'
提示信息',MB_OK+MB_ICONSTOP);
end;

三、编写被控程序
---- 1、新建一个项目Server.dpr,并把一个TServerSocket元件放到Form上,它的属性设置如下:Active设为True;Port设为100,其它属性按默认值。
---- 2、ServerSocket1的OnClientRead事件代码如下:

procedure TForm1.ServerSocket1ClientRead
(Sender: TObject;Socket: TCustomWinSocket);
var
Str:PChar;
Code,V:Integer;
begin
Str:=PChar(Socket.ReceiveText); //接收字符串
Val(Str,V,Code); //处理接收的字符串,首先转换字符串为整数
if Code< >0 then
Application.MessageBox(Str,'提示信息',
MB_OK+MB_ICONINFORMATION)
//如果转换后的数据不是一个整型数就通过消息框来显示字符串
else
if (V=0)or(V=1)or(V=2) then
ExitWindowsEx(V,0)
//调用Windows的API函数(V=0表示重新登录、
V=1表示关机、V=2表示重启动)
else
Application.MessageBox(Str,'提示信息',
MB_OK+MB_ICONINFORMATION);
//转换后数据不为0、1、2时在消息框内显示字符串
end;

---- 3、修改项目文件,不让窗口显示并且防止它运行两次,修改begin和end之间的代码如下:
begin
Application.Initialize;
if FindWindow('TForm1','Form1')=0 then begin
//当没有找到Form1时执行下面代码
Application.ShowMainForm:=False; //不显示主窗口
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.


 
iie>>:)
happytaa>>:你看过冰河的代码吗?事情不是那么简单的.(原理是对的)比如说如果对方网络
故障怎么办?在程序中如何提高传输率,还有如何躲过防火墙,如何在意外情况发生前捕捉他,
等等.
现在搞这些已经没有出头之日了.
 
jingtao 能把 “冰河” 的代码 email 给我一份吗,万分感谢!!!!
 
zengyufeng>>我没有“冰河” 的代码啊。他没有给过任何人,我只有部分代码。您可以
问他要(中国科技开发院)。不过最近他在赶工程,你写信给他看看,或者打电话问一
下他。
 
tg:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
在发表文章的2周内已经解决,目前看来,很同意jingtao的看法。
 
接受答案了.
 
后退
顶部