Как Голанг кеширует DNS на Win10? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь написать http (s) прокси для исполняемого файла golang, вот что я сделал:

  1. Напишите .dll, которая перехватывает 'getaddrinfo', 'GetAddrInfoW', 'gethostbyname', перенаправьте весь домен на localhost.
  2. Вставьте .dll в golang_target.exe (теперь все запросы перенаправляются на localhost)

Ожидаемое : Я ожидал, что все запросы будут перенаправлены на localhost: 80 (443), и эти запросы не будут выполнены.

Результат : Когда DLL-файл внедряется, он не вступает в силу сразу, запросы по-прежнему работают нормально. Я добавил MessageBox в эти функции 'getaddrinfo ...', они не вызываются.

Но примерно через три минуты .dll, похоже, работает, все запросы терпят неудачу, и всплывающее окно MessageBox.

Вопрос : Полагаю, golang или ОС Windows кэширует dns и обновляет кэш каждые пару минут? Можно ли вручную обновить кеш? Так что я могу сделать .dll вступить в силу мгновенно.

1 Ответ

0 голосов
/ 03 ноября 2018

No Go (и стандартная библиотека большинства языков) не кэширует ответы DNS и просто полагается на ОС. IIRC Windows и macOS по умолчанию кэшируют DNS, но дистрибутивы Linux обычно этого не делают.

Если бы вы могли подключиться к вызову GetAddrInfoW, вы бы обошли кеш Windows (вы могли бы проверить, что Go вызывает системный вызов в lookupIP методе в src/net/lookup_windows.go), но я не думаю, что вы могли бы подключиться к использованию DLL, потому что Go имеет собственную реализацию syscall.

Кроме этого, вы можете очистить кэш DNS Windows, введя команду ipconfig /flushdns .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...