代码之家  ›  专栏  ›  技术社区  ›  codebox

如何确定客户端连接到C中的任何侦听器套接字所使用的IP

  •  3
  • codebox  · 技术社区  · 15 年前

    我有一个用C编写的网络服务器应用程序,侦听器使用INADDR\u ANY绑定,这样它就可以通过安装它的主机的任何IP地址接受连接。

    我需要确定客户端在建立连接时使用的服务器IP地址-实际上我只需要知道它们是否通过环回地址127.0.0.1连接。

    部分代码示例如下(如果有帮助,我可以发布整个内容):

    static struct sockaddr_in serverAddress;
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_addr.s_addr = INADDR_ANY;
    serverAddress.sin_port = htons(port);
    
    bind(listener, (struct sockaddr *) &serverAddress, sizeof(serverAddress));
    
    listen(listener, CONNECTION_BACKLOG);
    
    SOCKET socketfd;
    static struct sockaddr_in clientAddress;
    ...
    socketfd = accept(listener, (struct sockaddr *) &clientAddress, &length);
    

    int isLocalConnection(int socket){
        struct sockaddr_in sa;
        int sa_len = sizeof(sa);
        if (getsockname(socket, &sa, &sa_len) == -1) {
            return 0;
        }
        // Local access means any IP in the 127.x.x.x range
        return (sa.sin_addr.s_addr & 0xff) == 127;
    }
    
    2 回复  |  直到 15 年前
        1
  •  8
  •   zildjohn01    15 年前

    你可以用 getsockname

        2
  •  0
  •   Pavel Radzivilovsky    15 年前

    从你的代码

    socketfd = accept(listener, (struct sockaddr *) &clientAddress, &length);
    

    推荐文章