[issue35164] socket.getfqdn and socket.gethostbyname fail on MacOS
James Crowther added the comment: Hi Ronald, I've replied to your comments below >My gut feeling is that this is some issue with your system or environment. I Doubt it, happens with another MacBook air which is literally out of the box, no mods. >Some more questions: >- Is this is a consistent problem, or only on some networks? All networks >- Do you have any custom settings in the Networking preference pane related to >name resolution (extra search domains, DNS servers, ...)? No >- Do the domains returned by the DHCP server actually exist? Not sure >- Likewise for the DNS servers likewise not sure >- Does the result of socket.gethostname() look sane? In particular, does this >include a domain name? it is given a name that includes the ip address and the name of the router. >- The original message mentions: "and that the DHCP servers provides one ore >more domains to be useles for resolution.". What is meant by that? AFAIK the >DHCP server can only return 1 domain name, not a full DNS search list (or at >least not one that is used by most major platforms). Not sure what was meant by this comment. -- ___ Python tracker <https://bugs.python.org/issue35164> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue35164] socket.getfqdn and socket.gethostbyname fail on MacOS
James Crowther added the comment: Hi guys, I am the OP for the stack overflow issue question that sparked this bug report. In response to Ned's question about configuration of the system: MacOS 10.14.1 Installed x-code and command line tools python versions used, varies, 3.5.3, 3.6 and 3.7.0 (sorry can't be more specific about 3.6 since I've used a lot. These python configurations have been both a bundled python env in blender, and also MacOS's native python 2.7. So far they've all had the same issue, that being; socket.gethostname() returns a value that seems to be set by the router/switch if scutil --set hostname somehostname has not been run. What Sorin mentioned on the stack overflow question that he didn't here (and I feel is important) is that ping and nslookup work with the expected hostname, i.e. the one the user can actually see by going to the system preferences and viewing it under the sharing section. Here it is called "Computer name", analogous to the same used on windows (which I might add has no such issues with hostnames being set to something other than the computer name unless a certain command is run). So the real issue for us, is how come ping and nslookup will work fine with the macOS "computer name" but the socket module uses something else, seemingly the hostname and computer name are not or loosely connected on macOS perhaps. Ideally what we need here is a way to ensure that the user can input the computer name of a target machine on another system and that system resolve the ip address for the target machine. We can't currently use socket.gethostname for this on mac since it seems to require that the scutil --set hostname command has been run. Otherwise the hostname that is returned doesn't work with socket.gethostbyname(hostname). Hope this helps, happy to clarify. J. -- nosy: +James Crowther ___ Python tracker <https://bugs.python.org/issue35164> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29705] socket.gethostbyname, getaddrinfo etc broken on MacOS 10.12
New submission from James Crowther: Currently I can't use socket to resolve host names to IP addresses. This is something critical to mine as well as other applications that run over networks. When I attempt to do the following: import socket socket.getaddrinfo(hostname, None) or socket.gethostbyname(hostname) I get socket.gaierror: [Errno 8] nodename nor servename provided, or not known. This works perfectly on both linux kubuntu 16.0. and windows 7,10. Seems that the introduction of Yosemite might be the point at which this broke by doing a simple google search for "macos socket.gethostbyname gaierror". -- components: Library (Lib) messages: 288840 nosy: James Crowther priority: normal severity: normal status: open title: socket.gethostbyname, getaddrinfo etc broken on MacOS 10.12 type: behavior versions: Python 3.5 ___ Python tracker <http://bugs.python.org/issue29705> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29705] socket.gethostbyname, getaddrinfo etc broken on MacOS 10.12
James Crowther added the comment: Hi Ned, Doesn’t seem to matter, I can try my local host name given by; socket.gethostname() or I can try another host on the network, same result. If I do the exact same operation using the same python version on windows or linux, then I get the expected result from gethostbyname which is the ip address of the host. Also on macOS 10.6.8 this still works, using the same version of python. Happy to give more details if you need. James > On 3 Mar 2017, at 11:27 am, Ned Deily wrote: > > > Ned Deily added the comment: > > What value are you using for hostname? > > -- > nosy: +ned.deily > > ___ > Python tracker > <http://bugs.python.org/issue29705> > ___ -- ___ Python tracker <http://bugs.python.org/issue29705> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29705] socket.gethostbyname, getaddrinfo etc broken on MacOS 10.12
James Crowther added the comment: Hi Ned, Currently running 10.12.3. and output is as follows Jamess-MacBook-pro:crowdrender_repository jamesmac$ python3.5 Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import socket >>> hostname = socket.gethostname() >>> socket.getaddrinfo(hostname, None) Traceback (most recent call last): File "", line 1, in File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/socket.py", line 732, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno 8] nodename nor servname provided, or not known >>> This is a commonly prescribed method of resolving the ip address of your own machine on a LAN, also if I try another machines hostname which is on the local network, I get the same result. As for the experiments you tried, these do work, but that is not what I want to use the socket library for, I want to query the IP address of hosts on the LAN, localhost is no use to me, its just the loop back address. I have a windows machine on my network and its hostname is James-PC, if i do socket.getaddrinfo(“James-PC”) I get the same error. This works if I reboot the mac (the same one that is having the issues) into linux and run the exact same command. I get the expected output from getaddrinfo. So, how come this approach doesn’t work on my mac? Also why are others having the same issue with Yosemite and sierra, this is not just me that is reporting this odd behaviour too. I’ve seen it in other forums. Kind Regards James > On 3 Mar 2017, at 11:41 am, Ned Deily wrote: > > > Ned Deily added the comment: > > Sorry, I can't reproduce that behavior with my macOS 10.12, 10.11, or 10.10 > systems if the hostname is a valid string including "localhost". If the > string is empty or hostname is None, then I see Errno 8. > > $ /usr/local/bin/python3.6 > Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13) > [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin > Type "help", "copyright", "credits" or "license" for more information. >>>> import socket >>>> hostname = 'python.org' >>>> socket.getaddrinfo(hostname, None) > [(, , 17, '', > ('23.253.135.79', 0)), (, 1>, 6, '', ('23.253.135.79', 0)), (, > , 17, '', ('2001:4802:7901::e60a:1375:0:6', 0, 0, > 0)), (, , 6, '', > ('2001:4802:7901::e60a:1375:0:6', 0, 0, 0))] >>>> hostname = "localhost" >>>> socket.getaddrinfo(hostname, None) > [(, , 17, '', ('::1', > 0, 0, 0)), (, , 6, '', > ('::1', 0, 0, 0)), (, , > 17, '', ('127.0.0.1', 0)), (, > , 6, '', ('127.0.0.1', 0))] >>>> hostname = "" >>>> socket.getaddrinfo(hostname, None) > Traceback (most recent call last): > File "", line 1, in > File > "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/socket.py", > line 743, in getaddrinfo >for res in _socket.getaddrinfo(host, port, family, type, proto, flags): > socket.gaierror: [Errno 8] nodename nor servname provided, or not known > > Perhaps there is something different about your hostname configuration on > your Mac? macOS has some unusual ways of configuring the hostname > resolutions. I don't have time at the moment to investigate further. But > Python's socket module interfaces tend to be very thin wrappers around the > underlying OS provided APIs. Perhaps you could test with a small C program > that does the equivalent. > > -- > > ___ > Python tracker > <http://bugs.python.org/issue29705> > ___ -- ___ Python tracker <http://bugs.python.org/issue29705> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29705] socket.gethostbyname, getaddrinfo etc broken on MacOS 10.12
James Crowther added the comment: Hi Ned, Thats ok, thanks! I’m going to try it on another machine, its really strange, I’m wondering what I might have done on my mac to cause it to flake out like this. Will do some more testing with other macs running 10.12 and see if they have the same behaviour, by the way, thanks for running that last test as it shows that this call is actually working on some systems. I really need to know the reason why its not working on mine, I have about 120 users and need to be sure that they’re not going to have our next build break if we rely on this call. Thanks :D James > On 3 Mar 2017, at 1:45 pm, Ned Deily wrote: > > > Ned Deily added the comment: > > James, I'm sorry I didn't show it but using socket.gethostname() as the > source of hostname works just fine, too. > > import socket >>>> hostname = socket.gethostname() >>>> hostname > 'harj.local' >>>> socket.getaddrinfo(hostname, None) > [(, , 17, '', > ('fe80::8d8:1de3:dfa:e34c%en1', 0, 0, 5)), (, > , 6, '', ('fe80::8d8:1de3:dfa:e34c%en1', 0, 0, > 5)), (, , 17, '', > ('10.0.1.7', 0)), (, , > 6, '', ('10.0.1.7', 0))] > > I don't know what to tell you other than the behavior you are seeing is > almost certainly not a Python issue. There are many other ways to explore > host names, like using the "host" command line utility or "netstat". But > that is all beyond the scope of this bug tracker. If you need more > assistance, perhaps ask on one of the StackExchange forums or Apple lists. > I'm going to close this issue; if you are able to isolate what appears to be > a Python issue here, please feel free to re-open this. Good luck! > > -- > resolution: -> works for me > stage: -> resolved > status: open -> closed > > ___ > Python tracker > <http://bugs.python.org/issue29705> > ___ -- ___ Python tracker <http://bugs.python.org/issue29705> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com