Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: C++/3gmodem/Сетевое подключенеи

Доброго времени суток!

Помогите в следующей проблеме, а именно, нужно программно включить сеть при вставленном Модеме.

Вставляю модем, он его определяет и что бы включить сеть нужно указать ему оператора, и.т.д сделать настройки
А можно ли всё это сделать программно,  с помощью АТ команд задать необходимые настройки модема, там строку инициализации, и вот что нужно сделать после как дать понять системе что нужно включить сеть ). 

Заранее благодарю за ответы).
Ответ:
Всем огромное спасибо, попробую,  и в Убунте покапаюсь
Вопрос: Сравнение папки с сетевого диска с папкой на локальном диске с копированием изменившихся данных на сервере

необходимо сделать ежедневную сверку( скажем в 20:00) каждого дня папки Work, которая находиться на сетевом диске с папкой Work, которая находится на локальном диске. папка Work имеет множество каталогов, подкаталогов, файлов и т.п.. после сверки, если файлы на сетевом ресурсе изменялись, то необходимо их скопировать с заменой на локальную папку Work. желательно отобразить скажем в ListBox те файлы, в которые вносились изменения, вывести их кол-во, размер каждого файла и общий размер файлов(папок), которые подлежат копированию(замене) на локальном диске.
суть работы программы такая:
1. пользователь выбирает путь к папке на локальном диске, и путь к папке на сетевом диске
2. при нажатии на кнопку сравнивает информацию с локального и сетевого диска (желательно отобразить ход сравнения через ProgressBar)
3. И при нажатии на вторую кнопку те файлы, в которые вносились изменения копируются с сетевого диска на локал.
(так же ход копирования желательно отобразить в ProgressBar с остатком времени копирования)

понимаю, что работа предстоит довольно объемная, я прошу помощи в написании процедуры сравнения и процедуры копирования. может кто писал подобные программы. буду рад любой помощи, и особенно благодарен. заранее спасибо!
Ответ: Вариант 1
- если в этом посте поковыряться, то можно на основе программы-обновлялки + программы для создания файла со списком обновок и хеш-кодов слепить требуемое. Только загрузку сделать не через web client, а io.file.copy. Хотя и web client не возбраняется. Опять же, с ним легко сделать прогресс-бар копирования.

Ну т.е. суть такова:
1. Получить списки файлов на сетевом и локальном дисках.
2. Получить хешсуммы каждого файла
3. Сравнить одноименные файлы (одноименные с учетом их расположения относительно корневой папки)
4. Для несовпадающих сумм - копировать файл. Для файлов , которым не нашлось тезок - копировать, для совпадающих - не трогать. Возможна ситуация, когда в локальной папке файла нет, а в сетевой еще есть (ну скажем вчера туда его поместили, а сегодня локальный оригинал удалили за ненадобностью) - можно удалить или спросить, что делать у пользователя.

Как-то так...
Вариант 2
воспользоваться встроенной фишкой в самой винде - "портфель" называется
Вопрос: Программка для подключения сетевого диска

Можно ли написать программку для подключения сетевого диска?
Есть NetWare'ий сервер (Server1, например)на нем папка (test, например). Так вот, надо подключить диск test на 'Server1'(F.
Реально?
Ответ: Если не ошибся, то:
Код Windows Batch file
1
net use z: \\Server\Share$ pass /user:username /PERSISTENT:NO
help по:
Код Windows Batch file
1
net use /?
в командной строке.

или через OLE WScript.Network, метод MapNetworkDrive

help

MapNetworkDrive
Синтаксис:

MapNetworkDrive(<LocalName>,<RemoteName>,<UpdateProfile>, <User>,<Password>)

Назначение:

Подключает сетевой диск.

Параметры:

<LocalName> - строка, локальное имя диска.
<RemoteName> - строка, имя сетевого ресурса.
<UpdateProfile> - необязательный, число (булево). Если указано True, создаваемое сетевое подключение будет сохранено в профиле пользователя.
<User> - необязательный, строка. Имя пользователя, если сетевой диск подключается от пользователя, отличного от текущего.
<Password> - необязательный, строка. Пароль пользователя, если сетевой диск подключается от пользователя, отличного от текущего.



Пример без паролей:
Вопрос: Фильтрация сетевых пакетов

Здравствуйте.

Не то чтобы хочу написать свой фильтр сетевых пакетов, просто расскажите, как вообще происходит фильтрация сетевого трафика, проще говоря, как работает изнутри простейший фаервол.
Допустим, фаервол пускает в сеть только те программы, которые есть в белом списке, а остальные программы он не пускает в сеть, анализ протоколов, портов и IP адресов опустим полностью, либо программа имеет полный доступ в сеть либо не имеет его вообще, некий белый список программ с разрешением выхода в сеть.

