Есть ли способ получить MAC-адрес (физический адрес) моего сетевого интерфейса, через который проходит сокет-соединение, имея win сокет и удаленный ip.
То есть у нас есть SOCKET через который мы подключаемся к удаленному серверу, и нам нужно узнать, к какому сетевому интерфейсу подключена моя локальная машина и какой у нее MAC. Не удаленный MAC.
В ситуации, когда у нас 2 и более сетевых интерфейса, мы не можем достоверно понять, что соединение было выполнено с использованием основного адаптера.
У нас есть ifreq и в Linux — определение MAC-адреса по IP-адресу
Но я не смог найти аналогичное решение в Windows
Где взять arpa /inet.h?
У нас есть https://learn.microsoft.com/ru-ru/windo ... getsockopt с SOL_SOCKET с помощью SO_PROTOCOL_INFO. Но это не так.
У нас есть IPX_ADDRESS, но мы используем TCP/IP
ГОТОВОЕ решение:
std::vector find_mac_by_in_ip(const std::string& in_ip); // function body is below
int main()
{
SOCKET pRSocket = some_socket;
sockaddr_storage optVal;
int optLen = sizeof(sockaddr_storage);
std::string interface_ip;
if (getsockname(pRSocket, (struct sockaddr*)&optVal, &optLen) != SOCKET_ERROR) {
std::cout sin_addr), in_ip, INET6_ADDRSTRLEN);
}
else if (optVal.ss_family == AF_INET6) {
sockaddr_in6* addr_in6 = reinterpret_cast(&optVal);
inet_ntop(AF_INET6, &(addr_in6->sin6_addr), in_ip, INET6_ADDRSTRLEN);
}
else {
// TODO
}
interface_ip = in_ip;
std::cout
Подробнее здесь: https://stackoverflow.com/questions/787 ... -or-remote