Безопасные сокеты, DNS и тайм-ауты getnameinfo
-
26-10-2019 - |
Вопрос
Буквально вчера во время отладки моего приложения для Android я понял, что всякий раз, когда обратный поиск DNS невозможен, мое соединение требует много времени для запуска (примерно около 20-30 секунд).
мне удалось сузить источник до вызова InetAddress.getHostName() (это занимает так много времени), но я (к сожалению) не знаю, как это обойти.Я понимаю, что SSL-соединения без проверки DNS более подвержены атакам MITM;в таких случаях я бы предпочел уведомить пользователя о проблемах, а не заставлять его вечно ждать загрузки и подключения приложения.Я просматривал Интернет взад и вперед в поисках ответа, я мог найти способы исправить это в Java, но ни один из них не применим к Android (по крайней мере, я не мог ни кэшировать inetaddress, ни использовать альтернативные классы для разрешения имен хостов). с внедрить свойство).
Есть ли способ ограничить тайм-аут некоторыми разумными тайм-аутами (скажем:2-3 секунды)?Я хотел бы сэкономить время, которое мне нужно будет потратить на переписывание SSL-сокетов как собственного кода Android.
Спасибо!
Решение
это связано (было) связано с ошибкой в GLIBC, пытающейся выполнить обратный поиск имен хостов ipv6, даже если интерфейсы ipv6 не были настроены.
проблема и решение обсуждаются здесь:
https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/417757
это должно работать, если файл /etc/hosts обновлен для покрытия определенного IP-адреса