Создание интерфейса TUN / TAP для отслеживания UDP - PullRequest
1 голос
/ 17 апреля 2020

Я пишу программу для прокси-пакетов UDP от входящего трафика c на машине Linux к моей программе. Цель состоит в том, чтобы просто печатать только UDP-пакеты машин traffi c. Для выполнения этой задачи я определил отдельные шаги.

  1. Создание интерфейса TAP
  2. Добавление интерфейса TAP к сетевому мосту
  3. Чтение из дескриптора файла интерфейса 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 в другом терминале я не вижу крана сетевого устройства? Почему я должен создать его перед запуском этой функции?

...