Ни для кого не секрет, что нынче все крупные компании пытаются немного хитрить, когда дело доходит до технологий. Гугл изобретает новые протоколы, например ещё до появления http/2.0 их сервера успешно работали на его суррогате - протоколе spdy, сейчас это уже протокол quiс.
Но это всё лирическое отступление. На самом деле в этой статье речь идёт о некоторых способах, которыми приложения пытаются определить наличие интернетов в подключённой сети.
Итак, гугл в андроиде, хроме и некоторых других своих продуктах беззастенчиво делает http-запросы к указанным доменам:
address=/connectivitycheck.gstatic.com/192.168.88.2
address=/clients1.google.com/192.168.88.2
address=/clients.l.google.com/192.168.88.2
address=/clients3.google.com/192.168.88.2
address=/connectivitycheck.android.com/192.168.88.2
address=/play.googleapis.com/192.168.88.2
С них запрашивается урл http://domain.tld/generate_204 и в ответ ожидается 204 No content, но в принципе подходит и ответ 200 OK с любым телом ответа, другие статусы я не проверял, возможно, работают и они.
Windows 7 делает по другому, она делает запрос к
http://www.msftncsi.com/ncsi.txt
http://ipv6.msftncsi.com/ncsi.txt
в надежде получить 200 OK с любым содержимым тела ответа. Вторым шагом делается запрос к DNS dns.msftncsi.com в ответ обязательно должен вернуться адрес 131.107.255.255.
Windows 10 поступает по-своему, она просто запрашивает
http://www.msftconnecttest.com/connecttest.txt
http://ipv6.msftconnecttest.com/connecttest.txt
Ожидания те же - 200 OK с любым телом ответа.
В связи с тем, что и windows и google ведут себя плохо, если интернетов не обнаруживают, для устойчивого соединения необходимо подделать эти "проверки", например, с помощью dnsmasq и web-морды роутера.