Безопасные сокеты, DNS и тайм-ауты getnameinfo - PullRequest
2 голосов
/ 26 июля 2011

только вчера, во время отладки моего приложения для Android, я обнаружил, что всякий раз, когда обратный просмотр DNS невозможен, моему соединению требуется куча времени для инициации (примерно 20-30 секунд).

Мне удалось сузить исходный код до вызова InetAddress.getHostName () (вот где это занимает так много времени), но я (к сожалению) не знаю, как мне это обойти.Я понимаю, что SSL-соединения без проверки DNS более подвержены атакам MITM;в таких случаях я бы предпочел уведомить пользователя о проблемах, а не заставлять его ждать, пока приложение загрузится и подключится.Я просматривал веб-сайт назад и вперед в поисках ответа, я мог найти способы исправить это в Java, но ни один из них не применим к Android (по крайней мере, я не мог кэшировать неадресный адрес или использовать альтернативные классы для разрешения имен хостов)со свойством impl ).

Можно ли как-нибудь ограничить время ожидания некоторыми разумными тайм-аутами (скажем, 2-3 секунды)?Я хотел бы сэкономить время, которое мне нужно было бы потратить на переписывание ssl-сокетов в качестве нативного кода Android.

спасибо!

1 Ответ

1 голос
/ 28 июля 2011

это (было) связано с ошибкой в ​​GLIBC, пытающейся отменить поиск имен хостов ipv6, даже если интерфейсы ipv6 не были настроены.

проблема и исправление обсуждаются здесь:

https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/417757

это должно работать, если файл / etc / hosts обновлен, чтобы охватить определенный IP-адрес

...