BT Internet: Non existent hosts mapping to 18.104.22.168
We have a test in our code which checks for unresolvable hosts and it started failing for me because instead of throwing an UnknownHostException from the following call:
InetAddress.getByName( "host.that.is.invalid" )
I was getting back a valid although unreachable host. When I called ping it was easier to see what was going on:
$ ping host.that.is.invalid PING host.that.is.invalid (22.214.171.124): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2
As you can see, that hostname is resolving to '126.96.36.199' which I thought was a bit weird but dig confirmed that this was happening:
$ dig host.that.is.invalid ; <<>> DiG 9.8.3-P1 <<>> host.that.is.invalid ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30043 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;host.that.is.invalid. IN A ;; ANSWER SECTION: host.that.is.invalid. 300 IN A 188.8.131.52
It turns out that BT have plugged into DNS searches and if one fails it redirects you to one of their pages instead - something I hadn't noticed before.
The site they direct you to is www.webaddresshelp.bt.com which contains a list of sponsored results for the search term 'host.that.is.invalid' in this case.
$ ping www.webaddresshelp.bt.com PING www.webaddresshelp.bt.com (184.108.40.206): 56 data bytes
Luckily this can be disabled by going to BT Web Address Help and then choosing to disable BT Web Address Help.
If we then wait a little bit for our DNS cache to clear the ping works as expected:
$ ping host.that.is.invalid ping: cannot resolve host.that.is.invalid: Unknown host