局域网/WiFi 多电脑向网站发送数据包 C++ 程序 (Mac & Windows)
由于 Mac OS 和 Windows 系统的网络编程库不同,因此需要分别编写程序。
Mac OS 程序
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char* argv[]) {
// 创建socket
int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (sock_fd < 0) {
perror('socket error');
return -1;
}
// 绑定本地地址和端口
struct sockaddr_in local_addr;
memset(&local_addr, 0, sizeof(local_addr));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(0);
if (bind(sock_fd, (struct sockaddr*)&local_addr, sizeof(local_addr)) < 0) {
perror('bind error');
return -1;
}
// 设置目标地址和端口
struct sockaddr_in dest_addr;
memset(&dest_addr, 0, sizeof(dest_addr));
dest_addr.sin_family = AF_INET;
dest_addr.sin_addr.s_addr = inet_addr('网站IP地址');
dest_addr.sin_port = htons(80);
// 发送数据
char* data = 'hello';
int data_len = strlen(data);
for (int i = 0; i < 10; i++) {
ssize_t send_len = sendto(sock_fd, data, data_len, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
if (send_len != data_len) {
perror('sendto error');
return -1;
}
printf('send data to 网站IP地址: %s\n', data);
sleep(1);
}
// 关闭socket
close(sock_fd);
return 0;
}
Windows 程序
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib, 'ws2_32.lib') // 链接ws2_32.lib库
int main(int argc, char* argv[]) {
// 初始化Winsock
WSADATA wsa_data;
int ret = WSAStartup(MAKEWORD(2, 2), &wsa_data);
if (ret != 0) {
printf('WSAStartup failed: %d\n', ret);
return -1;
}
// 创建socket
SOCKET sock_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock_fd == INVALID_SOCKET) {
printf('socket error: %d\n', WSAGetLastError());
WSACleanup();
return -1;
}
// 绑定本地地址和端口
struct sockaddr_in local_addr;
memset(&local_addr, 0, sizeof(local_addr));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(0);
if (bind(sock_fd, (struct sockaddr*)&local_addr, sizeof(local_addr)) == SOCKET_ERROR) {
printf('bind error: %d\n', WSAGetLastError());
closesocket(sock_fd);
WSACleanup();
return -1;
}
// 设置目标地址和端口
struct sockaddr_in dest_addr;
memset(&dest_addr, 0, sizeof(dest_addr));
dest_addr.sin_family = AF_INET;
dest_addr.sin_addr.S_un.S_addr = inet_addr('网站IP地址');
dest_addr.sin_port = htons(80);
// 发送数据
char* data = 'hello';
int data_len = strlen(data);
for (int i = 0; i < 10; i++) {
int send_len = sendto(sock_fd, data, data_len, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
if (send_len != data_len) {
printf('sendto error: %d\n', WSAGetLastError());
closesocket(sock_fd);
WSACleanup();
return -1;
}
printf('send data to 网站IP地址: %s\n', data);
Sleep(1000);
}
// 关闭socket
closesocket(sock_fd);
// 释放Winsock
WSACleanup();
return 0;
}
需要注意的是,程序中的“网站IP地址”需要替换成实际的网站IP地址。另外,Mac OS程序需要使用root权限运行。
注意: 滥用此程序可能会导致网络安全问题,请谨慎使用!
原文地址: https://www.cveoy.top/t/topic/nw3L 著作权归作者所有。请勿转载和采集!