Расскажите, в принципе возможно ли сделать что-то подобное с самыми минимальными усилиями (с условиями выше).
Будет особенно приятно, если просто расскажите своими словами, без ссылок на громадные тексты)
Ответ:
Сообщение от noname664
просто расскажите, как вообще происходит фильтрация сетевого трафика, проще говоря, как работает изнутри простейший фаервол.
Сообщение от noname664
Расскажите, в принципе возможно ли сделать что-то подобное с самыми минимальными усилиями (с условиями выше).
Будет особенно приятно, если просто расскажите своими словами, без ссылок на громадные тексты
Если просто: фаервол ставит свой модуль в сетевой стек, после этого он может
контролировать весь трафик, который проходит через соответствующий уровень.
В Windows для фильтрации на разных уровнях существует несколько технологий -
WFP, TDI, LSP, NDIS, причем внутри каждой свои принципы и особенности работы.

Что касается "сделать что-то подобное с самыми минимальными усилиями" - это вряд ли.
Тут потребуется очень хорошее понимание работы сетей и вообще высокая квалификация.
Вопрос: Отправить пакет на свою сетевую карту

Добрый день, коллеги.
Есть вопрос, но нет решения. Условия таковы:
Есть сетевой интерфейс, назовем его eth10, не имеющий ip-адреса. Есть программа, которая ловит каждый пакет на этом самом интерфейсе.
Вопрос: можно ли отправить пакет на этот сетевой интерфес с сервера, на котором он находится, т.е. самому себе, чтобы программа, которая ловит пакеты, смогла прочитать его? 
Ответ:
Добрый день, коллеги.
Есть вопрос, но нет решения. Условия таковы:
Есть сетевой интерфейс, назовем его eth10, не имеющий ip-адреса. Есть программа, которая ловит каждый пакет на этом самом интерфейсе.
Вопрос: можно ли отправить пакет на этот сетевой интерфес с сервера, на котором он находится, т.е. самому себе, чтобы программа, которая ловит пакеты, смогла прочитать его? 
Вопрос: Java Wrapper почему не доступны сетевые ресурсы?

Здравствуйте.

Для работы jar как сервиса windows попробовал использовать java wrapper.
Приложение запустилось нормально.
НО в приложении есть обращение к сетевой папке.
Приложение возвращает ошибку о том, что сетевая папка не существует, хотя она есть.
НО если приложение запустить не через wrapper, то все работает.
Пробовал сервис запускать от своего доменного пользователя (если запускать под ним, то все работает), результат отрицательный.
Пробовал также шару подключать как сетевой диск, НО результат тоже отрицательный.

Прошу помочь решить проблему.

Заранее благодарю за помощь.
Ответ:
drno
Для работы jar как сервиса windows попробовал использовать java wrapper.
Приложение запустилось нормально.
НО в приложении есть обращение к сетевой папке
1. Использовать исключительно ;
2. Или менять пользователя, от имени которого работает служба или настраивать права или делать и то и другое.
Вопрос: Fork приложения на сетевом диске

Хз в тот ли раздел пишу - модеры поправьте, если что.
Суть такая, есть приложение в виде одного екзешника/бинарника весом под 200Мб. Приложение лежит на сетевом диске откуда и запускается юзверями. Естесно это приводит к тому, что приложение скачивается с сетевого диска. И все бы ничего, да вот только приложение при своей работе активно форкается, а это уже приводит к существенным сетевым нагрузкам и увеличивает время работы.
Приложение написано на С++/Qt, проблема актуальна как для винды так и для линукса. Есть ли какой-нибудь способ/механизм "объяснить" приложению/системе, что не обязательно при каждом форке качать копию по сети? :-?
Ответ:
Цитата Олег М @
Никакой аналогии там нет. Fork копирует существующий процесс, CreateProcess создает новый, с нуля. Соответственно, требуется загрузка файла

