С# - Как получить IP-адрес при подключении к (RAS) VPN

Добрый день,

Может ли кто-нибудь привести примеры того, как получить IP-адрес локальной машины, когда она подключена к удаленной сети домена Windows через VPN (RAS)? т. е. мне нужен адрес VPN, а не адрес локальной сети удаленных пользователей.

Например, моя служба Windows на стороне сервера взаимодействует с моим клиентским приложением и должна создать журнал всех подключенных пользователей и их IP-адресов.

Это решение достаточно просто при использовании компьютера в локальной сети, но мне было интересно, как я могу получить IP-адреса пользователей, подключенных к серверу через VPN. Обратите внимание, что метод get IP-адреса будет выполняться на стороне клиента и отправляться на сервер.

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

public static string GetLocalIPv4()
{
    string ipv4Address = String.Empty;

    foreach (IPAddress currrentIPAddress in Dns.GetHostAddresses(Dns.GetHostName()))
    {
        if (currrentIPAddress.AddressFamily.ToString() == System.Net.Sockets.AddressFamily.InterNetwork.ToString())
        {
            ipv4Address = currrentIPAddress.ToString();
            break;
        }
    }

    return ipv4Address;
}

Наша внутренняя сеть управляется Windows SBS и использует такой домен, как mycompany.local.

Большое спасибо за ваше время, и я с нетерпением жду ваших ответов.

Роб


person RobHurd    schedule 14.11.2012    source источник
comment
удаленный адрес на другой стороне VPN вряд ли будет полезен. представьте, что кто-то входит через сотовый канал передачи данных - его IP-адрес будет примерно 10.x.x.x частный IP-адрес за шлюзом NAT сотовой связи. то же самое для тех, кто использует бесплатный Wi-Fi в отеле и т. д.   -  person Marc B    schedule 14.11.2012


Ответы (1)


Как отмечает комментарий от @MarcB, не могу придумать вескую причину, по которой вам может понадобиться эта информация... поэтому было бы интересно, если бы вы могли объяснить ее использование в приложении просто из любопытства.

Однако здесь и в Интернете есть много неправильных ответов относительно перечисления IP-адресов для машины с помощью Dns.GetHostAddresses. Похоже, что большинство людей не понимают разницы между поиском имени машины в настроенном распознавателе DNS и перечислением адреса машины. Это очень разные вещи, и хотя во многих случаях может показаться, что они возвращают правильные результаты, это абсолютно неправильный способ, потому что это не одно и то же. Например, см. эту ссылку на статью здесь, где оригинальный постер пометил неправильный ответ как ответ, но правильный ответ ниже от @StephanCleary. См.: Получить адреса IPv4

Разница в том, что вы хотите посмотреть конфигурацию машины и перечислить любой IP-адрес, который вы хотите найти, из собственного стека TCPIP машины. Приведенный выше код и многие неправильные ответы пытаются найти имя в преобразователе DNS. После того, как вы сделаете эту часть правильно, вы сможете определить VPN-подключение на основе сетевого адаптера (по имени или другому атрибуту).

person dmarietta    schedule 14.11.2012