如何在Windows中使用scope_id将IPV6套接字绑定到接口(以太网)?

如何在Windows中使用scope_id将IPV6套接字绑定到接口(以太网)?,c,windows,sockets,ipv6,ethernet,C,Windows,Sockets,Ipv6,Ethernet,我尝试在windows中绑定IPV6套接字,这里绑定成功。但我想将它绑定到特定的接口(如ethernet0或ethernet1)。我试着使用if_nametoindex()和if_indextoname()之类的函数,但在这种情况下,我不知道如何找到特定接口的作用域id,所以我可以像这里这样使用server6.sin6_作用域id=?。我在Linux中编写了这段代码,效果很好。但是对于Windows操作系统,如何查找所有连接的接口,以便在函数if_nametoindex()中使用此接口名称来获取

我尝试在windows中绑定IPV6套接字,这里绑定成功。但我想将它绑定到特定的接口(如ethernet0或ethernet1)。我试着使用if_nametoindex()和if_indextoname()之类的函数,但在这种情况下,我不知道如何找到特定接口的作用域id,所以我可以像这里这样使用server6.sin6_作用域id=?。我在Linux中编写了这段代码,效果很好。但是对于Windows操作系统,如何查找所有连接的接口,以便在函数if_nametoindex()中使用此接口名称来获取Windows操作系统中的作用域id,然后绑定它???(windows的问题是,它通过使用if_indextoname()函数提供了以太网0、以太网4、隧道0等名称,所以如何确定哪个接口是LAN连接的或不是LAN连接的,所以我应该向下面的代码添加什么,以便将其绑定到特定的接口。)

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#pragma注释(lib,“ws2_32.lib”)
int main(){
单词wVersionRequested;
国际wsaerr;
WSADATA WSADATA;
字符缓冲区[1024];
int k,i=0,p,scope_id;
int off=0;
char*接口_name=NULL;
插座插座;
char*addr=“fe80::38d4:2862:404b:f781”;
6服务器6中的结构sockaddr_;
printf(“\n准备接收…\n”);
wVersionRequested=MAKEWORD(2,2);
wsaerr=WSAStartup(wVersionRequested和wsaData);
sockfd=插座(AF_INET6,SOCK_DGRAM,0);
if(sockfd==无效的_套接字)
printf(“\n错误…”);
其他的
printf(“\n成功创建…\n”);
memset(&server6,0,sizeof(server6));
server6.sin6_family=AF_INET6;
服务器6.sin6_端口=htons(5000);
server6.sin6_flowinfo=0;
p=inet\u pton(AF\u INET6、addr和server6.sin6\u addr);
setsockopt(sockfd、IPPROTO_IPV6、IPV6仅限,(char*)和off、sizeof(off));
if(bind(sockfd,(struct sockaddr*)&server6,sizeof(server6))=-1)
{
printf(“\n绑定错误..\n”);
}
否则{
printf(“\n绑定成功…\n”);
}
k=sizeof(服务器6);
recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)和server6,&k);
printf(“\n来自客户端%s的消息:”,缓冲区);
strcpy(缓冲区,“你好,我是客户…”);
sendto(sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)和server6,k);
闭合插座(sockfd);
getch();
返回0;
}
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <conio.h>
#include <netioapi.h> 
#include <iphlpapi.h>
#pragma comment(lib,"ws2_32.lib")

int main() {
    WORD wVersionRequested;
    int wsaerr;
    WSADATA wsaData;
    char buffer[1024];
    int k, i = 0, p, scope_id;
    int off = 0;
    char * interface_name = NULL;
    SOCKET sockfd;
    char * addr = "fe80::38d4:2862:404b:f781"; 
    struct sockaddr_in6 server6;
    printf("\n Ready for Receiving...\n");
    wVersionRequested = MAKEWORD(2, 2);
    wsaerr = WSAStartup(wVersionRequested, &wsaData);
    sockfd = socket(AF_INET6, SOCK_DGRAM, 0); 

    if(sockfd == INVALID_SOCKET)
       printf("\n Error.... ");    
    else
       printf("\n Successful Creation....\n");

       memset(&server6, 0, sizeof (server6));
       server6.sin6_family = AF_INET6;
       server6.sin6_port = htons(5000);
       server6.sin6_flowinfo = 0;
       p = inet_pton(AF_INET6, addr, &server6.sin6_addr);
       setsockopt(sockfd,IPPROTO_IPV6,IPV6_V6ONLY,(char *)&off, sizeof(off));

       if(bind(sockfd, (struct sockaddr *)&server6 , sizeof(server6))==-1)
       {
            printf("\n Error in binding..\n");       
       }
       else{
            printf("\n Binding successful...\n");
       }
       k = sizeof(server6);

       recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *) &server6, &k);     
       printf("\n Message from client %s: ", buffer);

       strcpy(buffer,"Hi This is Client...");
       sendto(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*) &server6,k);
       closesocket(sockfd);
       getch();
       return 0;
}