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

为什么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函数(通过给定名字查找服务

47030

海豚调度连接Zookeeper超时定位

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

2.3K40
  • 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端口。

    81120

    一文带你了解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'

    42210

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

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

    80220

    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。

    79210

    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地址转换为域名或主机名。

    90730

    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.5K20

    Android开发之InetAddress基础入门简介与源码实例

    地址是IP使用32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP基础。...因此,通过DNS服务器查找域名工作就由getHostName方法来完成。 如果IP地址不存在或DNS服务器不允许进行IP地址和域名映射,就返回这个IP地址。...(address.getHostName());//直接返回IP地址 用域名作为getByName和getAllByName方法参数得到InetAddress对象,该对象会得到这个域名,当调用...getHostName时,就无需再访问DNS服务器,而是直接将这个域名返回。...使用IP地址 创建InetAddress对象 此时getCanonicalHostName方法和getHostName方法完全相同,返回都是主机名,而不是主机别名。

    1.7K21
    领券