I want to display the DNS servers that are used by the current network setup on OS X, from the command line.
3 Answers
There are several ways - here are two:
cat /etc/resolv.conf -or-
scutil --dns - 1Its extremely annoying that
networksetup -getdnsserversdoesn'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...Geoff Nixon– Geoff Nixon2016-09-10 05:46:41 +00:00Commented Sep 10, 2016 at 5:46 - 6It's also good to note that
digornslookupdon'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 ofnslookupordig, usedscacheutil -q host -a name somehostname.comto test DNS resolution. It takes into account all configured DNS servers as well as their priority order.Ville– Ville2017-08-09 21:08:02 +00:00Commented Aug 9, 2017 at 21:08 - 7
cat /etc/resolv.confdoesn'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 --dnsPatrikN– PatrikN2018-04-04 08:43:31 +00:00Commented Apr 4, 2018 at 8:43 - 1I like
scutil --dns | grep nameserverto just get the DNS servers.SamAndrew81– SamAndrew812019-06-26 00:16:42 +00:00Commented Jun 26, 2019 at 0:16 -
/etc/resolv.confis no more used, butscutil --dnsgives to-the-point info.dvo– dvo2023-11-05 07:09:14 +00:00Commented Nov 5, 2023 at 7:09
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.
- 10This is the same as
scutil --dns | grep nameservercorrect (just different syntax)?SamAndrew81– SamAndrew812019-06-26 00:18:38 +00:00Commented Jun 26, 2019 at 0:18 - 1
- Technically this is process substitution, where the
<(...)creates a FIFO that can (often) be used in place of a file name. In this case,grepcan either read from stdin or a file, so either technique works, but they are not synonyms.shawkinaw– shawkinaw2023-01-26 01:58:21 +00:00Commented Jan 26, 2023 at 1:58 - Also
scutil --dns |creates a pipe, so at least w.r.t the result is the same, and I find it more intuitive to use than<(scutil --dns)because the data flow is "from left to right".dvo– dvo2023-11-05 07:17:09 +00:00Commented Nov 5, 2023 at 7:17
To get all into a comma separated line:
scutil --dns | sed -n '/nameserver/ { s/^.* : \(.*\)/\1/p; }' | sort -u | paste -s -d',' - - grep is much simpler why use the complex regexp?mmmmmm– mmmmmm2022-07-25 10:50:56 +00:00Commented Jul 25, 2022 at 10:50
- 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?estani– estani2022-07-26 10:16:41 +00:00Commented Jul 26, 2022 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 complexmmmmmm– mmmmmm2022-07-26 10:42:48 +00:00Commented Jul 26, 2022 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.estani– estani2022-07-26 13:00:36 +00:00Commented Jul 26, 2022 at 13:00 - 1@shawkinaw I misread the quotes and saw dvo answer, which is omitting them. Very nice!estani– estani2023-11-17 21:06:18 +00:00Commented Nov 17, 2023 at 21:06