Распознавание NetBios имён

NetBios имена — это один из возможных способов именования компьютера по человечески, а не цифрами ip-адреса.
NetBios имена приняты в windows-сетях, и НИКАК не связаны с DNS именами.

смею немного поправить автора:

* NetBIOS — Вообще говоря, это протокол сетевого взвимодействия, оч. старый. Существует множество реализаций как совместимых, так и нет. То, что используем мы — это NetBT (NetBIOS over TCP/IP, RFC 1001-1002), старожилы сети могут вспомнить про IPX (NetBIOS over IPX). Наша всеми горячолюбимая M$ его немного 'расширила', впрочем не очень сильно.

* NetBT name service — сервис имен NetBT. Имена — это 16-ти символьные имена сервисов. M$ придала особый статус последнему 16-му символу, у нее он стал обозначать тип сервиса. Так 20h (шестнадцеричное) — служба сервера, 0 — хост, 3 — пользователь и т.д, и т.п. NetBT имеет родственные отношения с DNS (как протокол).

SmileX

Другими словами — как сделать, чтобы работал, например, ping arven или nmap -A sk ;-)
Есть несколько вариантов решения данной задачи, все они имеют корни в файле /etc/nsswitch.conf.

Если ВКРАТЦЕ:

/etc/nsswitch.conf: 'hosts: wins' (''hosts: files dns wins'')
$ locate libnss_wins
# USE="winbind" emerge -av samba (для gentoo linux)

А теперь подробнее:

Файл настроек ''/etc/nsswitch.conf''

nsswitch.conf - System Databases and Name Service Switch configuration file (c) `man nsswitch.conf`

Строка из /etc/nsswitch.conf (пример):

hosts:       files dns wins

Для справки: распознавание имен в linux происходит с помощью функций основной библиотеки си (glibc) gethostbyname и подобных, которые действуют согласно конфигурации в вышеуказанном файле.

Приведенная строка «hosts: …» указывает на то, что распознавание имени (нахождение ip, соответствующего данному имени) будет производиться в следующем порядке:
1. сначала будет произведена попытка найти это имя в файле /etc/hosts
2. если там его не найдем, будем искать DNS-имя (что также конфигурируется в файле /etc/resolv.conf)
3. иначе попытаемся определить ip с помощью программы-библиотеки /usr/lib/libnss_wins.so (см. далее)
Note: конечно, этот файл на то и существует, что его можно изменять. порядок распознавания можно изменять Note: Лучше располагать эти 3 пункта именно в таком порядке. wins — последний, т.к. broadcast 1) занимает сравнительно много времени (около секунды)

Отсюда следуют следующие способы решения задачи:

1 способ. Файл хостов ''/etc/hosts''

Можно жестко прописать файл хостов, (так делают, кажется, \\sk и еще кто-то :)).

Но этот метод имеет недостатки, идущие от статичной природы файла.

файл hosts, который использует DNS sk лежит тут:
http://sk/hosts

обновляется он не так часто; а сам файл делается скриптом от laska, поскольку дали мне его на некоторых условиях, выкладывать его не стану— sk
можно написать простенький скрипт, который создает hosts из \\laska\smb.log\network.txt, который доступен всегда, а создается все тем же пресловутым скриптом на laska — BAleks [2006-03-20 14:50]
могу выкладывать базу в формате /etc/hosts, сканируется на 2х машинах, обновляется раз в пять минут, но лучше пропишите наши dns (см. секцию ниже) — SmileX [2007-05-04 07:20]
Информация безбожно устарела. На счёт того, как мы собирали эту базу и как вам это сделать самостоятельно — смотрите мой комментарий в конце следующей секции. — SmileX [2010-12-18 12:23]
Написал наконец более-менее полезный скрипт:
#!/bin/sh 
rm network.txt hosts
smbget -an smb://laska/smb.log/network.txt
printf "127.0.0.1\t\tlocalhost\n" > hosts
mawk '{print $3 "\t\t" $1}' network.txt >> hosts
sudo cp -u hosts /etc/


Конечно, надо вначале установить smbget:
sudo apt-get install smbget
bash рулит! =)

\\tehnick

2 способ. Старый Добрый DNS

Некоторые добрые люди (кажется, опять же \\sk) сделали отображение netbios-имен в dns-имена (собственно, подняв и соответствующе настроив dns-сервер).

Адрес \\sk: 10.0.9.9

/etc/resolv.conf:

nameserver 10.0.0.64
nameserver 10.0.9.9

По текущей реализации этот способ фактически аналогичен 1-му (база хостов обновляется все-таки не мгновенно), но несколько лучше, т.к. вам не нужно заботиться о поддержании файла хостов актуальным.

10.0.24.[1,2,3,4] и 10.0.141.30 — база обновляется раз в пять минут (это две разные машины) — SmileX [2007-05-04 07:20]
Временно не работает \\NickeL
Это временно затянулось навсегда. Если кому-нибудь это вообще ещё нужно, то могу дать утилитку-сканер, генерирующую файлик формата, совместимого с /etc/hosts (она была написана и передавалась из рук в руки как раз где-то в 2007-м). Указанные выше кеширующие DNS-сервера были реализованы на основе dnsmasq (понимает формат hosts файлов), если кому-то интересно — могу выкопать из backup'ов использовавшиеся конфигурационные файлы. — SmileX [2010-12-18 12:19]

3 способ. Распознавание средствами samba

Что касается второго пункта — использования hosts: wins — библиотека libnss_wins.so устанавливается с пакетом samba2).

Странно, у меня самба собрана с -winbind, а фича работает…

\\c2h5oh [2006-02-28 14:40]

Note: название библиотеки (libnss_wins) отнюдь не означает использование wins-сервера — это зависит от настройки самбы в /etc/samba/smb.conf. Без wins-сервера libnss_wins распознает имена так же, как это делает команда nmblookup <имя>.

А вот я лично в этом сомневаюсь, да и в код libnss_wins достаточно красноречив: /* always try with wins first */, а уж затем /* uggh, we have to broadcast to each interface in turn */

Хотя… по некоторым сведениям, обращение к smb.conf таки происходит. В общем: будем проверять дальше + нужно посмотреть, как ведут себя разные версии samba.

Да, и на последок некоторые цифры, время запроса (time nmblookup some_body):

* без опции wins — ~0.47 секунды,

* с таковой — ~3.95 секунд,

как говорится: no comments…



проблема в самбе — оно вообще игнорирует name resolve order в smb.conf + libnss_wins жутко тормозит… (slackware/3.0.10, с дебовской 3.0.14 тормозов нет таких)

пора наконец-то обновиться…

SmileX
после обновления самбы работает на порядок быстрее, но из-за возникающих задержек (слабо ощущаемых при работе с машиной, как с десктопом) сие все же было отключено — мне ето не оч нужно, а вот на #xppop@rusnet задержки заметны… — SmileX
imo, это «большой тормаз», м.б. wins нас тут спас бы, но… перешли на собственный сканер+днс (см. секцию выше) — SmileX [2007-05-04 07:20]

ИМХО, это самый оптимальный метод по своей природе

1) в отсутствие wins-сервера, как у нас в сети
2) в Gentoo для этого необходимо USE=«winbind», в Debian просто apt-get install winbind

Обсуждение

\thevery, Y-m-d H:i

а теперь посоветуйте наиболее приемлимый способ для mac os :) mnblookup имя работает отлично, но хотелось бы и чтобы браузер понимал локальные имена. зы оба смайлексовсих днса похоже оффлайн.

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/names.txt · Последние изменения: Y-m-d H:i (внешнее изменение)
Наверх
CC Attribution-Noncommercial-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0