Форум: "Сети";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];
ВнизКак просканировать доступные ресурсы на сетевой машине? Найти похожие ветки
← →
wHammer (2001-11-06 11:43) [0]Прошу извинения за уже не раз повторяющийся вопрос. Как, зная сетевой путь к машине в локальной сети, просканировать доступные папки/диски на нем? И как можно узнать read only ресурс или нет?
← →
Kapusto (2001-11-06 12:17) [1]Вот код, производящий полный скан сетки на наличие расшареных ресурсов
запускается как Scan(nil, true)
ЗЫ: Знаю, что можно оптимизировать, но лениво...
procedure TfMain.Scan(res: TNetResource; root: boolean);
var
hEnum: cardinal;
nrResource: array[0..1000] of TNetResource;
dwSize: DWORD;
numEntries: DWORD;
i: DWORD;
dwResult: DWORD;
begin
if root = true then
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
0, nil, hEnum)
else
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
0, @res, hEnum);
if dwResult = NO_ERROR then
begin
dwSize := SizeOf(nrResource);
numEntries := $0FFFFFFFF;
if WNetEnumResource(hEnum, numEntries, @nrResource, dwSize) = NO_ERROR then
begin
for i := 0 to numEntries - 1 do
begin
if nrResource[i].dwUsage <> RESOURCEUSAGE_CONNECTABLE then
begin
if nrResource[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then
begin
lbResources.Items.Add(nrResource[i].lpRemoteName);
lbResources.Update;
end;
Scan(nrResource[i], false)
end
else
begin
lbResources.Items.Add(nrResource[i].lpRemoteName);
lbResources.Update;
end;
end;
end;
WNetCloseEnum(hEnum);
end;
end;
← →
wHammer (2001-11-06 12:23) [2]Сенкс, попробую!
← →
wHammer (2001-11-06 14:12) [3]to Kapusto ©
??? Sorry, но не получается Scan(nil, true);
← →
Kapusto (2001-11-06 14:27) [4]угу :)) Это небольшая разминка для мозгов...
var
dummy: TNetResource;
.....
Scan(dummy, true);
← →
wHammer (2001-11-06 14:41) [5]Ну да, согласен, совсем старый стал, тем более раньше когда-то с помощью аналогичной процедуры писал программку для отслеживания времени работы в сети пользователей, и не вспомнил сразу, вот пень-то. Кстати, с помощью этой процедуры можно узнать и не только пользователей. Но мне нужно немного не то, нужно на одной, уже известной машине проверить доступные ресурсы и узнать read only они или нет.
← →
Kapusto (2001-11-06 15:09) [6]Насчет Readonly имхо копать надо в сторону NetShareGetInfo, а насчет определенного компа - ну отфильруй полученный результат или заполняй начальный TNetResource вручную....
← →
wHammer (2001-11-08 11:05) [7]to Kapusto © (06.11.01 15:09)
Sorry, не понял.
← →
Kapusto (2001-11-08 11:11) [8]Не понял насчет r/o? или насчет выборочного скана?
← →
wHammer (2001-11-08 11:27) [9]\\СетеваяМашина№1. Здесь, например имеются сетевые папки
a: реально флопи дисковод,
d: реально диск D:,
Temp: реально папка C:\Public\User.
Как мне получить имена:
\\СетеваяМашина№1\a:
\\СетеваяМашина№1\d:
\\СетеваяМашина№1\Temp:
Sorry еще раз, но никак не могу сопоставить TNetResource и эти имена.
← →
Kapusto (2001-11-08 12:28) [10]Я предлагал использовать код, сканирующий всю сетку, и проверять .lpRemoteName на вхождение \\Сетевая машина№1, если есть, то заносить в список - иначе пропускать...
Либо же, как вариант, протрассировать данный код до момента, когда он найдет в сети данную машину и срисовать, как заполнены в этот момент поля в TNetResource, и в своей проге перед WNetOpenEnum вручную присваивать полям структуры эти значения...
← →
wHammer (2001-11-08 15:03) [11]Как я понял в TNetResource нас интересует lpRemoteName, но при сканировании это поле пустое, я смогу добраться, например до \\СетеваяМашина№1\Temp, если укажу nrResource[i].lpRemoteName + "\Temp", но как мне узнать о существовании данной папки?
← →
Kapusto (2001-11-08 15:42) [12]имхо для начала сканирования lpRemoteName = \\СетеваяМашина№1
А далее Enumеруем все ресурсы на данной машине
Варинат для извращенца -
Запускаем на выполнение
net view \\СетеваяМашина№1 > result.txt
и далее анализируем этот файл :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c