Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Windows Новый топик    Ответить
 Как получить список всех доменов в локальной сети  [new]
Романыч84
Member

Откуда:
Сообщений: 284
Как получить список всех доменов в локальной сети в виде DC=macronet, DC=ru.
Через
objRoot =GetObject("LDAP://RootDSE");
strDomain=objRoot.Get("DefaultNamingContext");
получаю текущий домен, а как все? WinNT не предлагать.

Спасибо.

--------------------------------------------------------------
Мой первый сайт
сайт developers.do.am
7 дек 10, 03:50    [9896078]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
aleks2
Guest
А никак.
И если вы немного подумаете, то лехко осознаете: почему никак.
7 дек 10, 07:18    [9896130]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Романыч84
Member

Откуда:
Сообщений: 284
А почему, интересно, я уже догадываюсь что никак, но почему-то же WinNT возвращает список доменов?
7 дек 10, 07:24    [9896135]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
aleks2
Guest
Романыч84
А почему, интересно, я уже догадываюсь что никак, но почему-то же WinNT возвращает список доменов?


Патаму, что в WinNT ОБЯЗАТЕЛЬНО есть NetBIOS. Но его могет и не быть в остальных Win.
7 дек 10, 07:59    [9896157]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
Романыч84
А почему, интересно, я уже догадываюсь что никак, но почему-то же WinNT возвращает список доменов?

С помощью какой функции?
И попробуй WNetEnumResource, но она недостаточно документирована.
7 дек 10, 08:53    [9896277]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
aleks2
Guest
Anatoly Podgoretsky
Романыч84
А почему, интересно, я уже догадываюсь что никак, но почему-то же WinNT возвращает список доменов?

С помощью какой функции?
И попробуй WNetEnumResource, но она недостаточно документирована.


Даже эльфу 80 уровня не под силу эта задача. А уж он-то (эльф) знает ругательства... тьху... заклинания покрепче.

ЗЫ. Не порите чушь. НИКТО в локальном сегменте без NetBIOS не обладает списком доменов. По определению.
7 дек 10, 09:45    [9896475]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
NetBIOS это подсистема LanMan и она доступна даже и без прямого доступа, через NetBIOS over TCP/IP, как правило это не отключают, только серьезно озабоченые безопасностью.
7 дек 10, 10:30    [9896810]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Романыч84
Member

Откуда:
Сообщений: 284
Anatoly Podgoretsky
Романыч84
А почему, интересно, я уже догадываюсь что никак, но почему-то же WinNT возвращает список доменов?

С помощью какой функции?
И попробуй WNetEnumResource, но она недостаточно документирована.


Мне надо что-нибудь из COM объектов, делаю обзор всех принтеров в сети, но вижу только один домен к которому сам подключен.
7 дек 10, 11:36    [9897401]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Crazy_Driver
Member

Откуда: α2000 = 14ч39м36с,5, δ2000 = -60°50'02"
Сообщений: 876
Романыч84
strDomain=objRoot.Get("DefaultNamingContext");


Ну кагбе это и подразумевает получение текущего домена.
Ксате, гугл рулит http://www.script-coding.info/ADSI.html

На шарпе:
Domain domain = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, "yourDomain", "username", "password"));

Forest forest = domain.Forest;

DomainCollection domains = forest.Domains;

Стырено с инета
7 дек 10, 17:57    [9900817]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Романыч84
Member

Откуда:
Сообщений: 284
Crazy_Driver
Романыч84
strDomain=objRoot.Get("DefaultNamingContext");


Ну кагбе это и подразумевает получение текущего домена.
Ксате, гугл рулит http://www.script-coding.info/ADSI.html

На шарпе:
Domain domain = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, "yourDomain", "username", "password"));

Forest forest = domain.Forest;

DomainCollection domains = forest.Domains;

Стырено с инета


Это мое первое знакомство с ADSI, эту страничку я видел. Но WinNT возвращает список доменов не в том виде что мне надо (DC=macronet, DC=ru.)
8 дек 10, 04:22    [9902511]     Ответить | Цитировать Сообщить модератору
 Re: Как получить список всех доменов в локальной сети  [new]
Crazy_Driver
Member

Откуда: α2000 = 14ч39м36с,5, δ2000 = -60°50'02"
Сообщений: 876
Романыч84
Это мое первое знакомство с ADSI, эту страничку я видел. Но WinNT возвращает список доменов не в том виде что мне надо (DC=macronet, DC=ru.)


Еcли это несвязанные между собой домены, то в желаемом виде не получить никак. Ибо в таком виде их можно получить только через LDAP с контроллера искомого домена, на котором еще надо авторизоваться. Если это домен с поддоменами, то ситуация несколько проще - нужно обращатся к глобальному каталогу. По этому вопросу гугл выдает следующее:

