Путаница в IPv6 локальных адресах

128
02 марта 2018, 13:50

Есть один сетевой адаптер, мне нужно узнать его локальный IPv6, для отправки запросов с сокета (сокет в режиме DualMode) через этот IP.

Проблема вот в чем. При получении списка локальных IP через Dns.GetHostEntry(Dns.GetHostName()).AddressList выдается два! адреса IPv6. Один адрес как раз из свойств сетевой карты, а второй адрес из виртуального Microsoft 6 to 4 tunnel adapter.

Какой же адрес использовать для сокета, и для чего вообще этот адаптер нужен?

Update:

Попробовал направить запросы сокета через оба IPv6 локальных адреса. В итоге тот, который указан в настройках сетевого адаптера - нерабочий, а тот, который выдан Microsoft 6 to 4 tunnel adapter - рабочий.

Answer 1

Для проверки IPv6 (и заодно IPv4) пришлось писать такой метод:

private static bool CheckLocalIPv4_v6(string ip)
        {
            using (var socket = new Socket(SocketType.Dgram, ProtocolType.Unspecified))
            {
                try
                {
                    var endPoint = new IPEndPoint(IPAddress.Parse(ip), 0);
                    var isIPv6 = (endPoint.AddressFamily == AddressFamily.InterNetworkV6) ? true : false;
                    if (isIPv6)
                        socket.DualMode = true;
                    socket.Bind(endPoint);
                    socket.Connect((isIPv6) ? "2001:4860:4860::8888" : "8.8.8.8", 53);
                    return socket.Connected;
                }
                catch { return false; }
            }
        }

p.s. работает только на .NET 4.5 и выше, пруф.

p.p.s. варианта лучше я не нашел, если есть что-то более хорошее - поделитесь =)

READ ALSO
Ответ клиенту StreamWriter

Ответ клиенту StreamWriter

Мне необходимо отправить ответ клиенту после подключении 1 байтКлиент подключается, по мануалу, после подключения, я должен отправить ответ...

145
Изменение текстовых полей на сайте с помощью C#

Изменение текстовых полей на сайте с помощью C#

Нужно с помощью C# авторизоваться на сайте и внести изменения на нёмВ моём случае, сайт — настройки майнинг машины

149
Массив string в MySql

Массив string в MySql

У меня есть бд MySql для пользователей, мне нужно к ним сделать список ссылок, у каждого юзера он свойУ меня также есть класс Account, и в нём Links;...

131
С# - Вне границ массива [требует правки]

С# - Вне границ массива [требует правки]

Задание: Ввести двумерный целочисленный рваный массив и убрать из него положительные строкиПроблема: в определенном моменте индекс выскакивает...

117