Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2014, 09:26   #1
cactucatu4eckuu
 
Регистрация: 29.05.2013
Сообщений: 4
По умолчанию Управление сетевыми подключениями

Передо мной стали несколько проблем, решения которых найти я не могу:
1) Получить имена всех сетевых подключений (которые отображаются в "сетевых подключениях" Windows) для вывода в программу (именно имена)
2) Создавать новые подключения (PPPoE, VPN, и если кто знает Wi-Fi)
3) Проверка статуса PPPoE, VPN (Wi-Fi) соединения

Почему сам не сделал:
1) Через NetworkInterface.GetAllNetworkInter faces() получает (вроде) все, кроме созданного Wi-Fi подключения (выводит только сам адаптер), VPN и PPPoE соединения выводятся в виде "Адаптер Microsoft ISATAP", "isatap.{00A23904-1DE5-471E-8C51-A6E7B31EE012}", нет названия самого подключения которое я указывал при создании.
2) Я не про rasdial
3) Не знаю как проверить состояние соединения не зная его имени, да и названия компонента\метода не знаю

В Delphi я мог узнать статус подключения по названию и создать его через rasdial, здесь же запнулся на проверке подключения по названию, иначе не знаю как проверить

И еще один вопрос если кто в теме. Как мне указать какое подключение к интернету использовать, я где-то видел что можно указать какое подключение будет использовать вся программа, потому что Windows автоматически назначает приоритеты и если у меня есть Wi-Fi подключение и подключение через кабель, то для выхода в сеть будет использоваться второе.

Тех кто не разбирается в теме прошу не писать.
cactucatu4eckuu вне форума Ответить с цитированием
Старый 17.03.2014, 15:12   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Через RASAPI.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 18.03.2014, 01:38   #3
cactucatu4eckuu
 
Регистрация: 29.05.2013
Сообщений: 4
По умолчанию

RAS API я уже встречал в интернете, он как-то связан с DotRas, но погуглив еще раз именно RAS API C# не нашел совершенно ничего, ни слова ни об одном метода с помощью которого можно получить хоть какую-то инфу о подключении или выполнить какое-то действие с ним. DotRas это не то, что мне нужно или я не вижу прямой связи. Ткните пальцем, пожалуйста
cactucatu4eckuu вне форума Ответить с цитированием
Старый 18.03.2014, 08:40   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

http://msdn.microsoft.com/en-us/libr...bedded.5).aspx
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.03.2014, 11:41   #5
cactucatu4eckuu
 
Регистрация: 29.05.2013
Сообщений: 4
По умолчанию

Из-за ужасной (можно сказать отсутствующей) документации я не сразу разобрался с DotRas. Для этого пришлось поискать на английском да еще и немало, но выложу здесь чтобы другие нашли быстрее.

Компонент для управления сетевыми подключениями (PPPoE, VPN) - http://dotras.codeplex.com/

Все соединения хранятся в телефонной книге, их список можно получить так

Код:
string path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
RasPhoneBook pbk = new RasPhoneBook();
pbk.Open(path);
            foreach (RasEntry entry in pbk.Entries)
            {
                // И здесь каждое подключение по отдельности
            }
RasPhoneBookType.User - пользователь, чьи подключения будет выводить (да, у каждого они свои)

Проверить активные подключения (и, соответственно, сравнить с подключениями в телефонной книге, активны ли они) можно так:
Код:
foreach (RasConnection connection in RasConnection.GetActiveConnections())
            {
                // Каждое активное подключение
            }
Состояние его получить можно так
Код:
connection.GetConnectionStatus().ConnectionState
конечно проверять статус активного подключения бессмыслено, но...

Создание подключения, не нашел пока можно ли просто вызвать подключение из телефонной книги (может и нельзя), но создавать подключение можно так
Код:
dialer = new RasDialer();
                    dialer.EntryName = entry.Name;
                    dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
                    dialer.Credentials = new NetworkCredential(login, pass);
dialer.Dial(); 
// dialer.DialAsync();
Разница в том что на события DialAsync можно подписаться и получать статус подключения, еще просто оставлю код который я нашел, для отслеживания состояния подключения (нужно проверить, там исходник менялись и придется вручную найти какие методы куда перенесли)
Код:
private void StartMonitoring()
{
    RasDialer dialer = new RasDialer();

    RasHandle handle = null;
    foreach (RasConnection connection in dialer.GetActiveConnections())
    {
        if (connection.EntryName == "My Connection")
        {
            handle = connection.Handle;
            break;
        }
    }


    RasConnectionWatcher watcher = new RasConnectionWatcher();
    watcher.Disconnected += new EventHandler<RasConnectionEventArgs>(this.watcher_Disconnected);
    watcher.Handle = handle;
    watcher.EnableRaisingEvents = true;
}

private void watcher_Disconnected(object sender, RasConnectionEventArgs e);
{
    // This event is raised when that particular handle has disconnected.
}
вот еще пара ссылок:
http://hashcode.ru/questions/7813/c-...%B7-pppoe-adsl
http://dotras.codeplex.com/discussions/51629

Все что по DotRas только на буржуйском, знайте
cactucatu4eckuu вне форума Ответить с цитированием
Старый 12.11.2015, 14:18   #6
alphimur
Новичок
Джуниор
 
Регистрация: 12.11.2015
Сообщений: 1
По умолчанию создать подключение по записи из книги можно так:

string path = RasPhoneBook.GetPhoneBookPath(RasPh oneBookType.User);
RasPhoneBook pbk = new RasPhoneBook();
pbk.Open(path);
richTextBox1.Text = "Найденные подключения пользователя:\n";
foreach (RasEntry entry in pbk.Entries)
{
richTextBox1.Text = richTextBox1.Text + entry.Name + "\n";
if (entry.Name == "запасной шлюз")
{
using (RasDialer dialer = new RasDialer())
{
dialer.EntryName = entry.Name;
dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPh oneBookType.User);
dialer.Credentials = entry.GetCredentials();
dialer.Dial();
}
}
}

Последний раз редактировалось alphimur; 12.11.2015 в 14:20.
alphimur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с подключениями к чужой программе The SCS Работа с сетью в Delphi 4 21.04.2012 19:56
управление сетевыми паролями в Win XP Z1000000 Win Api 0 26.10.2010 08:44
C# Работа с сетевыми подключениями Arnezami Общие вопросы .NET 11 28.12.2009 16:27
Как работает мост между подключениями в Windows? jojahti Свободное общение 2 28.09.2009 14:15
Функции управления сетевыми подключениями akum Win Api 3 25.08.2009 16:48