У меня есть удаленный компьютер, к которому я пытаюсь подключиться с помощью кода C# следующим образом
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace DeployCode
{
public static class NetworkManager
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NETRESOURCE
{
public ResourceScope dwScope;
public ResourceType dwType;
public ResourceDisplayType dwDisplayType;
public ResourceUsage dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
public enum ResourceScope : int { GlobalNetwork, Connected, Remembered, Recent, Context }
public enum ResourceType : int { Any, Disk, Print, Reserved }
public enum ResourceDisplayType : int { Generic, Domain, Server, Share, File, Group }
public enum ResourceUsage : int { Connectable = 1, Container = 2, NoLocalDevice = 4, Sibling = 8, Attached = 16 }
[DllImport("mpr.dll")]
public static extern int WNetAddConnection2(ref NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);
[DllImport("mpr.dll")]
public static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce);
///
/// Pings a server asynchronously to check its reachability.
///
///
The server to ping.
/// Returns true if the server is reachable, otherwise false.
public static async Task PingServerAsync(string server)
{
try
{
Ping ping = new Ping();
PingReply reply = await ping.SendPingAsync(server);
return reply.Status == IPStatus.Success;
}
catch
{
return false; // If an exception occurs, consider the ping as failed
}
}
///
/// Connects to a network share using the given path, username, and password.
///
/// The network share path (e.g., \\server\share).
/// The username to authenticate with.
/// The password for the user.
public static void ConnectToNetworkShare(string remotePath, string username, string password)
{
NETRESOURCE networkResource = new NETRESOURCE
{
dwScope = ResourceScope.GlobalNetwork,
dwType = ResourceType.Disk,
dwDisplayType = ResourceDisplayType.Share,
dwUsage = ResourceUsage.Connectable,
lpRemoteName = remotePath
};
int result = WNetAddConnection2(ref networkResource, password, username, 0);
if (result != 0)
{
throw new System.ComponentModel.Win32Exception(result, $"Failed to connect to network share: {remotePath}");
}
}
///
/// Disconnects from a network share.
///
/// The path to disconnect from.
public static void DisconnectFromNetworkShare(string remotePath)
{
int result = WNetCancelConnection2(remotePath, 0, true);
if (result != 0 && result != 2250) // 2250 means "no network connection"
{
throw new System.ComponentModel.Win32Exception(result, $"Failed to disconnect from network share: {remotePath}");
}
}
}
}
Когда я вручную подключаюсь со своего компьютера, после запуска кода он работает как положено. Но где, как когда я пытаюсь подключиться из кода, используя это
var username = $"{server}\\administrator";
var password = "mypassword";
var destinationFolder = $@"\\{server}\E$\Application";
NetworkManager.ConnectToNetworkShare(destinationFolder, username, password);
Подробнее здесь: https://stackoverflow.com/questions/791 ... -under-vpn
Как я могу подключиться к удаленному компьютеру, находящемуся под VPN ⇐ C#
Место общения программистов C#
1729739340
Anonymous
У меня есть удаленный компьютер, к которому я пытаюсь подключиться с помощью кода C# следующим образом
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace DeployCode
{
public static class NetworkManager
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NETRESOURCE
{
public ResourceScope dwScope;
public ResourceType dwType;
public ResourceDisplayType dwDisplayType;
public ResourceUsage dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
public enum ResourceScope : int { GlobalNetwork, Connected, Remembered, Recent, Context }
public enum ResourceType : int { Any, Disk, Print, Reserved }
public enum ResourceDisplayType : int { Generic, Domain, Server, Share, File, Group }
public enum ResourceUsage : int { Connectable = 1, Container = 2, NoLocalDevice = 4, Sibling = 8, Attached = 16 }
[DllImport("mpr.dll")]
public static extern int WNetAddConnection2(ref NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);
[DllImport("mpr.dll")]
public static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce);
///
/// Pings a server asynchronously to check its reachability.
///
///
The server to ping.
/// Returns true if the server is reachable, otherwise false.
public static async Task PingServerAsync(string server)
{
try
{
Ping ping = new Ping();
PingReply reply = await ping.SendPingAsync(server);
return reply.Status == IPStatus.Success;
}
catch
{
return false; // If an exception occurs, consider the ping as failed
}
}
///
/// Connects to a network share using the given path, username, and password.
///
/// The network share path (e.g., \\server\share).
/// The username to authenticate with.
/// The password for the user.
public static void ConnectToNetworkShare(string remotePath, string username, string password)
{
NETRESOURCE networkResource = new NETRESOURCE
{
dwScope = ResourceScope.GlobalNetwork,
dwType = ResourceType.Disk,
dwDisplayType = ResourceDisplayType.Share,
dwUsage = ResourceUsage.Connectable,
lpRemoteName = remotePath
};
int result = WNetAddConnection2(ref networkResource, password, username, 0);
if (result != 0)
{
throw new System.ComponentModel.Win32Exception(result, $"Failed to connect to network share: {remotePath}");
}
}
///
/// Disconnects from a network share.
///
/// The path to disconnect from.
public static void DisconnectFromNetworkShare(string remotePath)
{
int result = WNetCancelConnection2(remotePath, 0, true);
if (result != 0 && result != 2250) // 2250 means "no network connection"
{
throw new System.ComponentModel.Win32Exception(result, $"Failed to disconnect from network share: {remotePath}");
}
}
}
}
Когда я вручную подключаюсь со своего компьютера, после запуска кода он работает как положено. Но где, как когда я пытаюсь подключиться из кода, используя это
var username = $"{server}\\administrator";
var password = "mypassword";
var destinationFolder = $@"\\{server}\E$\Application";
NetworkManager.ConnectToNetworkShare(destinationFolder, username, password);
Подробнее здесь: [url]https://stackoverflow.com/questions/79120243/how-can-i-connect-to-a-remote-machine-which-is-under-vpn[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия