- 论坛徽章:
- 0
|
多谢2位的回复。
我试了modprobe tun
mknod /dev/net/tun0 c 10 200
mknod /dev/net/tun1 c 10 201
然后在程序里
int tun0_create(char *dev, int flags)
{
struct ifreq ifr;
int fd, err;
assert(dev != NULL);
if ((fd = open("/dev/net/tun0", O_RDWR)) < 0)
return fd;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags |= flags;
if (*dev != '\0')
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
if ((err=ioctl(fd,TUNSETIFF,(void *)&ifr))<0){
close(fd);
return err;
}
strcpy(dev,ifr.ifr_name);
return fd;
}
int tun1_create(char *dev, int flags)
{
struct ifreq ifr;
int fd, err;
assert(dev != NULL);
if ((fd = open("/dev/net/tun1", O_RDWR)) < 0)
return fd;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags |= flags;
if (*dev != '\0')
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
if ((err=ioctl(fd,TUNSETIFF,(void *)&ifr))<0){
close(fd);
return err;
}
strcpy(dev,ifr.ifr_name);
return fd;
}
int main(int argc, char *argv[])
{
char tun_name[IFNAMSIZ]="tap0";
char tun_name1[IFNAMSIZ]="tap1";
Tap=tun0_create(tun_name, IFF_TAP | IFF_NO_PI);
if (Tap< 0) {
perror("tun_create");
return 1;
}
printf("TAP name is %s\n", tun_name);
printf("Tap=%d\n",Tap);
system("ifconfig tap0 10.0.0.185 netmask 255.255.0.0 up");
Tap1=tun1_create(tun_name1, IFF_TAP | IFF_NO_PI);
if (Tap1< 0) {
perror("tun_create");
return 1;
}
printf("TAP1 name is %s\n", tun_name1);
printf("Tap1=%d\n",Tap1);
system("ifconfig tap1 10.0.0.186 netmask 255.255.0.0 up");
}
可是运行时发现tun1_create函数里,fd = open("/dev/net/tun1", O_RDWR),fd返回-1,然后程序结束。请问怎么办?谢谢 |
|