Basically, what happens when you change your nameservers at your registrar is that they submit the changes to the registry, which keeps a WHOIS database as well as an authoritative nameserver for that TLD. So, in theory, the AS for your TLD is the first to know about the changed nameservers via updated NS records. That is where the DNS propagation begins.
IP tools or a direct DNS lookup via command line tools like nslookup or dig are the best way to see what the nameservers are set as. However, to see if the nameservers have been set properly before the DNS info fully propagates, you need to use the authoritative nameservers for your TLD. Otherwise, these tools will use the default local DNS server, which is likely a DNS cache.
So to do what you want manually, you have to:
1. Find the authoritative nameservers for your TLD
The root zone file lists the AS of all TLDs; however, you need to find the ones for your TLD. You can find this out with a simple dig command:
$ dig +short NS com
j.gtld-servers.net.
b.gtld-servers.net.
d.gtld-servers.net.
[...]
e.gtld-servers.net.
k.gtld-servers.net.
l.gtld-servers.net.
2. Then look up the NS records for your domain via one of them:
You can do this with dig:
$ dig ns example.com @j.gtld-servers.net
; <<>> DiG 9.6-ESV-R4 <<>> NS example.com @j.gtld-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27086
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;example.com. IN NS
;; AUTHORITY SECTION:
example.com. 172800 IN NS a.iana-servers.net.
example.com. 172800 IN NS b.iana-servers.net.
;; ADDITIONAL SECTION:
[...]
;; Query time: 170 msec
;; SERVER: 192.48.79.30#53(192.48.79.30)
;; WHEN: Fri Feb 24 11:39:21 2012
;; MSG SIZE rcvd: 165
or nslookup:
C:\>nslookup example.com j.gtld-servers.net
(root) nameserver = e.root-servers.net
[...]
(root) nameserver = d.root-servers.net
Server: UnKnown
Address: 192.48.79.30
Name: example.com
Served by:
- a.iana-servers.net
199.43.132.53
2001:500:8c::53
example.com
- b.iana-servers.net
199.43.133.53
2001:500:8d::53
example.com
Or just do it the easy way
Alternatively, you could have simply used the dig +trace command to do a DNS trace. However, this may not work with your local DNS server, so it's best to do it via a public DNS server like Google's:
$ dig example.com +trace @8.8.8.8
; <<>> DiG 9.6-ESV-R4 <<>> example.com +trace @8.8.8.8
;; global options: +cmd
. 14412 IN NS e.root-servers.net.
[...]
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 28 ms
com. 172800 IN NS j.gtld-servers.net.
[...]
com. 172800 IN NS b.gtld-servers.net.
;; Received 489 bytes from 192.228.79.201#53(b.root-servers.net) in 16 ms
example.com. 172800 IN NS a.iana-servers.net.
example.com. 172800 IN NS b.iana-servers.net.
;; Received 165 bytes from 192.52.178.30#53(k.gtld-servers.net) in 156 ms
example.com. 172800 IN A 192.0.43.10
example.com. 172800 IN NS b.iana-servers.net.
example.com. 172800 IN NS a.iana-servers.net.
;; Received 93 bytes from 2001:500:8c::53#53(a.iana-servers.net) in 12 ms
As you can see, this automatically fetches the NS records from one of the ASes but also lists all the ASes for your TLD so you can do a manual NS lookup on each one individually as shown earlier if you want.