Выберите сетевую карту, которая может связываться с определенным IP - PullRequest
0 голосов
/ 15 марта 2019

Я получаю сообщение от клиента через какой-то ограниченный API и получаю IP-адрес этого клиента.Мой сервер имеет 4 сетевые карты.

Я хочу ответить клиенту, что он может связаться со мной по TCP-соединению на одном из моих интерфейсов, но как узнать, какой именно?

Как я могу изменить эту функцию, чтобы она возвращалаIPv4-адрес нужной сетевой карты?Как я могу сравнить IPv4-адрес клиента с моими адресами таким образом, чтобы он всегда возвращал IP-адрес, с которым фактически может связаться другой конец?IP-адреса могут быть любыми значениями с разными масками и шлюзами.

Что должна содержать пустая функция?

public static string GetLocalIPAddressInRange(IPAddress testIP)
{
    var host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (var ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            if(IPIsOnSameNetwork(ip, testIP))
            {
                return ip.ToString();
            }
        }
    }
    throw new Exception("No network adapters with an IPv4 address in the network!");
}

public static bool IPIsOnSameNetwork(IPAddress local, IPAddress test) 
{
}
...