Как WTware узнаёт информацию о соседях?
Как WTware узнаёт информацию о соседях?
С недавних пор в web-интерфейсе тонкого клиента появилась возможность посмотреть "соседей" - терминалы в этой же сети. Вот как на скрине ниже. Собственно вопрос в том, как они узнают о друг друге? Если это, конечно, не коммерческая тайна.
- Вложения
-
- Untitled.jpg (44.15 КБ) 7091 просмотр
-
- Разработчик
- Сообщения: 12047
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: Как WTware узнаёт информацию о соседях?
Широковещательными сообщениями. UDP порт 779. Работает только в той же сети, через маршрутизатор не пройдёт.
Конфигуратор с самого начала так узнавал соседей, к терминалам позже прикрутили.
Конфигуратор с самого начала так узнавал соседей, к терминалам позже прикрутили.
Re: Как WTware узнаёт информацию о соседях?
Спасибо. А можно как-то узнать формат ответа?
Я к чему спрашиваю. Я не использую конфигуратор, нету в сети свободной виндовой машины. Всё на линуксах. Вот и хотел сделать свой мониторинг. Опять же, если не коммерческая тайна.
-
- Разработчик
- Сообщения: 12047
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: Как WTware узнаёт информацию о соседях?
Что лучше: формат ответов или исполнимый файл под линукс, который запросит и распечатает?
Re: Как WTware узнаёт информацию о соседях?
Надеюсь, правильно вас понял.
Я смотрел трафик по 779 порту WireShark'ом. Думаю, не ошибусь, если скажу, что там полезная нагрузка или шифрована, или XOR'ена. В целом, мне не принципиально, как получить нешифрованные данные. Хотелось бы, чтобы я вот эту информацию мог каким-либо образом отобразить в "человекочитаемом" виде. Тут у меня три скрина. На первом и втором данные, которые вижу при загрузке терминала. На третьем - данные при клике на кнопку "Список терминалов" в веб интерфейсе одного из терминалов. Будет вообще классно, если смогу видеть полезные данные в обоих случаях.
По поводу "формата ответов". Может выразился неправильно. Мне надо полезные данные. А каким образом я их получу, не суть важно. Скажете как их расшифровать - отлично, сам напишу скрипты, которые будут с данными работать дальше. Предоставите исполняемый файл под линукс, который сможет висеть на 779 порту на DHCP сервере и "расшифровывать" полезные данные - тоже отлично. Хотя, первый вариант меня устроил бы больше. Сдаётся мне, что и других пользователей вашего продукта тоже))).
- Вложения
-
- photo_2024-04-17_17-17-02.jpg (164.1 КБ) 7034 просмотра
-
- photo_2024-04-17_17-16-35.jpg (149.63 КБ) 7034 просмотра
-
- photo_2024-04-17_17-20-23.jpg (168.54 КБ) 7034 просмотра
-
- Разработчик
- Сообщения: 12047
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: Как WTware узнаёт информацию о соседях?
Первый байт:
1 - discover, запрос переклички. Дальше ничего не будет.
2 - ответ на перекличку или самопредставление сразу после загрузки.
4 байта длины строки с версией.
Строка однобайтовых, версия.
4 байта длины строки имени хоста.
Строка однобайтовых, имя хоста.
6 байт МАК.
Дальше перечисление: "один байт команды, возможно полезная нагрузка".
Команда 1 - загрузились по сети, следом 4 байта IP dhcp сервера.
Команда 2 - загрузились с сидирома.
Команда 3 или 4 - загрузились с диска или USB флешки.
Команда 5 - платформа, следом 1 байт:
x86 = 1
uefi = 2
pi = 3
pi_64 = 4
Команда 6 - IP терминала. Следом 4 байта IP терминала. Может отличаться от IP отправителя пакета если терминал за NAT. Это чтобы работало discover= в конфиге.
Команда 8 - имя юзера с доменом. Следом один байт длины в двухбайтовых и затейливо ксореные двухбайтовые имя юзера с доменом.
Команда 7 - подпись всего что было в пакете до неё. Следом 64 байта подписи. Она должна быть последней в пакете. Не хочу открывать ключи.
Всё.
1 - discover, запрос переклички. Дальше ничего не будет.
2 - ответ на перекличку или самопредставление сразу после загрузки.
4 байта длины строки с версией.
Строка однобайтовых, версия.
4 байта длины строки имени хоста.
Строка однобайтовых, имя хоста.
6 байт МАК.
Дальше перечисление: "один байт команды, возможно полезная нагрузка".
Команда 1 - загрузились по сети, следом 4 байта IP dhcp сервера.
Команда 2 - загрузились с сидирома.
Команда 3 или 4 - загрузились с диска или USB флешки.
Команда 5 - платформа, следом 1 байт:
x86 = 1
uefi = 2
pi = 3
pi_64 = 4
Команда 6 - IP терминала. Следом 4 байта IP терминала. Может отличаться от IP отправителя пакета если терминал за NAT. Это чтобы работало discover= в конфиге.
Команда 8 - имя юзера с доменом. Следом один байт длины в двухбайтовых и затейливо ксореные двухбайтовые имя юзера с доменом.
Команда 7 - подпись всего что было в пакете до неё. Следом 64 байта подписи. Она должна быть последней в пакете. Не хочу открывать ключи.
Всё.
Re: Как WTware узнаёт информацию о соседях?
Спасибо огромное за столь развёрнутый ответ.
К сожалению, он не даёт ответа на вопрос, как узнать имя пользователя. Я понимаю, что там
Ключи ненужны. Но если ключ участвует в ксоре, ну что поделать.
К сожалению, он не даёт ответа на вопрос, как узнать имя пользователя. Я понимаю, что там
Но может расскажете, как их расксорить? Вероятнее всего эти данные ксорятся чем-то, что есть ранее в пакете?затейливо ксореные двухбайтовые имя юзера с доменом
Ключи ненужны. Но если ключ участвует в ксоре, ну что поделать.
-
- Разработчик
- Сообщения: 12047
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: Как WTware узнаёт информацию о соседях?
Проще собрать исполнимый файл для линуксов чем расписать, как оно ксорится. Вчера надо или подождёт неделю?
-
- Разработчик
- Сообщения: 12047
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: Как WTware узнаёт информацию о соседях?
Всего полтора месяца прошло
Попробуй это: http://wtware.com/testing/202406051652.zip
Статический бинарник для 64-битного x86 линукса. Скажи если надо под другую платформу собрать.
Ответы надо слушать на 779 UDP порту. В юниксах нельзя юзеру слушать порты ниже 1024. Так что или запускать под рутом, или оно само ещё два варианта предложит:
И затем запускаешь wtbroadcast-amd64 от юзера.
Или другой вариант, портфорвардишь udp с 779 на например 10779:
И затем запускаешь от юзера:
Оба изменения надо откатить если оно больше не нужно. setcap:
iptables:

Попробуй это: http://wtware.com/testing/202406051652.zip
Статический бинарник для 64-битного x86 линукса. Скажи если надо под другую платформу собрать.
Ответы надо слушать на 779 UDP порту. В юниксах нельзя юзеру слушать порты ниже 1024. Так что или запускать под рутом, или оно само ещё два варианта предложит:
Код: Выделить всё
sudo setcap 'cap_net_bind_service=+ep' ./wtbroadcast-amd64
Или другой вариант, портфорвардишь udp с 779 на например 10779:
Код: Выделить всё
sudo /sbin/iptables -A PREROUTING -t nat -p udp --dport 779 -j REDIRECT --to-port 10779
Код: Выделить всё
wtbroadcast-amd64 ip/mask 10779
Код: Выделить всё
sudo setcap -r ./wtbroadcast-amd64
Код: Выделить всё
sudo /sbin/iptables -D PREROUTING -t nat -p udp --dport 779 -j REDIRECT --to-port 10779