gpt4 book ai didi

c++ - 仅接受来自特定子网的连接

转载 作者:行者123 更新时间:2023-11-30 04:19:11 24 4
gpt4 key购买 nike

我希望我的服务器应用程序使用 winsock 仅接受来自特定(比方说 192.168.0.0/24)子网的连接。

我正在考虑两种选择:

  • 每次我检查客户的地址 accept一个连接。

    while (true) {
    SOCKET clientSocket = accept(serverSocket,
    (SOCKADDR *)&clientAddress,
    &addressLenght);
    if (clientSocket == INVALID_SOCKET
    || clientAddress.sin_addr.S_un.S_un_b.s_b1 != 192
    || clientAddress.sin_addr.S_un.S_un_b.s_b2 != 168
    || clientAddress.sin_addr.S_un.S_un_b.s_b3 != 0) {
    closesocket(clientSocket);
    continue;
    }

    ...
    }
  • 找出相应网络的本地地址并将其用作bind 中的name 参数

    SOCKADDR_IN serverAddress;
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(13666);
    serverAddress.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");

    result = bind(serverSocket, (SOCKADDR *)&serverAddress,
    sizeof(serverAddress));

我还有哪些其他选择?

P.S.:有人告诉我有更好的解决方案。但我想不通。

最佳答案

如果您只想连接来自服务器所在的同一子网(从您的问题中不清楚是否是这种情况),您可以使用 setsockopt() 将 TTL 设置为 1 . 该套接字的数据包(包括连接握手)不应通过路由器。

关于c++ - 仅接受来自特定子网的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16001579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com