В течение последнего дня я безуспешно пытался разрешить моей виртуальной машине Ubuntu разрешать имена NetBIOS в локальной сети, чтобы найти некоторые некомпьютерные устройства (принтеры, специальные устройства для штрих-кодов, и т. д.), у которых нет фиксированного IP.
Сначала я предположил, что не могу настроить использование winbind / wins для разрешения, хотя я читал все веб-страницы, которые когда-либо упоминали nsswitch.conf, и Я был уверен, что моя конфигурация правильная.
выполнение nmblookup printername
возвращает успешный результат, который выглядит так:
xxxx printername <00>
И это была моя первая подсказка, <00 > тип службы. Я запустил wirehark и попытался проверить связь с именем принтера
и увидел трансляцию NetBIOS. t запрашивает printername <20>
, на что никто не ответил.
Я остановил службу winbindd и запустил ее вручную на переднем плане, используя:
sudo winbindd -F -S -d 10
, затем попробовал тот же ping, и я увидел, что winbindd пытается выполнить тот же ошибочный запрос с <20 > вместо <00>.
Почему это происходит? Где это можно настроить?
РЕДАКТИРОВАТЬ: закрытие этого вопроса, поскольку это жестко запрограммировано в исходном коде. Покопавшись в коде, я нашел функцию в winbindd_wins_byname.c, закодированный как таковой:
subreq = resolve_wins_send (state, ev, state-> request-> data.winsreq,
0x20);
Вы должны получить возврат:
x.x.x.x printername<20>
windbindd
является правильным, поскольку тип службы <20> предназначен для служб общего доступа к файлам/принтерам. Вы пробовали настроить службу WINS из samba? Тип службы по умолчанию будет предоставлен, если клиент запрашивает общий ресурс, не указанный в smb.conf
.