首页 > 其他分享 >C.S远程指令控制

C.S远程指令控制

时间:2024-03-22 09:11:05浏览次数:21  
标签:控制 addr lib int server 指令 include 远程 cout

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;
}

标签:控制,addr,lib,int,server,指令,include,远程,cout
From: https://www.cnblogs.com/ONEZJ/p/18088667/cs-remote-instruction-control-19laai

相关文章

  • 关于使用向日葵等远程软件,关闭主机显示器后远程画面缩小的解决办法
    【方法一】修改分辨率直接在桌面上,右键【显示设置】>>>【显示器分辨率】>>>改成更大的分辨率即可。(当然这个方法的前提是:修改分辨率的选项是可选的而不是灰色的,并且你的鼠标可以下拉并点击到修改分辨率的选择框)【方法二】修改注册表1.打开主机和显示器,在桌面上右键>>>显示设置>>......
  • 循环控制:(第10题)与闰年相关的问题,涉及数组,函数的知识
    #include<stdio.h>intis_leap_year(intyear){ if((year%4==0&&year%100!=0)||year%400==0) return1; else return0;}intgap_years(intyear){ inti=1990; intsum=0; intgap_years=0; if(year==1990) retur......
  • java流程控制语句
    今天是复习学习第四天如果有和我一样复习Java基础或者准备学习Java的可以看看我的这些学习内容也欢迎大佬观看我的文章做出指导对我代码或者觉得我哪里理解不到位希望能给我指导指导非常感谢大家祝大家在计算机行业越来越好!!!下面是我今天复习的内容Java流程控制语句分......
  • 鸿蒙HarmonyOS实战-ArkTS语言(渲染控制)
    ......
  • 通过XMLRpc控制海康VB2200视觉控制器自带光源接口
    在使用HikVB2200视觉控制器时,由于并未使用VisionMaster软件,但是使用了视觉控制器的光源接口。导致无法直接控制该光源接口。VB2200视觉控制器提供了一个IOController应用程序,其中对应的exe文件可以设置为对应光源接口的亮度等参数,基本满足需求。但是IOController只能设置......
  • Docker指令
    systemctlstartdocker启动dockersystemctlstopdocker关闭dockersystemctlstatusdocker查看运行状态systemctlrestartdocker重启dockersystemctlpull镜像名拉去镜像dockerrun镜像名运行镜像dockerrmi-f镜像名/镜像Iddockerrmi-f$(dockerimage-......
  • 目标控制器数字孪生系统的研究与设计
    ​文章来源:铁路计算机应用,2023,32(10):36-41.作者:许婧,杨硕,季志均摘要:随着目标控制器(OC,ObjectController)系统在轨道交通领域的推广应用,其硬件投入较高、研发周期较长、环境搭建较为复杂的问题逐渐显现。文章根据OC系统的架构和特点,基于模块化设计,研究开发了OC数字孪生系统,利用S......
  • 【已解决】null value in column “XXX“ violates not-null constraint当我数据库的
    报错信息:nullvalueincolumn"id"violatesnot-nullconstraintDetail:Failingrowcontains(11110,1,null) 一般来说,是因为插入的主键Id为空引起的。这就和我们数据库中的设置默认值产生了冲突,我设置了默认值,为什么他还是报这个字段不能为空的错误?这个时候就要......
  • 如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发
    文章目录1.检查LinuxSSH服务2.本地连接测试3.Linux安装Cpolar4.创建远程连接公网地址5.公网远程连接测试6.固定连接公网地址7.固定地址连接测试本文主要介绍如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接,然后实现远程......
  • MySQL下载安装与提供远程连接
    一、windowsmysql安装1、安装到 C:\mysql-8.0.31-winx642、根目录下添加配置文件my.ini[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]port=3306default-time-zone='+08:00'basedir=C:\mysql-8.0.31-winx64datadir=C:\m......