Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> net share, Список росшареных русурсов в сети. 
:(
    Опции темы
Dweep
Дата 4.11.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.11.2005

Репутация: нет
Всего: нет



Как посмотреть список росшареных ресурсов на компе с произвольным айпишником в сети. Я использую следующий код:

ShellFolder folder = ShellFolder.getShellFolder(new File("c:/"));
while (folder.getParentFile() != null)
folder = (sun.awt.shell.ShellFolder)folder.getParentFile();

Потом получая масив файлов, и приводя их к типу ShellFolder получаю сылку на сеть, робочие групы, компьютеры, ресурсы на компьютерах.
Проблема в том, что этот способ работает только если мой виндовс(XP) может увидеть эти компьютеры. Обычно (у нас в групе около 200 компов) отображается только несколько машин, но на любой комп без проблем можна зайти набрав \\name_comp или \\IP

Это сообщение отредактировал(а) Dweep - 4.11.2005, 22:59
PM MAIL   Вверх
pvo
Дата 5.11.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: нет
Всего: 7



ответил тебе в соседнем треде - посмотри в сторону jcifs.org
PM MAIL ICQ   Вверх
Dweep
Дата 6.11.2005, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.11.2005

Репутация: нет
Всего: нет



Цитата

1. Твой код не будет работать под *nix системами. Для того, чтобы получить универсальный код, я бы на твоем месте посмотрел на проект jcifs.org. Скорость при его использовании не засекал, но вроде пошустрее. Основное время вроде тратилось на установление smb сессии, доступ же к ресурсам шел быстро. Но не стоит расчитывать, что все будет работать мгновенно.

2. Кроме того, можно попытаться запускать несколько паралельных тредов для проверки существования ресурсов.

3. При использовании jcifs тебе не нужно будет проверять, открыт ли 139 порт - при попытке обращения ты просто получишь exception в случае, если порт закрыт.


Клас: http://jcifs.samba.org. меня приятно удивил, я уже почти был уверен что java не умеет определять список шар по айпишнику. Но все же есть проблема: есть несколько компьютеров (примерно 5%), которые имеют шары, связь с ними сравнительно быстрая, но SmbFile[] st = f.listFiles(); - выдает jcifs.smb.SmbException

у SmbFile есть метод setConnectTimeout(по умолчанию 0), Exception выкидывает независимо от его значения. Поэтому у меня возникло 2 вопроса:
1. Можно ли обойти это исключение, т.е. увидеть ресурсы на этих компах
2. Скиньте ссылку на ОpenSourse class похожий по функциональности.

PM MAIL   Вверх
pvo
Дата 6.11.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: нет
Всего: 7



Цитата(Dweep @ 6.11.2005, 03:04)
http://jcifs.samba.org.
Сорри за неправильно данную ссылку - перепутал.
Насчет ошибки:
1. кинь сюда стектрейс и фрагмент кода, в котором он возникает.
2. Отличаются ли чем-нить машины, при обращении к которым возникает ошибка, от остальных? Какая на них ос, например. Нет ли проблем при обращении к этим машинам по windows сети? М.б. на них расшарены ресурсы с русскими именами, а на остальных - нет ... и т.п.
3. У проекта jcifs есть mail list. По крайней мере года полтора назад он был вполне живой и народ там активно помогал с устранением ошибок в jcifs.
4. Еще можно попробовать подключать другие версии этой библиотеки.
5. Возможно, ошибку можно будет обойти при помощи изменения настроек jcifs.


Цитата(Dweep @ 6.11.2005, 03:04)
Скиньте ссылку на ОpenSourse class

Во-первых это не класс, а пакет (продукт/проект/библиотека...) smile
Во-вторых, из того, что мне встречалось, jcifs был самым работоспособным.
В-третьих, увы, что-то сейчас не могу найти ссылок на другие проекты. smile
PM MAIL ICQ   Вверх
pvo
Дата 6.11.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: нет
Всего: 7



PS. Попробуй посмотреть тут и тут
PM MAIL ICQ   Вверх
Dweep
Дата 6.11.2005, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.11.2005

Репутация: нет
Всего: нет



Мой частично работающий код выглядит так:

Код

public static void updateP139() {
        for (int i=1; i<=255;i++) {
            try {
                SmbFile f = new SmbFile("file://10.45.6."+i+"/");
                SmbFile[] st = f.listFiles();
                for (int j=0;j<st.length;j++) {
                  System.out.println(""+st[j].getName());
                }
            }  catch (MalformedURLException e) {
                pr("MalformedURLException "+e);
            } catch (SmbException e) {
                pr("SnbException "+e);
            }
        }
    }


При i=18 выдает ошибку. Этот компьютер воткнутый в один со мной свич, то есть перебоев с сетью быть не должно. На нем открыты ресурсы через file i ftp, правда там установлено большое количество разного ПО(Apache 2.0, IIS 6.0, MySQL 4.1, VisNetic FtpServer, MS SQL 2000 и т.д.), еще стоит ограничение скорости на шары 500кбайт/с. Такую же ошибку выдает на еще как минимум одном компьютере.


Код

Transport1:   connect: state=0
SnbException jcifs.smb.SmbException: 
jcifs.util.transport.TransportException: Connection timeout
    at jcifs.util.transport.Transport.connect(Transport.java:175)
    at jcifs.smb.SmbTransport.connect(SmbTransport.java:271)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:129)
    at jcifs.smb.SmbFile.connect(SmbFile.java:792)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:762)
    at jcifs.smb.SmbFile.send(SmbFile.java:660)
    at jcifs.smb.SmbFile.doNetEnum(SmbFile.java:1624)
    at jcifs.smb.SmbFile.list(SmbFile.java:1547)
    at jcifs.smb.SmbFile.list(SmbFile.java:1441)
    at Searh.updateP139(Searh.java:223)
    at Pr5.<init>(Pr5.java:42)
    at Pr5.main(Pr5.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:494)
    at com.intellij.rt.execution.application.AppMain.main(Unknown Source)


