在socket通信基础下,很容易实现简易的远程控制,这里使用本机做了演示,抛砖引玉,为大家提供更强大的远控思路。
效果:控制端 输入cmd命令,被控制端计算机执行命令。如图

提示等待命令输入,当输入calc,回车时,被控制端接受命令,并打开了计算器。

此时计算器被打开,并不是此程序所为,而是被控制端接受到 calc 命令并执行,以此为思路实现远控。
比如:Nslookup 查看ip 地址

比如:write 打开对方写字版

你可以查看CMD命令大全来实现更多控制效果,甚至你可以尝试 rononce -p 来关闭对方电脑。
完整源码如下:
被控制端
// socket_demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <iostream>
#include<windows.h>
#pragma comment(lib, "ws2_32.lib")
bool CreateServerSocket()
{
BOOL bRet=FALSE;
do
{
//1、创建套接字
SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET== server)
{
SetLastError(WSAGetLastError());
break;
}
//2、绑定Socket到本地
sockaddr_in server_addr = {0};
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//以主机进行测试
if (SOCKET_ERROR == bind(server, (sockaddr*)&server_addr, sizeof(server_addr)))
{
SetLastError(WSAGetLastError());
break;
}
//3、监听
if (SOCKET_ERROR == listen(server, 10))
{
SetLastError(WSAGetLastError());
break;
}
//4、处理连接请求
sockaddr_in client_addr = {0};
int len = sizeof(client_addr);
SOCKET client=accept(server, (sockaddr*)&client_addr, &len);
if (INVALID_SOCKET == client)
{
SetLastError(WSAGetLastError());
break;
}
//5、接受数据
char szInfo[1024] = { 0 };
int iRet=-1;
while (1)
{
iRet = recv(client, szInfo, 1013, 0);
if (0 >= iRet)
{
continue;
}
else
{
system(szInfo);
iRet = -1;
}
}
bRet = TRUE;
} while (FALSE);
return bRet;
}
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
/* Tell the user that we could not find a usable */
/* Winsock DLL. */
printf("WSAStartup failed with error: %dn", err);
return -1;
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
printf("Could not find a usable version of Winsock.dlln");
WSACleanup();
return -1;
}
if (FALSE==CreateServerSocket())
{
printf("CreateServerSocket failed with error: %dn", GetLastError());
return -1;
}
system("pause");
WSACleanup();
return 0;
}
控制端:
#include <winsock2.h>
#include <iostream>
#include<windows.h>
#pragma comment(lib, "ws2_32.lib")
bool CreateClientSocket()
{
BOOL bRet = FALSE;
do
{
//1、创建套接字
SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == client)
{
SetLastError(WSAGetLastError());
break;
}
//2、连接服务器socke地址
sockaddr_in server_addr = { 0 };
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//IP地址//10.11.50.111 虚拟机:192.168.48.128
if (SOCKET_ERROR == connect(client, (sockaddr*)&server_addr, sizeof(server_addr)))
{
SetLastError(WSAGetLastError());
break;
}
//3、发送数据
char sz_send_info[1024] = { 0 };
int iRet = 0;
while (1)
{
printf("Please input the command you want to send n");
std::cin >> sz_send_info;
iRet=send(client, (char*)sz_send_info, sizeof(sz_send_info), 0);
if (iRet!=SOCKET_ERROR)
{
printf("send successfullyn");
}
else
{
printf("failed to send");
}
}
bRet = TRUE;
} while (FALSE);
return bRet;
}
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
/* Tell the user that we could not find a usable */
/* Winsock DLL. */
printf("WSAStartup failed with error: %dn", err);
return -1;
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
printf("Could not find a usable version of Winsock.dlln");
WSACleanup();
return -1;
}
if (FALSE == CreateClientSocket())
{
printf("CreateClientSocket failed with error: %dn", GetLastError());
return -1;
}
system("pause");
WSACleanup();
return 0;
}
最后
以上就是饱满荷花最近收集整理的关于远程控制——C++编程入门项目(完整源码)的全部内容,更多相关远程控制——C++编程入门项目(完整源码)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复