2012-12-19 59 views
1

如何在Linux上以編程方式添加任何接口?如何在Linux上以編程方式添加接口?

有沒有什麼辦法可以添加eth,loop或tun接口? 可以通過netlink完成嗎?

語言是C++,OS是Ubuntu。

+0

你問的是如何在C++中做一些你知道如何從shell命令中做些什麼?如果是這樣的話:你能列出你想要模仿的shell命令嗎?然後......什麼約束阻止你呼叫外殼? (或者:你在第一次使用C++的時候是怎麼畫的?) – HostileFork

+1

那麼我們談論的是什麼樣的linux ... Mandriva,ubuntu,Debian。 這將使你很容易爲程序添加接口,我喜歡使用Eclipse或在你的PC上添加酒和安裝視覺工作室2010 – Markin

+0

@HostileFork我不知道如何從shell命令做到這一點 –

回答

5

添加接口的方式取決於接口的類型。例如,通過打開/dev/net/tun並在您獲得的文件描述符上設置幾個ioctl s,創建一個例如tun or tap接口。這是Linux kernel documentation的一個小例子:

#include <linux/if.h> 
    #include <linux/if_tun.h> 

    int tun_alloc(char *dev) 
    { 
     struct ifreq ifr; 
     int fd, err; 

     if((fd = open("/dev/net/tun", O_RDWR)) < 0) 
     return tun_alloc_old(dev); 

     memset(&ifr, 0, sizeof(ifr)); 

     /* Flags: IFF_TUN - TUN device (no Ethernet headers) 
     *  IFF_TAP - TAP device 
     * 
     *  IFF_NO_PI - Do not provide packet information 
     */ 
     ifr.ifr_flags = IFF_TUN; 
     if(*dev) 
     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; 
    }    
相關問題