linux ping 虚拟网卡_如何在linux程序中创建多个tun/tap虚拟网卡?

我想在redhat enterprise 5的程序中创建多个tun/tap虚拟网卡。最初先创建一个tap设备,写了收包和发包函数,能正常工作,可是当创建两个tap设备时,出现了问题。我把创建的函数帖出来:

int tun_create(char *dev, int flags)

{

struct ifreq ifr;

int fd, err;

assert(dev != NULL);

if ((fd = open("/dev/net/tun", 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;

}

// set_nonblock (fd);

strcpy(dev,ifr.ifr_name);

return fd;

}

int main(int argc, char *argv[])

{

char tun_name[IFNAMSIZ]="tap0";

char tun_name1[IFNAMSIZ]="tap1";

Tap=tun_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=tun_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");

}

这样就创建了tap0(IP地址:10.0.0.185)和tap1(IP地址:10.0.0.186)。但ping tap0时,发出ping 回应的却是tap1,感觉它们两个好像是一个设备。

请问应该怎样创建两个或多个tap设备?希望用过tun/tap虚拟网卡的高手帮忙,谢谢!

我的Email:simba226@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值