Нет тривиального определения того, какое «доменное имя» является родительским для любого конкретного «имени хоста».
Ваш текущий метод обхода дерева до тех пор, пока вы не увидите SOA
запись, на самом деле является наиболее правильным.
Технически, то, что вы делаете там, - это обнаружение «сокращения зоны», и в подавляющем большинстве случаев это будет соответствовать точке, в которой домен был делегирован от его TLD.
Любой метод, основанный на простом синтаксическом анализе имени хоста без ссылки на DNS, обречен на неудачу.
Либо используйте централизованно поддерживаемые списки доменов, ориентированных на делегирование, начиная с http://publicsuffix.org/,, но имейте в виду, что эти списки могут быть неполными и / или устаревшими.
См. Также этот вопрос , где все это было пройдено раньше ...