tun/tap 디바이스 생성 코드인데요..디바이스 생성이 안되네요;
글쓴이: vlzkcbcb / 작성시간: 금, 2009/11/27 - 12:40오후
아래코드를 이용하여 ip주소를 갖는 가상 디바이스를 하나 올리려하는데요
파일디스크립터는 가져오는데..실제로 인터페이스가 올라오질 않는데...뭐가문제인가요?
IFF_TUN 를 IFF_TAP 으로 바꾸어도 마찬가지입니다..ㅠㅠ
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <sys/socket.h> #include <linux/if.h> #include <linux/if_tun.h> #include <asm/ioctl.h> int tun_up(char *dev) { struct ifreq ifr; int fd, err; if( (fd = open("/dev/net/tun", O_RDWR)) < 0 ) return -1; 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 | IFF_NO_PI; 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; } int main(void) { char tun_dev[16]="tap0"; char set[50]=""; int n = 0; int fd; n += sprintf(set + n, "%s", "ifconfig "); n += sprintf(set + n, "%s", tun_dev); n += sprintf(set + n, "%s", " 192.168.0.1 netmask 255.255.255.0"); if ( (fd = tun_up(tun_dev)) < 0 ) { printf("fail\n"); } else { system(set); printf("%s dev fd = %d\n",tun_dev,fd); } }
Forums:
tun/tap 디바이스의
tun/tap 디바이스의 사용자 권한은 확인 하셨나요?
tunctl 로 사용자 권한을 지정하고 미리 만들어 놓고 하셔도 됩니다.
tunctl 로 만든 가상인터페이스의..
파일디스크립터는 어떻게 가져오나요?
말씀해주신대로 tunctl 를 이용하여 가상인터페이스를 만들었으나
실제 tcp/udp 통신 프로그래밍에서 활용을 해야하는데..
VPN 을 구현해보고싶은 마음은 굴뚝같고..초반부터 막히니 속상하네요 ㅠㅠ
예제를 보시고
예제를 보시고 코딩을 하신 것 같은데 올려주신 코드중에 약간 빠진 것이 있는 것 같아, 개인적으로 간단하게 만들어 쓰고 있는 코드를 아래에 올립니다.
loki 라이브러리는 금방 찾으실 수 있을 것이고, ScopeGuard은 에러시 close를 자동으로 호출하기 위해서 사용한 것입니다.
아래와 같이 하면 새로 디바이스를 만들어서 돌려주고
아래와 같이 하면 지정한 디바이스를 열어서 돌려줍니다. (tunctl로 미리 만들어 두었다면)
직접 만드신 코드를 공유해주시다니 감사드립니다.
하지만 ANSI C 로 구현을 해야해서 좀 무리가 있네요 ㅠㅠ
제가 올린 코드에
제가 올린 코드에 특별한 내용은 없으니, 원래 올려주신 코드와 비교를 해보시면 충분히 C로 풀어 쓰실 수 있을 것입니다.
댓글 달기