Я пишу программу для прокси-пакетов UDP от входящего трафика c на машине Linux к моей программе. Цель состоит в том, чтобы просто печатать только UDP-пакеты машин traffi c. Для выполнения этой задачи я определил отдельные шаги.
- Создание интерфейса TAP
- Добавление интерфейса TAP к сетевому мосту
- Чтение из дескриптора файла интерфейса TAP.
Но проблема в том, что я не понимаю, почему после запуска этой функции
int tun_alloc(char* dev, int flags, const char* ip, int port)
{
struct ifreq ifr;
int fd, err;
const char* clonedev = "/dev/net/tun";
if( (fd = open(clonedev, O_RDWR)) < 0)
{
perror("Opening /dev/net/tun");
return fd;
}
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = flags | IFF_UP;
if(*dev)
{
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
}
if((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0)
{
perror("ioctl(TUNSETIFF)");
close(fd);
return err;
}
strcpy(dev, ifr.ifr_name);
return fd;
}
и вызова ifconfig в другом терминале я не вижу крана сетевого устройства? Почему я должен создать его перед запуском этой функции?