Python socket.gethostname()返回错误的主机名

Python socket.gethostname()返回错误的主机名,python,macos,sockets,hostname,Python,Macos,Sockets,Hostname,当我安装MacBookPro时,我把主机名改成了我的名字Tristan。我正在尝试使用套接字并调用: socket.gethostbyname(socket.gethostname()) 它没有给我错误socket.gaierro:[Errno 8]nodename或servname,或者不知道 我认为这是一个问题,因为我已经更改了名称。如果我键入: socket.gethostname('Tristan.local') 它实际上打印出正确的ip地址。我朋友的Mac没有更改主机名,它返回她所

当我安装MacBookPro时,我把主机名改成了我的名字
Tristan
。我正在尝试使用套接字并调用:

socket.gethostbyname(socket.gethostname())
它没有给我错误
socket.gaierro:[Errno 8]nodename或servname,或者不知道

我认为这是一个问题,因为我已经更改了名称。如果我键入:

socket.gethostname('Tristan.local')
它实际上打印出正确的ip地址。我朋友的Mac没有更改主机名,它返回她所在网络的地址。如何将我的主机名更改回本地主机名,或执行任何需要执行的操作,以便:

socket.gethostbyname(socket.gethostname())

再次工作?当时我以为把它改成我的名字很有趣,但现在我充满了遗憾。

gethostname
通常只报告
/etc/hostname
或等效名称,这可能只是一个虚构的名称
gethostbyname
尝试解析该名称,除非它也在某些系统设置为匹配的
/etc/hosts
中,并且您配置的DNS服务器无法解析该名称,否则您将得到一个错误

因此,您可以尝试在
/etc/hosts
中修复旧名称下的名称,或者忽略该名称,按原样使用主机名


记住,除非您的公共和私有IP匹配,否则DNS结果无论如何都是无用的。您可能想要的是点击一个服务来确定您的实际外部IP。

gethostname
通常只报告
/etc/hostname
或其等效内容,这可能只是一个虚构的名称
gethostbyname
尝试解析该名称,除非它也在某些系统设置为匹配的
/etc/hosts
中,并且您配置的DNS服务器无法解析该名称,否则您将得到一个错误

因此,您可以尝试在
/etc/hosts
中修复旧名称下的名称,或者忽略该名称,按原样使用主机名



记住,除非您的公共和私有IP匹配,否则DNS结果无论如何都是无用的。您可能需要点击一个服务,如确定您的实际外部IP。

如果您的主机名没有相关的DNS,您可能无法得到答案。也就是说,如果它是马丁斯计算机。本地的或类似的DNS无法理解它。对于没有固定地址的系统,主机名主要是装饰性的。对于具有静态IP地址的服务器,这更可靠,但由于防火墙的原因,它们的内部和外部IP可能会显著不同。那么,在我的朋友计算机上,它返回'd-10-19-250-80.dhcp4.washington.edu'的原因是什么呢?我假设它是本地网络的地址,而我的只是返回名称?在这种情况下,它看起来像一个可以通过DNS解析的名称,所以它可以工作。你的可能没有那样的地址。一些DHCP服务器使用正确的DNS名称发布IP,但大多数没有。大学是不寻常的,因为他们通常有数千个IP免费供学生使用,但公司的IP预算要严格得多。因此,在这种情况下,如果我需要找到连接到服务器套接字但无法通过gethostbyname()找到的IP地址,我应该为我的代码做些什么?如果您的主机名没有关联的DNS,您可能得不到答案。也就是说,如果它是马丁斯计算机。本地的或类似的DNS无法理解它。对于没有固定地址的系统,主机名主要是装饰性的。对于具有静态IP地址的服务器,这更可靠,但由于防火墙的原因,它们的内部和外部IP可能会显著不同。那么,在我的朋友计算机上,它返回'd-10-19-250-80.dhcp4.washington.edu'的原因是什么呢?我假设它是本地网络的地址,而我的只是返回名称?在这种情况下,它看起来像一个可以通过DNS解析的名称,所以它可以工作。你的可能没有那样的地址。一些DHCP服务器使用正确的DNS名称发布IP,但大多数没有。大学是不寻常的,因为他们通常有数千个IP免费供学生使用,但公司的IP预算要严格得多。因此,在这种情况下,如果我需要找到连接到服务器套接字但无法通过gethostbyname()找到的IP地址,我应该为我的代码做些什么?那么分配给她的DHCP地址只是她每次连接到学校网络时获得的动态地址?有没有办法让我找出我的是什么或者她的笔记本电脑返回动态地址而我的不是的原因?学校的网络发布了实际的DNS可解析地址,所以他们的网络团队做了一些非常好的工作。大多数内部网络没有。您只需获得类似于
192.168.2.11
的内容,然后通过NAT处理它。您可能位于不同的网络上,或者您的配置正在覆盖名称分配。Windows、Linux和macOS对此的处理方式不同。如果你要从Mac到Mac,你可以直接使用Bonjour
.local
地址,这样应该可以工作,所以
gethostname
就足以为你提供一个可路由的IP。或者,您可以尝试挖掘您的本地IP,但复杂的是您可能有几个(有线、无线等),这更有意义,谢谢。我想我还是有点困惑,为什么一台笔记本电脑返回DHCP而另一台不返回。这可能是MAC地址亲缘关系,或者DHCP的其他一些怪癖。在不同的网络上尝试此操作,如本地咖啡馆或图书馆,我打赌在两台机器上都会得到相同的结果。因此,分配给她的DHCP地址只是她每次连接到学校网络时获得的动态地址?有没有办法让我找出我的是什么或者她的笔记本电脑返回动态地址而我的不是的原因?学校的网络发布了实际的DNS解析地址,所以这是一些非常好的wo