со списком пользователей на удаленном ПК с Windows пытается подключиться ко всем удаленным сетевым интерфейсам

Я использую Powershell и ADSI для перечисления пользователей в локальных группах на удаленных компьютерах. Ну, если честно, я тоже использовал Python и win32net, но результат тот же, так что, думаю, выбор языка здесь не имеет значения. Что я делаю в Powershell, это

$groupname = 'Administrators'
$group = [ADSI]("WinNT://$computer/$groupname")

$group.invoke("Members") | foreach {
.......
and then follows the code which process results

, где $ computer - это IP-адрес или имя хоста удаленной машины. Что происходит внизу, так это то, что сеанс SMB2 для целевой машины открывается и выполняются различные операции протокола SMB2, например, Tree Connect, lsa_LookupSids2 и т. Д. Наконец, возвращается результат, и нет никаких проблем с самим результатом.

Я заметил, что иногда возникает побочный эффект. Если удаленный компьютер имеет несколько сетевых интерфейсов (например, виртуальная машина с IP-адресом работает под NAT), эти сетевые интерфейсы и их IP-адреса перечислены с использованием FSCTL_QUERY_NETWORK_INTERFACE_INFO . После того, как результат (имена пользователей) был возвращен с основного IP-адреса (исходный целевой IP-адрес), исходная машина пытается подключиться к другим IP-адресам, которые она получила из этого запроса SMB2. Поскольку эти IP-адреса находятся под NAT, сеанс TCP прерывается.

Я также заметил, что такое поведение зависит от исходной машины. Оригинальный тест с таким поведением проводился на сервере Windows 2012. Я также пробовал запустить тот же код из Windows 7, но запросов FSCTL_QUERY_NETWORK_INTERFACE_INFO не было вообще. Естественно, никаких дополнительных попыток связаться с этими частными IP-адресами под NAT. Можно ли каким-либо образом настроить такое поведение (список всех возможных сетевых интерфейсов) на исходной машине? Некоторые настройки SMB2 в реестре или что-то еще?

0
задан 14 August 2018 в 12:20
1 ответ

Хорошо, после некоторого расследования я нашел ответ. Похоже, что в Windows 2012 Server есть некоторые дополнительные функции, связанные с SMB3, которые называются многоканальными. Он пытается объединить несколько сетевых интерфейсов (если таковые имеются) для увеличения пропускной способности. Для этого клиент сначала запрашивает сервер об интерфейсах / IP-адресах (в моем случае отправляется ответ). Затем он пытается установить еще один сеанс с этими IP-адресами (у меня это не сработало из-за NAT). Отключение / включение функциональности для клиента может быть выполнено следующим образом:

Set-SmbClientConfiguration -EnableMultiChannel $false

Можно также включить или отключить эту функциональность на стороне сервера. Дополнительную информацию по этому вопросу можно найти здесь https://blogs.technet.microsoft.com/josebda/2012/06/28/the-basics-of-smb-multichannel-a-feature-of-windows- server-2012-and-smb-3-0 /

0
ответ дан 5 December 2019 в 05:25

Теги

Похожие вопросы