Проблема в таргеттинге. Т.е. в семантике.
Форк не копирует родительский процесс, а разветвляет его с созданием нового процесса.
Вот вам простой пример
    /*Тут куча инклюдов, опускаем*/
    #define MYPORT 3490     /* Порт, на который будет идти соединение*/
    #define BACKLOG 10 /* Сколько подключений может быть в очереди */
    int main()
       {
    int sd, newsd; /* Слушаем на сокете sd, новое подключение на сокете newsd */
    struct sockaddr_in my_addr;/* Серверная адресная информация */
    struct sockaddr_in their_addr;  /* Адресная информация запрашивающей стороны (клиента) */
    int sin_size;
    /* Создаем  Интернет-сокет, ориентированный на соединение*/
    if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
    {perror ("socket");exit (1); }
    my_addr.sin_family = AF_INET;   /* В порядке байтов хоста */
    my_addr.sin_port = htons (MYPORT);/* short, в порядке байтов сети */
    /* Авто-заполнение IP-адресом серверного сетевого интерфейса */
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero), 8);/* Обнуляем остальную часть struct */
    /* Связываем только-что созданный сокет с его локальным адресом */
    if (bind(sd, (struct sockaddr *)&my_addr, sizeof (struct sockaddr)) == -1)
    {perror ("bind");exit (1);   }
    /* Организуем очередь прослушивания сети на порту MYPORT */
    if (listen (sd, BACKLOG) == -1)
    {perror ("listen");exit (1);}
    while(1) /* Главный цикл accept()*/
    {  
    sin_size = sizeof (struct sockaddr_in);
    if ((newsd = accept (sd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
    {  perror ("accept"); continue; /* продолжаем прием*/   }
    /* Приняли запрос на соединение и принимаем решение ответить на него*/
    printf (" сервер: Принял соединение от %s\n ", inet_ntoa (their_addr.sin_addr));
    if(!fork())
    [B]{/* Мы находимся в дочернем порожденном процессе */
    close (sd); /* Закрываем дескриптор слушающего сокета, он потомку не нужен */
    /* Потомок наследует все файловые дескрипторы родителя, а значит, и newsd */
    /* Теперь таких сокетов два - в каждом процессе по одному */
    /* Шлем клиенту 14 байтов */
    if (send(newfd, " Привет, мир! \n", 14, 0) == -1)perror ("send");
    close(newsd);/* Закрываем сокет newsd  в порожденном процессе */
    exit (0);/* Завершаем передачу данных из процесса потомка */
    }   /* Здесь заканчивается текст процесса программы-потомка*/[/B]
    close (newsd);  /* Закрываем сокет newsd – родитель в нем не нуждается */
    while (waitpid (-1, NULL, WNOHANG) > 0);    /* Очищаем порожденные процессы */
    }/*Конец цикла accept()*/
    return 0;  
    }/* Завершаем процесс сервера */

Так вот, то что болдом - (Блин, болд не работает в срр) это и есть текст программы нового дочернего процесса. И - ВСЕ.
С вызова форка одновременно исполняются теперь два процесса одновременно. И говорить о копировании тут смысла нет. Ваще. Просто процесс-потомок наследует большую часть атрибутов своего родителя, и в частности, открытые файлы (порожденный процесс обладает копией дескрипторов файлов, открытых его родителем).
Однако порожденный процесс после вызова fork() с помощью функции exec() может запустить совершенно новый исполнимый файл, при этом его предыдущее "родительское" содержание в памяти заменяется текстом нового файла.
Так что вопрос в семантике форка. Это - не копирование, а разветвление. Потому и говорим, что Винда и никсы обладают совершенно разными подходами к вопросам запуска новых процессов.
Сообщение отредактировано: Oleg2004 -
Вопрос: Диалог для выбора сетевой папки

Существует ли диалог для выбора сетевой папки? FolderBrowserDialog у меня показывает папки на локальном компьютере, а сетевые не показывает. Можно ли как-то настроить FolderBrowserDialog, чтобы он показывал компьютеры в сети? Или, может быть, есть аналогичный диалог для выбора папок на других компьютерах в сети?
Ответ: Может так пойдёт. Отображать будет, правда, только сетевые папки:
Код C#
1
2
3
4
5
Type folderBrowserType = folderBrowserDialog1.GetType();
FieldInfo fieldInfo = folderBrowserType.GetField("rootFolder", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo.SetValue(folderBrowserDialog1, (Environment.SpecialFolder)18);
 
folderBrowserDialog1.ShowDialog();
Вопрос: создать нехватающие папки в сетевом пути

допустим, задан путь для подключения сетевого диска: \\Share\Folder\MyDocs\Pum-purum\Param-pam-pam
но на шаре есть только \\Share\Folder\
есть ли готовая функция для автоматического создания недостающих папок (при условии наличия прав)?
Ответ:
Цитата ^D^ima @
напиши свою, 10 строк кода

немножко больше
делаю так:
1. подключаю сет.папку (БЕЗ задания диска) с помощью WNetAddConnection2 с заданным логином и паролем к сет.папке
2. если не удалось (часто встречается ошибка о множественном подключении к одной шаре разными пользователями (код ERROR_SESSION_CREDENTIAL_CONFLICT), что в винде недопустимо), задаю логин и пароль как nil, чтобы подключение шло под пользователем по умолчанию (под которым запущен текущий процесс).
3. если и предыдущий шаг не удался, меняю имя сервера на IP

(все, что выше, так я стандартно подключаю шары)

теперь дальше с отсутствующими папками
4. если все шаги выше привели к ошибкам, считаю, что папка не существует
5. вырезаю имя последней папки (было \\Share\Folder\MyDocs\Pum-purum\, стало \\Share\Folder\MyDocs\) и рекурсивно вызываю процедуру подключения (goto 1) с передачей имени отсутствующей папки

т.е. далее опять пытаемся подключить шару (без последней папки) 3-мя способами. Если опять ошибка, то убираем след.папку (будет \\Share\Folder\) и опять пытаемся подключить диск.

Когда наконец что-то подключается, создаем папку (рекурсия же).

т.е. очень вкратце процедура выглядит так:
    function ConnectToUNC(APath, ALogin, APass: string; ACreateFolderName: string = ''): string;
    begin
    m := WNetAddConnection2(NetResource,
                                  PAnsiChar(APass), {пароль, если нужно (или пусто (nil))}
                                  PAnsiChar(ALogin), {имя юзера, если нужно (или пусто (nil))}
                                  0 {CONNECT_UPDATE_PROFILE {восстановить соед. при входе в систему});
    if (m = ERROR_SESSION_CREDENTIAL_CONFLICT) and // такой сет.диск уже подключен под другим логином - в винде это недопустимо (2 раза под разными логинами)...
       (ALogin <> '') then // ... и при этом у нас задан логин для подключения, то теперь пытаемся подключиться под текущим пользователем (под которым запущен этот процесс)
       begin
       m := WNetAddConnection2(NetResource,
             nil, //PAnsiChar(APath.Pass), {пароль, если нужно (или пусто (nil))}
             nil, //PAnsiChar(APath.Login), {имя юзера, если нужно (или пусто (nil))}
             0 {CONNECT_UPDATE_PROFILE {восстановить соед. при входе в систему});
       end;
    // если все равно не удалось, меняем имя компьютера на его IP
    if (m <> NO_ERROR) {and (m <> ERROR_SESSION_CREDENTIAL_CONFLICT)} then
       begin
       APath := ChangeShareNameToIP(APath); // меняем имя на IP: \\Share\Folder -> \\192.168.1.2\Folder
       m := WNetAddConnection2(NetResource,
                                   PAnsiChar(APass), {пароль, если нужно (или пусто (nil))}
                                   PAnsiChar(ALogin), {имя юзера, если нужно (или пусто (nil))}
                                   0 {CONNECT_UPDATE_PROFILE {восстановить соед. при входе в систему});
       end;
     
    if m in [NO_ERROR] then // если наконец подключили
       begin
       Result := IncludeTrailingPathDelimiter(APath) + ACreateFolderName; // запоминаем подключенный сетевой путь
       end else
       begin
       // если подключить не удалось, убираем последнюю папку (возможно ее не было) и подключаемся на уровень выше
       TmpLastFolder := GetLastFolder(APath); // запоминаем недостающую ПОСЛЕДНЮЮ папку
       APath := DelLastFolder(APath); // убираем последнюю папку: \\Share\Folder\MyDocs\Pum-purum -> \\Share\Folder\MyDocs
     
       ConnectToUNC(ExcludeTrailingPathDelimiter(APath), ALogin, APass, TmpStr);
       if TmpStr <> '' then // если задана папка на создание, создаем
          begin
          TmpStr := IncludeTrailingPathDelimiter(APath) + TmpStr;
          if not DirectoryExists(TmpStr) then
             if not CreateDir(TmpStr) then
                Print('Не удалось создать папку')
                else Result := TmpStr;
          end;
       end;
    end;


и проблема в том, что при подключении к несуществующей папке иногда появляется ошибка не 53 (Не найден сетевой путь.), а 5 (Отказано в доступе.). При этом папка нормально создается.
Закономерность пока не уловил.

Приложил тестовый проект (5,43 Кбайт, скачиваний: 34)
Вопрос: создать нехватающие папки в сетевом пути

допустим, задан путь для подключения сетевого диска: \\Share\Folder\MyDocs\Pum-purum\Param-pam-pam
но на шаре есть только \\Share\Folder\
есть ли готовая функция для автоматического создания недостающих папок (при условии наличия прав)?
Ответ:
Цитата ^D^ima @
напиши свою, 10 строк кода

немножко больше
делаю так:
1. подключаю сет.папку (БЕЗ задания диска) с помощью WNetAddConnection2 с заданным логином и паролем к сет.папке
2. если не удалось (часто встречается ошибка о множественном подключении к одной шаре разными пользователями (код ERROR_SESSION_CREDENTIAL_CONFLICT), что в винде недопустимо), задаю логин и пароль как nil, чтобы подключение шло под пользователем по умолчанию (под которым запущен текущий процесс).
3. если и предыдущий шаг не удался, меняю имя сервера на IP

(все, что выше, так я стандартно подключаю шары)

теперь дальше с отсутствующими папками
4. если все шаги выше привели к ошибкам, считаю, что папка не существует
5. вырезаю имя последней папки (было \\Share\Folder\MyDocs\Pum-purum\, стало \\Share\Folder\MyDocs\) и рекурсивно вызываю процедуру подключения (goto 1) с передачей имени отсутствующей папки

т.е. далее опять пытаемся подключить шару (без последней папки) 3-мя способами. Если опять ошибка, то убираем след.папку (будет \\Share\Folder\) и опять пытаемся подключить диск.

Когда наконец что-то подключается, создаем папку (рекурсия же).

т.е. очень вкратце процедура выглядит так:
    function ConnectToUNC(APath, ALogin, APass: string; ACreateFolderName: string = ''): string;
    begin
    m := WNetAddConnection2(NetResource,
                                  PAnsiChar(APass), {пароль, если нужно (или пусто (nil))}
                                  PAnsiChar(ALogin), {имя юзера, если нужно (или пусто (nil))}
                                  0 {CONNECT_UPDATE_PROFILE {восстановить соед. при входе в систему});
    if (m = ERROR_SESSION_CREDENTIAL_CONFLICT) and // такой сет.диск уже подключен под другим логином - в винде это недопустимо (2 раза под разными логинами)...
       (ALogin <> '') then // ... и при этом у нас задан логин для подключения, то теперь пытаемся подключиться под текущим пользователем (под которым запущен этот процесс)
       begin
       m := WNetAddConnection2(NetResource,
             nil, //PAnsiChar(APath.Pass), {пароль, если нужно (или пусто (nil))}
             nil, //PAnsiChar(APath.Login), {имя юзера, если нужно (или пусто (nil))}
             0 {CONNECT_UPDATE_PROFILE {восстановить соед. при входе в систему});
       end;
    // если все равно не удалось, меняем имя компьютера на его IP
    if (m <> NO_ERROR) {and (m <> ERROR_SESSION_CREDENTIAL_CONFLICT)} then
       begin
       APath := ChangeShareNameToIP(APath); // меняем имя на IP: \\Share\Folder -> \\192.168.1.2\Folder
       m := WNetAddConnection2(NetResource,
                                   PAnsiChar(APass), {пароль, если нужно (или пусто (nil))}
                                   PAnsiChar(ALogin), {имя юзера, если нужно (или пусто (nil))}
                                   0 {CONNECT_UPDATE_PROFILE {восстановить соед. при входе в систему});
       end;
     
    if m in [NO_ERROR] then // если наконец подключили
       begin
       Result := IncludeTrailingPathDelimiter(APath) + ACreateFolderName; // запоминаем подключенный сетевой путь
       end else
       begin
       // если подключить не удалось, убираем последнюю папку (возможно ее не было) и подключаемся на уровень выше
       TmpLastFolder := GetLastFolder(APath); // запоминаем недостающую ПОСЛЕДНЮЮ папку
       APath := DelLastFolder(APath); // убираем последнюю папку: \\Share\Folder\MyDocs\Pum-purum -> \\Share\Folder\MyDocs
     
       ConnectToUNC(ExcludeTrailingPathDelimiter(APath), ALogin, APass, TmpStr);
       if TmpStr <> '' then // если задана папка на создание, создаем
          begin
          TmpStr := IncludeTrailingPathDelimiter(APath) + TmpStr;
          if not DirectoryExists(TmpStr) then
             if not CreateDir(TmpStr) then
                Print('Не удалось создать папку')
                else Result := TmpStr;
          end;
       end;
    end;


и проблема в том, что при подключении к несуществующей папке иногда появляется ошибка не 53 (Не найден сетевой путь.), а 5 (Отказано в доступе.). При этом папка нормально создается.
Закономерность пока не уловил.

Приложил тестовый проект (5,43 Кбайт, скачиваний: 36)