gpt4 book ai didi

C++ Linux getpeername IP 系列

转载 作者:太空狗 更新时间:2023-10-29 12:38:10 27 4
gpt4 key购买 nike

在我的 Linux C++ 应用程序中,我使用 getpeername 来获取对等 IP。我的问题是:当我在我的机器上启用 IPv6 时,我从对等方获得的 IP 属于 IF_INET6 系列,尽管它是 IPv4。

代码:

int GetSockPeerIP( int sock)
{
struct sockaddr_storage ss;
struct socklen_t salen = sizeof(ss);
struct sockaddr *sa;
memset(&ss,0,salen);
sa = (sockaddr *)&ss;

if(getpeername(sock,sa,&salen) != 0)
{
return -1;
}

char * ip=NULL:
if(sa->sa_family == AF_INET)
{
ip = inet_ntoa((struct sockaddr_in *)sa)->sin_addr);
}
else
{
//ip = how to convert IPv6 to char IP?
}

return 0;
}

我该如何解决?

谢谢1

最佳答案

可以使用getnameinfo,它可以处理所有地址类型,而且比inet_ntop更短,使用:

char host[256];
getnameinfo(&ss, salen, host, sizeof(host), NULL, 0, 0);

关于C++ Linux getpeername IP 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638343/

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