首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么gethostbyaddr(gethostname())返回我的IPv6 IP?

在这个问答内容中,我们要解释为什么 gethostbyaddr(gethostname()) 返回我的 IPv6 IP。

首先,我们需要了解 gethostbyaddrgethostname 函数的作用。gethostbyaddr 函数用于将一个 IP 地址转换为主机名,而 gethostname 函数用于获取本地主机的名称。

当我们使用 gethostbyaddr(gethostname()) 时,我们实际上是在获取本地主机的 IP 地址,并将其转换为主机名。这里的 IP 地址可能是 IPv4 或 IPv6 地址,取决于本地主机的配置。

如果 gethostbyaddr(gethostname()) 返回的是 IPv6 地址,那么可能有以下几种原因:

  1. 本地主机的网络配置使用了 IPv6,而不是 IPv4。
  2. 本地主机的网络配置同时使用了 IPv4 和 IPv6,但是系统优先使用 IPv6。
  3. 本地主机的网络配置中,IPv4 地址被禁用或未配置,只有 IPv6 地址可用。

为了解决这个问题,我们可以尝试以下方法:

  1. 检查本地主机的网络配置,确保 IPv4 地址被正确配置并启用。
  2. 如果 IPv4 地址被禁用或未配置,但是 IPv6 地址可用,则可以尝试使用 gethostbyaddr(gethostname(), AF_INET) 来强制获取 IPv4 地址。
  3. 如果本地主机的网络配置同时使用了 IPv4 和 IPv6,则可以尝试修改系统设置,使其优先使用 IPv4。

总之,gethostbyaddr(gethostname()) 返回 IPv6 IP 的原因是本地主机的网络配置使用了 IPv6。如果需要获取 IPv4 地址,可以使用上述方法进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UNPv1第九章:基本名字与地址转换

1.gethostbyname 查找主机名最基本的函数是gethostbyname,如果成功,它返回一个指向结构hostent的指针,该结构中包含了该主机的所有IPv4或IPv6地址 #include...取一个二进制IP地址并试图找到相应于此地址的主机名,这与gethostbyname的行为刚好相反 #include struct hostent *gethostbyaddr(const...char *addr, size_t len, int family); 参数addr不是char *类型,而是一个真正指向含有IPv4或IPv6地址的结构in_addr或in6_addr的指针。...3.uname函数 返回当前主机名字,通常和gethostbyname一起用来确定本地主机的IP地址 #include int uname (struct utsname...函数(也返回当前主机名字) #include int gethostname(char *name, size_t namelen); 5.getservbyname函数(通过给定名字查找服务

48430

海豚调度连接Zookeeper超时定位

这种情况下,我开始怀疑是不是网络有问题,开始抓包。 发现程序初始化完成,开始连接zookeeper,但迟迟没有发送tcp握手包,在这情况下,我开始怀疑代码的问题了。...java.net.InetSocketAddress#getHostName,作用是获取主机名称,如果在初始化这个对象的时候,传入的hostname是一个域名,那么可以直接返回,但是!!!!...如果是一个ip地址,getHostName可以通过ip地址去反查域名,这个操作不常见,原理是通过DNS查询PTR记录,但一般来说DNS服务器是没有这个记录,所以查询不到,查询不到就会从本地的hosts文件找...解决方法: 如果要用ip的话,在DNS服务器添加该ip的PTR记录。但,这不是很现实 在本地的host文件中添加解析信息(推荐) 例子: x.x.x.x my-zookeeper 然后~~~就正常了。...问题到这里就解决了,所以在用zookeeper的时候,推荐使用域名的方式,不然就有可能出现连接zookeeper非常慢!!! # 进阶 getHostName这个方法到底做了什么操作?

