利用Socket实现远程DOS控制
来源:互联网 发布:怎么看淘宝注册日期 编辑:程序博客网 时间:2024/06/05 20:51
利用Socket实现远程DOS控制
最近在鼓捣树莓派开发板,想实现自动升级的功能,就想着先在windows下实现,然后移植到树莓派上,结果做到一半时,发现可以通过此,远程控制别人电脑dos,于是自己就跑偏了,自动升级功能到现在还没实现,哈哈。
一、编程语言
因为之前接触过一段时间的C#,而且感觉使用它做一些桌面小程序还是挺方便的,所以这次就选择使用C#来完成此功能。
二、创建工程
因为是Socket通信,所以需要创建两个windows窗体应用程序:Server和Client。然后根据需要,在窗体上放一些控件,如下图:
三、代码实现
首先双击Server界面上的“启动“按钮进入按钮点击代码编写。1、得到界面上输入的IP和端口号;2、建立Socket连接;3、监听客户端的连接;4、等待客户端信息。
static Socket socket;private void button1_Click(object sender, EventArgs e){ int port = int.Parse(textBox2.Text.ToString()); IPAddress ip = IPAddress.Parse(textBox1.Text.Trim());//记得要引用System.Diagnostics命名空间 socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(new IPEndPoint(ip, port)); socket.Listen(10); MessageBox.Show("启动成功"); Thread myThread = new Thread(ListenClientConnect);//监听客户端发来的信息 myThread.Start(); }
然后我们需要将监听客户端的功能进行实现
private void ListenClientConnect(){ while (true){ Socket clientSocket = socket.Accept();//socket等待接收函数 if(reverce!="") clientSocket.Send(Encoding.UTF8.GetBytes(reverce)); Thread receiveThread = new Thread(ReceiveMessage);//接收函数 receiveThread.Start(clientSocket); }}private void ReceiveMessage(object clientSocket){ Socket myClientSocket = (Socket)clientSocket; while (true){ try{ /通过clientSocket接收数据 int receiveNumber = myClientSocket.Receive(result);//socket接收数据函数 if(result!=null){ SetText(Encoding.UTF8.GetString(result, 0, receiveNumber)); reverce=RunCmd2(Encoding.ASCII.GetString(result, 0, receiveNumber));//RunCmd2是执行dos命令的函数 if (reverce != "") myClientSocket.Send(Encoding.UTF8.GetBytes(reverce));//将dos命令的执行结果发送到客户端 } }catch (Exception ex){ //MessageBox.Show(ex.Message); myClientSocket.Shutdown(SocketShutdown.Both); myClientSocket.Close(); break; } }}
接下来我们需要实现dos命令在不启用窗体的情况下执行命令的功能。
private string RunCmd2(string cmdStr){ string output =""; try{ using (Process myPro = new Process()){ myPro.StartInfo.FileName = "cmd.exe"; myPro.StartInfo.Arguments = "/c " + cmdStr;//设定程式执行参数 myPro.StartInfo.UseShellExecute = false; myPro.StartInfo.RedirectStandardInput = true; myPro.StartInfo.RedirectStandardOutput = true; myPro.StartInfo.RedirectStandardError = true; myPro.StartInfo.CreateNoWindow = true;//不创建窗体 myPro.Start(); myPro.WaitForExit(); output = myPro.StandardOutput.ReadToEnd(); } }catch{} return output;}
至此,我们的服务端就基本完成了,然后我们接下来实现客户端。
客户端相对简单
private void button1_Click(object sender, EventArgs e){ //设定客户端IP地址 IPAddress ip = IPAddress.Parse(textBox1.Text.ToString()); int port = int.Parse(textBox2.Text.ToString()); clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try{ clientSocket.Connect(new IPEndPoint(ip, port)); //配置客户端IP与端口 MessageBox.Show("连接服务器成功"); }catch{ MessageBox.Show("连接服务器失败!"); return; } Thread myThread = new Thread(ListenReceive); myThread.Start();}
接收函数
private void ListenReceive(){ Socket myClientSocket = (Socket)clientSocket; while (true){ try{ //通过clientSocket接收数据 int receiveLength = clientSocket.Receive(result); if (result != null){ //SetText(Encoding.UTF8.GetString(result, 0, receiveLength)); MessageBox.Show(Encoding.UTF8.GetString(result, 0, receiveLength).ToString()); } }catch (Exception ex){ MessageBox.Show(ex.Message); myClientSocket.Shutdown(SocketShutdown.Both); myClientSocket.Close(); break; } }}
发送指令函数
private void button2_Click(object sender, EventArgs e){ try{ Thread.Sleep(1000); //等待1秒钟 string sendMessage = textBox3.Text.ToString(); clientSocket.Send(Encoding.UTF8.GetBytes(sendMessage)); }catch{ clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); }}
四、测试
在客户端输入框中输入“dir”(查看文件夹下的文件命令),点击发送。
然后会接收到文件夹下所有文件的名称
也可以尝试其他的dos指令,如:ipconfig、ping 192.168.1.1等等。
完整源码http://download.csdn.net/download/swzabcdf0/9988358
阅读全文
0 0
- 利用Socket实现远程DOS控制
- 利用Windows2000实现远程控制
- 利用java socket实现远程视频
- Socket远程控制客户端
- Python实现利用socket连接adb控制android设备
- 如何利用DOS命令远程关机
- 远程利用telnet执行DOS命令
- 创建远程arduino socket server,远程控制
- Socket实现远程唤醒
- C#实现远程控制
- 实现远程控制鼠标
- java实现远程控制
- TeamViewer实现远程控制
- 利用socket实现通讯
- java socket远程控制主机,执行命令
- 实现DOS下的SOCKET通信
- Java利用Socket进行远程过程调用
- Socket实现远程调用实例
- 非关系型数据库MongoDB以及可视化工具Robo 3T安装
- 基于数据挖掘SVM模型的pre-incident事故预防预测分析报告
- 定时器的使用
- 关于自定义的data-*属性有时候取不到值的问题 2
- Windows环境下主从复制测试
- 利用Socket实现远程DOS控制
- E
- Kubernetes 在知乎上的应用
- 为什么store引用不到表格里
- Java中Synchronized的用法
- 常用排序算法稳定记忆小结
- 记一个销售打来的电话
- 欧几里德算法-求最大公约数
- html——触发器增加、删除、显示行数