Untitled

 avatar
unknown
plain_text
2 months ago
2.0 kB
8
Indexable
#include <iostream>
#include <vector>
#include <cstring>
#include <arpa/inet.h>
#include <unistd.h>

#define BUFFER_SIZE 65535

struct Target {
    std::string ip;
    int port;
};

int main() {
    int sockfd;
    char buffer[BUFFER_SIZE];

    // 🔹 Ziele (deine cbftp Instanzen)
    std::vector<Target> targets = {
        {"127.0.0.1", 1337},
        {"127.0.0.1", 1338}
        // weitere möglich
    };

    // 🔹 Socket erstellen
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("Socket failed");
        return 1;
    }

    // 🔹 Empfangsadresse (hier hört er auf Port 9999)
    sockaddr_in server_addr{};
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(9999);
    server_addr.sin_addr.s_addr = INADDR_ANY;

    if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        return 1;
    }

    std::cout << "Listening on UDP port 9999...\n";

    while (true) {
        sockaddr_in client_addr{};
        socklen_t addr_len = sizeof(client_addr);

        ssize_t len = recvfrom(sockfd, buffer, BUFFER_SIZE, 0,
                               (struct sockaddr*)&client_addr, &addr_len);

        if (len < 0) {
            perror("recvfrom failed");
            continue;
        }

        std::cout << "Received packet (" << len << " bytes)\n";

        // 🔹 an alle Targets weiterleiten
        for (const auto& target : targets) {
            sockaddr_in target_addr{};
            target_addr.sin_family = AF_INET;
            target_addr.sin_port = htons(target.port);
            inet_pton(AF_INET, target.ip.c_str(), &target_addr.sin_addr);

            sendto(sockfd, buffer, len, 0,
                   (struct sockaddr*)&target_addr, sizeof(target_addr));

            std::cout << "Forwarded to " << target.ip << ":" << target.port << "\n";
        }
    }

    close(sockfd);
    return 0;
}
Editor is loading...
Leave a Comment