Есть один сетевой адаптер, мне нужно узнать его локальный IPv6, для отправки запросов с сокета (сокет в режиме DualMode
) через этот IP.
Проблема вот в чем. При получении списка локальных IP через Dns.GetHostEntry(Dns.GetHostName()).AddressList
выдается два! адреса IPv6. Один адрес как раз из свойств сетевой карты, а второй адрес из виртуального Microsoft 6 to 4 tunnel adapter
.
Какой же адрес использовать для сокета, и для чего вообще этот адаптер нужен?
Update:
Попробовал направить запросы сокета через оба IPv6 локальных адреса. В итоге тот, который указан в настройках сетевого адаптера - нерабочий, а тот, который выдан Microsoft 6 to 4 tunnel adapter
- рабочий.
Для проверки 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. варианта лучше я не нашел, если есть что-то более хорошее - поделитесь =)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне необходимо отправить ответ клиенту после подключении 1 байтКлиент подключается, по мануалу, после подключения, я должен отправить ответ...
Нужно с помощью C# авторизоваться на сайте и внести изменения на нёмВ моём случае, сайт — настройки майнинг машины
У меня есть бд MySql для пользователей, мне нужно к ним сделать список ссылок, у каждого юзера он свойУ меня также есть класс Account, и в нём Links;...
Задание: Ввести двумерный целочисленный рваный массив и убрать из него положительные строкиПроблема: в определенном моменте индекс выскакивает...