Выскочило еще 2 проблемки, допустим на компе открыты


Код

clips/
maps/
music/
students photos/
net/
козаки/
picture/
Ocean_Elsy_Gloria_1/
Pricols/


Програма Выдает:

Код

Transport1:   connect: state=0
Transport1: run connected
Transport1: connected: state=3
net/
E$/
Pricols/
Є®§ ЄЁ/
IPC$/
D$/
maps/
picture/
G$/
F$/
music/
ADMIN$/
wwwroot$/
C$/
clips/


То есть итого 4 проблемы:

1. На некоторых компах програма не видит ресурсов вообще
2. проблема с русской кодировеой в шарах (козаки/ -----> Є®§ ЄЁ/) (вложеные папки видит нормально)
3. Некоторые папки не замечает: students photos/ и Ocean_Elsy_Gloria_1/
4. У меня вверсия jcifs_1.2.6, где можно скачать более продвинутую?



PM MAIL   Вверх
pvo
Дата 8.11.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: нет
Всего: 7



1. Русские имена папок начинаю показываться корректно при указании jcifs.encoding=Cp866.

2. Насчет длинных имен share - почитай тут
и тут. Я чуть посмотрел и обнаружил, что это well-known bug smile Причем исправить баг предполагается в версии 2.0 smile(
Для того, чтобы получать длинные имена share, нужно использовать RPC, который вроде как есть, но не интегрирован с jcifs. Если найдешь решение проблемы, свистни, плз - ибо тоже интересно.

3.С тем, что на некоторых компьютерах совсем не видит ресурсов не столкнулся. Может быть из-за того, что перед выполнением запроса вхожу в домен.
4. Насчет версии - насколько я понял, 1.2.6 - последняя версия, а public cvs or svn нет smile

PM MAIL ICQ   Вверх
Guest
Дата 12.11.2005, 02:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











С длинными именами я боролся таким способом:
smbF[] - масив полученых шар, с фильтром пропускать только директории.
ShellFolder - import sun.awt.shell.ShellFolder;
file[] - новый масив порлученых шар с длинными а также рускими именами.

Код

if (smbF.length!=0) {
                    String st = smbF[0].getName();
                    File f1 = new File(host+st);
                    ShellFolder f = ShellFolder.getShellFolder(f1);
                    f = (ShellFolder)f.getParentFile();
                    File file[] = f.listFiles();
                }


Очевидно, что если на компе нет папок с короткими именами то так сделать не получится.

Если все папки на руском, то проблема с кодировкой остается. Я не придумал ничего лучшего чем менять
"©жгЄҐ­Јий§екдлў Їа®«¤¦нпзб¬ЁвмЎо‰–“Љ…?ѓ?™‡•љ”›‚Ђ??Ћ‹„†?џ—‘Њ?’њ?ћ" на
"йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"
Как указать кодировку, куда ее вписывать?
  Вверх
Lеstat
Дата 10.1.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



а вот у меня проблемка
на компе открыта папка Mus

если я пишу
Код

    private static void ShowDir()
    {
        try
        {
            SmbFile f = new SmbFile("smb://192.168.0.1/mus/");
            SmbFile[] st = f.listFiles();
            for(int i=0;i<st.length;i++)
            {
                System.out.println(st[i].getName());
            }
        }
        catch (MalformedURLException e) {System.out.println("MalformedURLException " + e);}
        catch (SmbException e) {System.out.println("SnbException " + e);}
    }

все нормально... получаю папки и файлы в папке mus,

но если я пытаюсь получить что в корне лежит
Код

    private static void ShowDir()
    {
        try
        {
            SmbFile f = new SmbFile("smb://192.168.0.1/");
            SmbFile[] st = f.listFiles();
            for(int i=0;i<st.length;i++)
            {
                System.out.println(st[i].getName());
            }
        }
        catch (MalformedURLException e) {System.out.println("MalformedURLException " + e);}
        catch (SmbException e) {System.out.println("SnbException " + e);}
    }

то SnbException jcifs.smb.SmbException: 5 выдает
не пойму в чем проблема
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.