获取localhost连接的真实IP地址

时间:2016-08-22 03:13:23

标签: sockets network-programming

如何从localhost检查连接的真实IP地址?基本上我使用以下函数来获取给定远程连接的地址。

std::string getpeerhost(int _fd) const {

  socklen_t len;
  struct sockaddr_storage addr;
  char ipstr[INET6_ADDRSTRLEN];
  //int port = -1;

  len = sizeof(addr);
  if(::getpeername(_fd, (struct sockaddr*)&addr, &len) == -1) {
    return {""};
  }

  // IP4
  if (addr.ss_family == AF_INET) {
    auto s = (struct sockaddr_in *)&addr;
    inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof(ipstr));
  }   
  // IP6
  else {
    auto s = (struct sockaddr_in6 *)&addr;
    inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof(ipstr));
  }   

  return std::string(ipstr);
}

当给定套接字文件描述符getpeername来自与服务器相同的主机时,问题是127.0.0.1可能返回_fd。在我的应用程序中,服务器必须在其他客户端之间传递客户端的地址,当然传递127.0.0.1没有任何意义。

0 个答案:

没有答案