日期:2014-05-16  浏览次数:20619 次

无线网卡发包
我用如下的程序发数据包,机器自动选择从有线网卡发出去。如果把有线网卡关掉,它就从无线网卡发了。怎样才能在不关掉有线网卡的情况下用无线网卡发包呢?
问题也可以描述为:一台计算机在多网卡的情况下,怎样从指定的网卡发包?

int   main(int   argc,char   **argv)
{
struct   addrinfo   ai;
struct   addrinfo   *res;
char   sendbuf[BUFSIZE];
int   len=96;
int   sockfd;

bzero(&ai,sizeof(ai));
ai.ai_flags=AI_CANONNAME;
ai.ai_family=AF_INET6;
ai.ai_socktype=0;
getaddrinfo( "ff02::1 ",   NULL,   &ai,   &res);//写入ipv6多播地址

sockfd=socket(AF_INET6,SOCK_RAW,IPPROTO_RAW);//ipv6原始套接口,实际需要只能用原始套接口

if(sendto(sockfd,sendbuf,len,0,res-> ai_addr,res-> ai_addrlen) <0){
perror( "sendto   error   is ");
exit(1);
};

return   0;
}
(为提问方便,我将原来的程序进行了简化)

------解决方案--------------------
bind是可以绑定IP地址和端口号...
应该是用这个吧..

ioctl多数是操作底层的东西...
------解决方案--------------------
同意楼上的,用bind指定本机地址,我怎么没想到