C.S远程指令控制

C.S远程指令控制

一. 模型结构

image

客户端:

客户端首先创建一个套接字,该套接字绑定的是目标IP和端口,在调用connect函数的时候将自己的IP和端口发送给服务器。

服务端:

服务端首先创建一个套接字,该套接字和自身IP以及端口绑定,在调用accept函数的时候,从缓冲区将客户端的IP和端口提取出来,创建一个新的套接字,利用该套接字可以和特定客户端进行通信。

二. 代码

客户端:

#include<winsock2.h>
#include<winsock.h>
#include<stdio.h>
#include<iostream>
#include<chrono>
#include<thread>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"ws2_32")
using namespace std;


int portScan(char* ip, int port)
{
	cout << "Scan port " << port << endl;
	int the_socket = socket(AF_INET, SOCK_STREAM, 0);
	if (the_socket < 0)
	{
		cout << "Error creating socket!" << endl;
		return 1;
	}
	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr = inet_addr(ip);
	server_addr.sin_port = htons(port);

	if (connect(the_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) 
	{
		closesocket(the_socket);
		return 1;
	}

	cout << "Port " << port << " is open" << endl;
	closesocket(the_socket);
	return 0;
}

int beat(char* ip,int port,int the_socket)
{
	cout << "发送心跳报文!" << endl;
	char sendbuf[] = { "I like you!" };
	if (send(the_socket, sendbuf, int(strlen(sendbuf)), 0) > 0)
	{
		cout << "心跳发送成功!" << endl;
	}
	return 0;
}

void threadFunction(char* ip, int port)
{
	int the_socket = socket(AF_INET, SOCK_STREAM, 0);
	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr = inet_addr(ip);
	server_addr.sin_port = htons(port);
	bind(the_socket, (SOCKADDR*)&server_addr, sizeof(server_addr));
	if (connect(the_socket, (SOCKADDR*)&server_addr, sizeof(server_addr)) == 0)
	{
		cout << "连接成功!" << endl << endl;
	}
	while (true)
	{
		beat(ip, port,the_socket);
		this_thread::sleep_for(chrono::seconds(1));
	}
	closesocket(the_socket);
}



int command(char* ip, int port)
{
	return 0;
}


int main()
{
	WSADATA wsa;
	int num;
	WSAStartup(MAKEWORD(2, 2), &wsa);
	int port = 10001;
	char ip[20] = { "192.168.125.137" };
	for (num = 0; num < 1001; num++)
	{
		portScan(ip, num);
	}

	int the_socket = socket(AF_INET, SOCK_STREAM, 0);
	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr = inet_addr(ip);
	server_addr.sin_port = htons(port);
	bind(the_socket, (SOCKADDR*)&server_addr, sizeof(server_addr));
	if (connect(the_socket, (SOCKADDR*)&server_addr, sizeof(server_addr)) == 0)
	{
		cout << "Connect Success!" << endl << endl;
	}

	cout << "发送心跳报文!" << endl;
	char sendbuf[] = { "I like you!" };
	while (true)
	{
		if (send(the_socket, sendbuf, int(strlen(sendbuf)), 0) > 0)
		{
			cout << "心跳发送成功!" << endl;
		}
		this_thread::sleep_for(chrono::seconds(5));
	}


	char cmd[25] = { "ipconfig > output.txt" };
	char buf[100] = {0};
	int num = send(the_socket, cmd, sizeof(cmd), 0);
	if (num > 0)
	{
		cout << "命令发送成功!" << endl;
	}
	int flag = 0;
	do
	{
		flag = recv(the_socket, buf, sizeof(buf), 0);
		if (flag > 0)
		{
			cout << "接收反馈成功!" << endl;
		}
	} while (flag == 0);
	cout << buf;
	closesocket(the_socket);
	WSACleanup();

	return 0;
}

服务端:

#include<winsock2.h>
#include<winsock.h>
#include<stdio.h>
#include<iostream>
#include<iomanip>
#include<ctime>
#include<chrono>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"ws2_32")
using namespace std;

int main()
{
	WSADATA wsa;
	WSAStartup(MAKEWORD(2, 2), &wsa);
	char Recv[100];
	int the_socket = socket(AF_INET, SOCK_STREAM, 0);
	char ip[] = { "192.168.226.25" };
	int port = 10001;
	int iResult = 0;
	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr = inet_addr(ip);
	server_addr.sin_port = htons(port);
	if (!bind(the_socket, (SOCKADDR*)&server_addr, sizeof(server_addr)))
	{
		cout << "bind操作成功" << endl;
	}
	if (!listen(the_socket, SOMAXCONN))
	{
		cout << "listen操作成功" << endl;
	}
	int con_socket = accept(the_socket, NULL, NULL);
	char Answer[10] = { "Success!" };
	while (true)
	{
		iResult = recv(con_socket, Recv, sizeof(Recv), 0);
		cout << Recv << endl;
		int Result = system(Recv);
		if (!Result)
		{
			cout << "命令执行成功!"<< endl;
			if (send(con_socket, Answer, sizeof(Answer), 0))
			{
				cout << "反馈成功!" << endl;
			}
			break;
		}
	}
	closesocket(the_socket);
	WSACleanup();
	return 0;
}

posted @ 2024-03-22 09:06  ONE_ZJ  阅读(10)  评论(0编辑  收藏  举报