I want to display the DNS servers that are used by the current network setup on OS X, from the command line.
-
Same question: superuser.com/questions/258151/…– RicardoMay 11, 2021 at 23:08
3 Answers
There are several ways - here are two:
cat /etc/resolv.conf
-or-
scutil --dns
-
1Its extremely annoying that
networksetup -getdnsservers
doesn't work for DHCP-assigned DNS servers. I always forget aboutscutil
. The 'sc' stands for System Configuration? It sure doesn't configure much of the system... Sep 10, 2016 at 5:46 -
2It's also good to note that
dig
ornslookup
don't necessarily give a realistic picture of how the macOS applications resolve domain names from the local system, especially when multiple (domain-specific) DNSes have been configured, such as when using a VPN client for multiple concurrent connections. Instead ofnslookup
ordig
, usedscacheutil -q host -a name somehostname.com
to test DNS resolution. It takes into account all configured DNS servers as well as their priority order.– VilleAug 9, 2017 at 21:08 -
6
cat /etc/resolv.conf
doesn't seem like a "reliable" solution anymore. This is the notice I get in macOS High Sierra when using it: (sorry for the formatting - comments don't support simple line breaks) # macOS Notice # # This file is not consulted for DNS hostname resolution, address # resolution, or the DNS query routing mechanism used by most # processes on this system. # # To view the DNS configuration used by this system, use: # scutil --dns– PatrikNApr 4, 2018 at 8:43 -
1I like
scutil --dns | grep nameserver
to just get the DNS servers. Jun 26, 2019 at 0:16
The following shell command can be useful to list the current DNS entries:
grep nameserver <(scutil --dns)
To filter it out for the script, you can pipe the output into awk '{print $3}'
or grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
command.
-
7This is the same as
scutil --dns | grep nameserver
correct (just different syntax)? Jun 26, 2019 at 0:18 -
1
To get all into a comma separated line:
scutil --dns | sed -n '/nameserver/ { s/^.* : \(.*\)/\1/p; }' | sort -u | paste -s -d',' -
-
-
Which complex regex? I would differ that dots and starts are a complex regex... in any case this returns the IPs separated by commas, grep cannot extract those values, it just select lines. Or am I missing something?– estaniJul 26 at 10:16
-
Any regex including \ is complex to me and I suspect most programmers. ANyway it is more complex in this case than grep. The OP only wants to display the IPs so why go more complex– mmmmmmJul 26 at 10:42
-
ok. '\' is an escape sequence, not part of the regex, but part of
sed
. The title of my answer already states what this does, which is what I needed (and anyone doing anything with the IP afterwards within the same shell). I'm sorry you don't like that I shared.– estaniJul 26 at 13:00 -
that is my point to enter a regex you need to escape characters. How can you enter in a script just the regex. You can't separate the two you can only deal with the presentation on the screen. Even then it is just odd characters– mmmmmmJul 26 at 19:27