无法使用ioctl设置IP地址以点击界面

问题描述

在我的C ++程序中,我试图用地址设置一个Tap接口,设置UP标志的效果很好,但是当设置IP地址时,ioctl不返回任何此类设备,但是我将确切的名称传递给了ifreq结构。 / p>

这是代码

void set_addr(const char* name,const char* address){
int fd,err;
struct ifreq info;
struct sockaddr_in* addr;   
addr = (struct sockaddr_in*) &info;

if ( ( fd = socket(AF_INET,SOCK_DGRAM,0) ) < 0 )
    errormsg("Socket Creation Failed (addres)");


bzero(&info,sizeof(info));

if(*name)
strncpy(info.ifr_name,name,IFNAMSIZ);

info.ifr_addr.sa_family = AF_INET;

inet_pton(AF_INET,address,&addr->sin_addr);

std::cout<<inet_ntoa(addr->sin_addr)<<std::endl; // just to check it ip conversion worked


err = ioctl(fd,SIOCSIFADDR,&info);
if (err == -1)
    errormsg("Ioctl Failed setting address");

}

功能可以将tap设置为UP,并且可以将名称以相同的方式传递给ifreq结构

void set_state (const char* name,bool state){
int fd,err;
struct ifreq info;

if ( (fd = socket(AF_INET,0) ) < 0){
    perror("Socket creation Failed");
}

bzero(&info,sizeof(info));

if (*name)
strncpy(info.ifr_name,IFNAMSIZ);

if(state)
    info.ifr_flags = IFF_UP;
else
    info.ifr_flags = ~IFF_UP;

err = ioctl(fd,SIOCSIFFLAGS,&info);
if (err)    
    errormsg("Flags Failed");

}

使用调用函数

set_state("ons5",UP);
set_addr("ons5","10.0.0.1");

set_add给出:“ ioctl设置地址失败:没有这样的设备”

这里是接口名称的ss [1]:https://i.stack.imgur.com/RdcNc.png

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)