Выведение адрес LDAP от имени домена NT

С учетом стиля учетная запись NT имя (DOMAIN\UserName) это можно сделать вывод, что адрес LDAP для этого домена является тем, что информация о пользователе может посмотрел?

Мой сценарий: у меня есть приложение asp.net, под управлением IIS, который принимает как анонимные и пользователей домена. Анонимные пользователи должны подписать, но пользователи домена проверить сервер заголовки для имени пользователя домена, предоставляемых службами IIS. Мне нужно, чтобы найти некоторую информацию из active directory, как адрес электронной почты и т.д.У меня это работает, если адрес LDAP в файле конфигурации, но предпочел бы не должны поддерживать это значение дополнительных настроек, если я могу избежать его.
Этот вопрос возник из stackoverflow.com
Вопрос по Graham Ambrose
Ответ


Если все домены являются частью того же леса, вы должны быть способны сделать seach глобального каталога (GC: / / вместо LDAP: / /). Вы можете получить только частичное атрибут обратно, но вы можете получить distinguishedName, а затем стандарта LDAP: / / поиск.

Если вы находитесь в ситуации, когда у вас есть разные домены, которые находятся в разных лесах, один простой способ будет построить таблицу подстановки ваших доменных имен NetBIOS. Для каждого леса, вы выполните поиск по поддереву, CN = Partitions, CN = Конфигурация, DC = имя_домена, DC = com с фильтром (netBIOSname = *) и вы получите обратно список доменов в лесу. Атрибут dnsRoot даст вам DNS-имя домена, и вы можете просто использовать, привязка к, или сделать просмотр DNS его и использовать первый адрес, вы получите привязываемого к. Или можно использовать dnsRoot для создания System.DirectoryServices.ActiveDirectory.DirectoryContext к с DirectoryContextType DirectoryServer к вам ссылку на контроллер домена.Или вы можете использовать nCName (дает вам namingContext домена).

Я, вероятно, может помочь, если вы можете предоставить более подробную информацию, или если какие-либо о том, что не ясно.

Дополнительные:

1. Вы можете получить DirectoryEntry, выполнив "Бессерверное связывание", просто указав distinguishedName объекта в каталоге.Например "LDAP: / / CN = Пользователь1, CN = Users, DC = имя_домена, DC = com". Это будет автоматически обнаружить контроллер домена и привязать к нему для получения объекта.
2. Если вы делаете поиск с использованием DirectorySearcher, и не указан объект SearchRoot, он будет автоматически привязываются к корню текущего домена. Вы можете предоставить SearchRoot сузить поиск, но вам не придется.
3. Если вы абсолютно необходимо получить имя текущего домена, можно привязать к объекту, называется RootDSE («LDAP: / / RootDSE ") и получить значение атрибута defaultNamingContext. Это будет возвращать "DC = имя_домена, DC = com" бит.

Честно говоря более общий код, вероятно, не стоит боли если вы уверены, что вы собираетесь нужно, потому что это будет зависеть от структуры доменов и лесов.Например если у вас есть два леса, то есть доверие между ними: вы не будете знать это, до тех пор, пока у вас есть два леса и решение будет зависеть от этого.В agile развития, который избегает меня, но он идет вдоль линии не код, то, что вам не нужно теперь есть содержательные мало Максим.

Вот консольная программа, которая будет выполнять такой поиск:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices;

namespace SearchDirectory
{
class Program
{
static void Main(string[] args)
{
string user = @"YOURDOMAIN\yourid";

using (DirectorySearcher ds = new DirectorySearcher())
{
ds.SearchScope = SearchScope.Subtree;
ds.Filter = String.Format("(&(objectClass=user)(objectCategory=person)(sAMAccountName={0}))",
user.Split('\\')[1]);
ds.PageSize = 1000;
using (SearchResultCollection src = ds.FindAll())
{
foreach (SearchResult sr in src)
Console.WriteLine(sr.Properties["distinguishedName"][0].ToString());
}
}

Console.WriteLine("\r\nPress a key to continue...");
Console.ReadKey(true);
}
}
}

Я вырежьте некоторых уголках по этому вопросу, но это должно вам начать работу.Мой совет заключается в том, чтобы получить работу в консоли программы, а затем переместите класса в проекте ASP.NET.Есть много нечетных ошибок, System.DirectoryServices могут бросить вас и с помощью S.DS внутри, ASP.NET может быть весело тоже так что лучше знать ваш код работает до того, как вы оберните его во всех что ASP.NET очарования.
8 дек 10, 09:16    [9902834]     Ответить | Цитировать Сообщить модератору
Все форумы / Windows Ответить