{"id":1173,"date":"2017-03-09T13:17:48","date_gmt":"2017-03-09T11:17:48","guid":{"rendered":"\/\/www.mcgill.org.za\/stuff\/?p=1173"},"modified":"2017-03-09T13:17:48","modified_gmt":"2017-03-09T11:17:48","slug":"what-are-the-ip-addresses-for-ns-records-of-co-za","status":"publish","type":"post","link":"https:\/\/www.mcgill.org.za\/stuff\/archives\/1173","title":{"rendered":"What are the IP addresses for NS records of co.za?"},"content":{"rendered":"<p>In short? 99.8% of the time, they are these:<\/p>\n<pre>ns1.coza.net.za.   IN A 66.135.62.20\r\nns.coza.net.za.    IN A 206.223.136.200\r\nns4.iafrica.com.   IN A 196.7.142.131\r\nns0.is.co.za.      IN A 196.4.160.17\r\nns0.neotel.co.za.  IN A 41.160.0.4\r\ncoza1.dnsnode.net. IN A 194.146.106.74<\/pre>\n<p>And the remaining 0.2% of the time?\u00a0 Let&#8217;s ask the root servers &#8211; what are the NS records for co.za:<\/p>\n<pre># <strong>dig @a.root-servers.net ns co.za<\/strong>\r\n ;; AUTHORITY SECTION:\r\n za. 172800 IN NS za1.dnsnode.net.\r\n za. 172800 IN NS nsza.is.co.za.\r\n za. 172800 IN NS za-ns.anycast.pch.net.\r\n za. 172800 IN NS sns-pb.isc.org.\r\n za. 172800 IN NS disa.tenet.ac.za.\r\n ;; ADDITIONAL SECTION:\r\n za1.dnsnode.net. 172800 IN A <strong>194.146.106.78<\/strong>\r\n nsza.is.co.za. 172800 IN A 196.4.160.27\r\n za-ns.anycast.pch.net. 172800 IN A 204.61.216.55\r\n sns-pb.isc.org. 172800 IN A 192.5.4.1\r\n disa.tenet.ac.za. 172800 IN A 196.21.79.50<\/pre>\n<p>Okay, that gets us za. Let&#8217;s ask one of them:<\/p>\n<pre># <strong>dig @194.146.106.78 ns co.za<\/strong>\r\n ;; ANSWER SECTION:\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n co.za. 3600 IN NS <strong>ns.coza.net.za.<\/strong>\r\n co.za. 3600 IN NS coza1.dnsnode.net.<\/pre>\n<p>Cool &#8211; we have names, but we don&#8217;t have IP addresses yet.\u00a0 So let&#8217;s go and find out what the IP address of <strong>ns.coza.net.za<\/strong> is.\u00a0 We already know the NS servers for <strong>.za<\/strong> but let&#8217;s pretend we don&#8217;t:<\/p>\n<pre><strong>dig @a.root-servers.net ns.coza.net.za a<\/strong>\r\n za. 172800 IN NS za1.dnsnode.net.\r\n za. 172800 IN NS disa.tenet.ac.za.\r\n za. 172800 IN NS nsza.is.co.za.\r\n za. 172800 IN NS za-ns.anycast.pch.net.\r\n za. 172800 IN NS sns-pb.isc.org.\r\n\r\n;; ADDITIONAL SECTION:\r\n za1.dnsnode.net. 172800 IN A 194.146.106.78\r\n disa.tenet.ac.za. 172800 IN A 196.21.79.50\r\n nsza.is.co.za. 172800 IN A <strong>196.4.160.27<\/strong>\r\n za-ns.anycast.pch.net. 172800 IN A 204.61.216.55\r\n sns-pb.isc.org. 172800 IN A 192.5.4.1<\/pre>\n<p>They say to ask the .net.za servers, and provide glue. Cool:<\/p>\n<pre># <strong>dig @196.4.160.27 a ns.coza.net.za<\/strong>\r\n ;; AUTHORITY SECTION:\r\n net.za. 86400 IN NS disa.tenet.ac.za.\r\n net.za. 86400 IN NS ns0.is.co.za.\r\n net.za. 86400 IN NS za-ns.anycast.pch.net.\r\n\r\n;; ADDITIONAL SECTION:\r\n ns0.is.co.za. 86400 IN A 196.4.160.17\r\n disa.tenet.ac.za. 86400 IN A 196.21.79.50<\/pre>\n<p>Let&#8217;s choose one of those that we happen to have glue for (we don&#8217;t want to be here all day):<\/p>\n<pre># <strong>dig @196.4.160.17 ns.coza.net.za<\/strong>\r\n ;; AUTHORITY SECTION:\r\n coza.net.za. 86400 IN NS beth.coza.net.za.\r\n coza.net.za. 86400 IN NS <strong>secdns1.posix.co.za.<\/strong>\r\n coza.net.za. 86400 IN NS ns1.coza.net.za.\r\n\r\n;; ADDITIONAL SECTION:\r\n ns1.coza.net.za. 86400 IN A 66.135.62.20\r\n beth.coza.net.za. 86400 IN A 206.223.136.193\r\n beth.coza.net.za. 86400 IN AAAA 2001:43f8:30::193<\/pre>\n<p>Let&#8217;s ask &#8220;<strong>secdns1.posix.co.za<\/strong>&#8221; &#8211; oh wait, we don&#8217;t have the NS for <strong>co.za<\/strong> yet and this is what we are trying to find out, so we&#8217;re sunk.\u00a0 This is a DNS loop.<\/p>\n<p>What is the probability of this error? Well, for a single query, the probability is 0.2 % &#8211; 1 in 500 or so. A simple way to understand this is that 500 international users connect to your .co.za web site, then 499 will find it, and 1 will not.<\/p>\n<pre># <strong>dnstraverse -t NS co.za<\/strong>\r\n Using a.root-servers.net (198.41.0.4) as initial root\r\n Running query co.za type NS\r\n 1 a.root-servers.net (198.41.0.4)\r\n 1.1 za1.dnsnode.net (194.146.106.78)\r\n 1.2 nsza.is.co.za (196.4.160.27)\r\n 1.2.1 ns0.is.co.za (196.4.160.17)\r\n 1.2.2 ns1.coza.net.za -- resolving\r\n 1.2.2 <strong>ns1.coza.net.za (66.135.62.20,Loop encountered resolving ns.coza.net.za)<\/strong>\r\n 1.2.3 ns4.iafrica.com -- resolving\r\n 1.2.3 ns4.iafrica.com (196.7.142.131)\r\n 1.2.4 ns0.neotel.co.za (41.160.0.4)\r\n 1.2.5 coza1.dnsnode.net -- resolving\r\n 1.2.5 coza1.dnsnode.net (194.146.106.74)\r\n 1.2.6 ns.coza.net.za -- resolving\r\n 1.2.6 <strong>ns.coza.net.za (206.223.136.200,Loop encountered resolving secdns1.posix.co.za)<\/strong>\r\n 1.3 za-ns.anycast.pch.net (204.61.216.55)\r\n 1.3.1 ns4.iafrica.com -- resolving\r\n 1.3.1 ns4.iafrica.com (196.7.142.131) -- completed earlier (1.2.3)\r\n 1.3.2 ns0.is.co.za (196.4.160.17) -- completed earlier (1.2.1)\r\n 1.3.3 ns0.neotel.co.za (41.160.0.4) -- completed earlier (1.2.4)\r\n 1.3.4 coza1.dnsnode.net -- resolving\r\n 1.3.4 coza1.dnsnode.net (194.146.106.74) -- completed earlier (1.2.5)\r\n 1.3.5 ns1.coza.net.za -- resolving\r\n 1.3.5 <strong>ns1.coza.net.za (66.135.62.20,Loop encountered resolving ns.coza.net.za) -- completed earlier (1.2.2)<\/strong>\r\n 1.3.6 ns.coza.net.za -- resolving\r\n 1.3.6 <strong>ns.coza.net.za (206.223.136.200,Loop encountered resolving secdns1.posix.co.za) -- completed earlier (1.2.6)<\/strong>\r\n 1.4 sns-pb.isc.org (192.5.4.1)\r\n 1.4.1 ns.coza.net.za -- resolving\r\n 1.4.1 <strong>ns.coza.net.za (206.223.136.200,Loop encountered resolving secdns1.posix.co.za) -- completed earlier (1.2.6)<\/strong>\r\n 1.4.2 ns1.coza.net.za -- resolving\r\n 1.4.2 <strong>ns1.coza.net.za (66.135.62.20,Loop encountered resolving ns.coza.net.za) -- completed earlier (1.2.2)<\/strong>\r\n 1.4.3 ns0.is.co.za (196.4.160.17) -- completed earlier (1.2.1)\r\n 1.4.4 ns4.iafrica.com -- resolving\r\n 1.4.4 ns4.iafrica.com (196.7.142.131) -- completed earlier (1.2.3)\r\n 1.4.5 ns0.neotel.co.za (41.160.0.4) -- completed earlier (1.2.4)\r\n 1.4.6 coza1.dnsnode.net -- resolving\r\n 1.4.6 coza1.dnsnode.net (194.146.106.74) -- completed earlier (1.2.5)\r\n 1.5 disa.tenet.ac.za (196.21.79.50)\r\n\r\nResults:\r\n 10.0%: Answer from coza1.dnsnode.net (194.146.106.74)\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n\r\n20.0%: Answer from za1.dnsnode.net (194.146.106.78)\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n\r\n20.0%: Answer from disa.tenet.ac.za (196.21.79.50)\r\n co.za. 86400 IN NS coza1.dnsnode.net.\r\n co.za. 86400 IN NS ns.coza.net.za.\r\n co.za. 86400 IN NS ns0.is.co.za.\r\n co.za. 86400 IN NS ns0.neotel.co.za.\r\n co.za. 86400 IN NS ns1.coza.net.za.\r\n co.za. 86400 IN NS ns4.iafrica.com.\r\n\r\n10.0%: Answer from ns0.is.co.za (196.4.160.17)\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n\r\n10.0%: Answer from ns4.iafrica.com (196.7.142.131)\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n\r\n9.8%: Answer from ns.coza.net.za (206.223.136.200)\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n\r\n10.0%: Answer from ns0.neotel.co.za (41.160.0.4)\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n\r\n10.0%: Answer from ns1.coza.net.za (66.135.62.20)\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns0.is.co.za.\r\n\r\n0.2%: Loop encountered at secdns1.posix.co.za\r\n While querying ns.coza.net.za\/IN\/A\r\n\r\n0.0%: Loop encountered at ns.coza.net.za\r\n While querying secdns1.posix.co.za\/IN\/A\r\n\r\nSummary Results:\r\n 99.8% answered with co.za. 3600 IN NS ns0.is.co.za.\r\n co.za. 3600 IN NS coza1.dnsnode.net.\r\n co.za. 3600 IN NS ns4.iafrica.com.\r\n co.za. 3600 IN NS ns1.coza.net.za.\r\n co.za. 3600 IN NS ns.coza.net.za.\r\n co.za. 3600 IN NS ns0.neotel.co.za.\r\n 0.2% resulted in a loop<\/pre>\n<p>This is why your internets come unglued just sometimes.<\/p>\n<p><strong>dnstraverse,<\/strong> by the way is awesome, but there is a kinda fatal bug when it tries to load its documentation under RHEL\/CentOS.\u00a0 To work around this, you can simply comment out the offending line in the code:<\/p>\n<pre># <strong>gem install dnstraverse<\/strong>\r\nFetching: dnsruby-1.60.0.gem (100%)\r\nInstalling dnsruby...\r\n\u00a0 For issues and source code: https:\/\/github.com\/alexdalitz\/dnsruby\r\n\u00a0 For general discussion (please tell us how you use dnsruby): https:\/\/groups.google.com\/forum\/#!forum\/dnsruby\r\nSuccessfully installed dnsruby-1.60.0\r\nFetching: dnstraverse-0.1.14.gem (100%)\r\nSuccessfully installed dnstraverse-0.1.14\r\nParsing documentation for dnsruby-1.60.0\r\nInstalling ri documentation for dnsruby-1.60.0\r\nParsing documentation for dnstraverse-0.1.14\r\n<strong>Killed<\/strong>\r\n# <strong>dnstraverse<\/strong> \r\n\/usr\/share\/rubygems\/rubygems\/core_ext\/kernel_require.rb:55:in `require': cannot load such file -- rdoc\/usage (LoadError)\r\n\u00a0\u00a0 \u00a0from \/usr\/share\/rubygems\/rubygems\/core_ext\/kernel_require.rb:55:in `require'\r\n\u00a0\u00a0 \u00a0from \/usr\/local\/share\/gems\/gems\/dnstraverse-0.1.14\/bin\/dnstraverse:<strong>25<\/strong>:in `&lt;top (required)&gt;'\r\n\u00a0\u00a0 \u00a0from \/usr\/local\/bin\/dnstraverse:23:in `load'\r\n\u00a0\u00a0 \u00a0from \/usr\/local\/bin\/dnstraverse:23:in `&lt;main&gt;'\r\n# <strong>sed -i '25 s\/^\/#\/' \/usr\/local\/share\/gems\/gems\/dnstraverse-0.1.14\/bin\/dnstraverse<\/strong>\r\n# <strong>dnstraverse<\/strong> \r\nparse error: Missing domain name parameter\r\nUsage: dnstraverse [options] DOMAIN\r\n\u00a0\u00a0\u00a0 -v, --[no-]verbose\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Run verbosely\r\n\u00a0\u00a0\u00a0 -d, --[no-]debug\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Debug mode.\u00a0 Use twice to turn on library debug.\r\n\u00a0\u00a0\u00a0 -r, --root-server HOST\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Root DNS server (default - ask local resolver)\r\n\u00a0\u00a0\u00a0 -a, --all-root-servers\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Find all root servers (default false)\r\n\u00a0\u00a0\u00a0 -t, --type TYPE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Record type (A, AAAA, SRV, WKS, NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, ANY\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --udp-size SIZE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UDP packet size (default 2048).\u00a0 Set to 512 to turn off EDNS0.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --allow-tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Try using tcp if udp truncated (default true)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --always-tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Always use tcp (default false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --max-depth DEPTH\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Maximum traversal depth (default 20)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --retries TIMES\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Number of 2s retries before timing out (default 2)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]follow-aaaa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Only follow AAAA records for referrals (default false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]root-aaaa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Look for IPv6 addresses for root servers (default false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-progress\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Display progress information (default true)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-resolves\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Display referral resolutions (default false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-servers\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Display list of servers seen (default false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-versions\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Display versions of dns servers (default true)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-all-stats\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Display statistics as we go (default false)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-results\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Display the results (default true)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]show-summary-results\u00a0 Display the summary results (default true)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --save-objects\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 --[no-]fast\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Fast mode (default true) turn off to be more accurate\r\n\u00a0\u00a0\u00a0 -h, --help\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Show full help\r\n\u00a0\u00a0\u00a0 -q, --quiet\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Supress supplementary information\r\n\u00a0\u00a0\u00a0 -V, --version\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Show version<\/pre>\n<p>This approach doesn&#8217;t work:<\/p>\n<pre># <strong>gem install rdoc<\/strong>\r\nFetching: rdoc-5.1.0.gem (100%)\r\nERROR:\u00a0 Error installing rdoc:\r\n\u00a0\u00a0 \u00a0rdoc requires RubyGems version &gt;= 2.2. Try 'gem update --system' to update RubyGems itself.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>In short? 99.8% of the time, they are these: ns1.coza.net.za. IN A 66.135.62.20 ns.coza.net.za. IN A 206.223.136.200 ns4.iafrica.com. IN A 196.7.142.131 ns0.is.co.za. IN A 196.4.160.17 ns0.neotel.co.za. IN A 41.160.0.4 coza1.dnsnode.net. IN A 194.146.106.74 And the remaining 0.2% of the time?\u00a0 &hellip; <a href=\"https:\/\/www.mcgill.org.za\/stuff\/archives\/1173\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[218,217,221,220,33,17,190,219],"class_list":["post-1173","post","type-post","status-publish","format-standard","hentry","category-stuff","tag-co-za","tag-dns","tag-dnstraverse","tag-glue","tag-networking","tag-rants","tag-stuff","tag-unglued"],"_links":{"self":[{"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/posts\/1173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/comments?post=1173"}],"version-history":[{"count":1,"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/posts\/1173\/revisions"}],"predecessor-version":[{"id":1174,"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/posts\/1173\/revisions\/1174"}],"wp:attachment":[{"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/media?parent=1173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/categories?post=1173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mcgill.org.za\/stuff\/wp-json\/wp\/v2\/tags?post=1173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}