Есть несколько сетевых интерфейсов, и вроде бы как bind решает проблему, но появляется новая, когда несколько интерфейсов имеют одинаковые локальные ip в разных подсетях, как в этом случае быть? и вообще, как привязать сокет по имени интерфейса не даваясь в подробности его адреса? Копнув немного кода под unix нашел примерно следующее (или как работает ping -I):
Код | int sock; struct ifreq ifinfo; struct sockaddr_ll sockinfo; /* open socket */ sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); /* get interface index number */ memset(&ifinfo, 0, sizeof(ifinfo)); strcpy(ifinfo.ifr_name, "eth1"); ioctl(sock, SIOCGIFINDEX, &ifinfo); /* set sockinfo pointing to interface */ memset(&sockinfo, 0, sizeof(sockinfo)); sockinfo.sll_family = PF_PACKET; sockinfo.sll_protocol = htons(ETH_P_ALL); sockinfo.sll_ifindex = ifinfo.ifr_ifindex; /* bind socket to specific interface */ bind(sock, (struct sockaddr*)&sockinfo, sizeof(sockinfo));
|
возможно ли тоже самое провернуть и на java? |