2.6K40
  • socket网络编程【1】寻址

    套接字包含两个主要属性,用于控制如何发送数据: 地址簇:控制OSI网络层协议 套接字类型:控制传输层协议 Python支持三种地址簇: AF_INET: 用于IPv4 寻址 AF_INET6: 用于IPv6...在网络中查找主机 要查找当前主机的名字,可以使用gethostname() import socket socket.gethostname() 所返回的名字取决于当前系统的网络设置,在不同的网络返回的名字可能不一样...反过来,可以使用gethostbyname()来通过主机名获取对应的IP地址: import socket socket.gethostbyname("www.baidu.com") 如果没有找到对应的...如果需要根据某个IP获取其对应的主机名等信息,可以使用gethostbyaddr(),该函数返回一个元组,包括了主机名,别名以及IP地址。...查找服务信息 除了IP地址之外,每个套接字地址还包括一个整数端口号,一次只能有一个套接字使用该地址的端口。 有些端口号已经预先分配给某个特定协议,例如SMTP使用25端口,HTTP使用80端口。

    82020

    一文带你了解Python Socket 编程

    大家好,我是皮皮。 前言 Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。...() socket.getfqdn() socket.getfqdn(socket.gethostname()) #将主机名转化为IP地址 socket.gethostbyname('www.baidu.com...') #不支持IPV6解析 socket.gethostbyname_ex('www.baidu.com') #返回三元组,(主机名,相同地址的其它可用主机名的列表,IPv4 地址列表) #网络ip地址...socket.gethostbyname(socket.getfqdn(socket.gethostname())) #将ip地址转化为主机名,返回三元组(主机名,相同地址的其它可用主机名的列表,IPv4...地址列表),支持IPV4/IPV6 socket.gethostbyaddr('192.168.1.4') #解析主机名或者IP地址 socket.getnameinfo(('192.168.1.4'

    44210

    Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...

    首先检查gethostbyaddr()返回的主机名,然后 可能现有的别名。如果没有可用的FQDN,请输入主机名 从gethostname()返回。...中文情况下 gethostbyaddr() 报错,gethostname() 不会。...gethostbyaddr() 方法是封装在 __socket__.pyd 包里的。 如果要彻底修改就涉及反编译了。...我这里直接对现有方法进行了改动,如果是中文计算机名,这里直接返回计算机名就可以了。...本来没有域名的情况下返回的也是计算机名,只是针对这种中文的待域名的情况下,只能返回中文计算机名,这种场景比较少,而且如果我们的生产环境没有获取这种中文计算机名+域名的需求,这样改动几乎没有影响。

    87020

    python模块介绍- socket(1

    几乎目前所有互联网联网使用IP版本4。 AF_INET6用于IPv6互联网寻址。IPv6是“下一代”版本的互联网协议。它支持128位的地址,流量控制和IPv4不支持的路由功能。...最常见的AF_INET,用于IPv4的互联网寻址。几乎目前所有互联网联网使用IP版本4。 AF_INET6用于IPv6互联网寻址。 IPv6是“下一代”版本的互联网协议。...首先使用gethostbyaddr()返回的主机名来查找名称,然后是主机的别名。被选中的第一名称,其中包括一个时期。如果没有完全合格的域名,返回的gethostname()返回的主机名。       ...(ip_address) 返回一个三元组(hostname,aliaslist,ipaddrlist),支持IPv4和IPv6。       ...socket.inet_aton(ip_string) 把字符串格式的ip地址转换为c语言格式,比如‘192.168.1.1’->c0a80101。支持IPV6需要使用inet_pton。

    81010

    Python获取本机 IPMAC(多网

    Python获取本机IP地址的一般方法为 import socket IP = socket.gethostbyname(socket.gethostname())   通过gethostname...如果主机有多个网卡/IP,怎样获取某个指定的IP地址呢?   一个方法是通过socket.gethostbyname_ex获取主机IP地址列表,然后遍历列表取得自己需要的IP。... localIP print(GetLocalIPByPrefix('192.168'))   更简单的方法(不用修改代码,还是用socket.gethostname函数),是通过配置hosts...** 跨平台的根据前缀获取 ip 的方法 import psutil # 多网卡情况下,根据前缀获取IP # 测试可用:Windows、Linux,Python 3.6.x,psutil 5.4.x...# ipv4/ipv6 地址均适用 # 注意如果有多个相同前缀的 ip,只随机返回一个 def GetLocalIPByPrefix(prefix): localIP = '' dic = psutil.net_if_addrs

    2.4K10

    linux网络编程系列(二)

    返回值:成功,则返回1,不成功返回0. 参数straddr:存放输入的点分十进制数IP地址字符串。 参数addrptr:传出参数,保存网络字节序的32位二进制数值。...域名与IP地址的对应关系 一般来讲,我们在上网的过程中都不愿意记忆冗长的IP地址,尤其到Ipv6时,地址长度多达128位,那时就更加不可能一次性记忆那么长的IP地址了。...在linux中,最常用的是gethostbyname()和gethostbyaddr(),它们都可以实现IPv4/IPv6的地址和主机名之间的转化。...其中gethostbyname()是将主机名转化为IP地址,gethostbyaddr()则是逆操作,是将IP地址转化为主机名。...参数hostname指向存放域名或主机名的字符串。 gethostbyaddr():用于将IP地址转换为域名或主机名。

    92230

    linux网络编程之socket(七):一个进程发起多个连接和gethostbyname等函数

    =53096 local ip=127.0.0.1 port=53097 local ip=127.0.0.1 port=53098 ferwgeht ferwgeht 即每个连接的ip地址是一样的...,但端口号不同,服务器方面通过accept返回的信息也打印出连接信息,如下: simba@ubuntu:~/Documents/code/linux_programming/UNP/socket$ ....=53098 ferwgeht 由于是多个连接,当客户端关闭而导致服务器子进程read 返回0退出进程时,很可能会产生僵尸进程,如下图: ?...) > 0)         ; } 二、与前面说的getsockname 类似的函数还有getpeername、gethostname、gethostbyname、gethostbyaddr 、getaddrinfo...、 getifaddrs, freeifaddrs、getnameinfo 等,现在着重来看一下gethostname 和 gethostbyname 的使用。

    1.7K00

    计网 | C语言Socket编程获取本机IP及指定域名IP

    这样编译运行的时候就可以自动链接了。 这样做相当于编译命令变成了gcc socket_exp.c -o socket_exp.exe -lwsock32 ,其中socket_exp是我的文件名。...len size_t 接收缓冲区的最大长度,可通过sizeof(name)获取。 返回值: 如果函数成功,则返回0。 如果发生错误则返回-1。错误号存放在外部变量errno中。...如果成功,返回的指针指向的结构体中包含所需信息,具体如下小节所示。...h_addrtype:gethostbyname() 不仅支持 IPv4,还支持 IPv6,可以通过此成员获取IP地址的地址族(地址类型)信息,IPv4 对应 AF_INET,IPv6 对应 AF_INET6...h_length:保存IP地址长度。IPv4 的长度为 4 个字节,IPv6 的长度为 16 个字节。 h_addr_list:这是最重要的成员。通过该成员以整数形式保存域名对应的 IP 地址。

    3.6K20
    领券