由于 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权限运行。

注意: 滥用此程序可能会导致网络安全问题,请谨慎使用!

局域网/WiFi 多电脑向网站发送数据包 C++ 程序 (Mac & Windows)

原文地址: https://www.cveoy.top/t/topic/nw3L 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录