The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
работа с DHCP под линуксом, !*! Natan, 20-Июн-05, 11:58  [смотреть все]
Есть необходимость разобраться с принципом работы DHCP, для этого хочу написать что-то простое, например работа с DHCPDISCOVER, DHCPOFFER и пр.
Создать пакет IMHO не проблема, но вот что класть в src_addr, если IP еще нет, и второе - как выяснить MAC-адрес интерфейса (MAC нужно класть в DHCP пакет при отправке broadcast сообщения).

Спасибо!

  • работа с DHCP под линуксом, !*! Vladimir, 12:23 , 20-Июн-05 (1)
    >Есть необходимость разобраться с принципом работы DHCP, для этого хочу написать что-то
    >простое, например работа с DHCPDISCOVER, DHCPOFFER и пр.
    >Создать пакет IMHO не проблема, но вот что класть в src_addr, если
    >IP еще нет, и второе - как выяснить MAC-адрес интерфейса (MAC
    >нужно класть в DHCP пакет при отправке broadcast сообщения).
    >
    >Спасибо!

    Посмотри эту статью. После нее помойму можно догадаться что и как зделать.
    https://www.opennet.ru/docs/RUS/inet_book/4/4/dhcp.html

    • работа с DHCP под линуксом, !*! Natan, 13:50 , 20-Июн-05 (2)
      >>Есть необходимость разобраться с принципом работы DHCP, для этого хочу написать что-то
      >>простое, например работа с DHCPDISCOVER, DHCPOFFER и пр.
      >>Создать пакет IMHO не проблема, но вот что класть в src_addr, если
      >>IP еще нет, и второе - как выяснить MAC-адрес интерфейса (MAC
      >>нужно класть в DHCP пакет при отправке broadcast сообщения).
      >>
      >>Спасибо!
      >
      >Посмотри эту статью. После нее помойму можно догадаться что и как зделать.
      >
      >https://www.opennet.ru/docs/RUS/inet_book/4/4/dhcp.html


      Спасибо за ссылку, но это просто переведенный RFC, который я уже изучил :)
      Вот если бы к-л исходники, легкие для понимания :)

      • работа с DHCP под линуксом, !*! Vladimir, 14:16 , 20-Июн-05 (3)
        >>>Есть необходимость разобраться с принципом работы DHCP, для этого хочу написать что-то
        >>>простое, например работа с DHCPDISCOVER, DHCPOFFER и пр.
        >>>Создать пакет IMHO не проблема, но вот что класть в src_addr, если
        >>>IP еще нет, и второе - как выяснить MAC-адрес интерфейса (MAC
        >>>нужно класть в DHCP пакет при отправке broadcast сообщения).
        >>>
        >>>Спасибо!
        >>
        >>Посмотри эту статью. После нее помойму можно догадаться что и как зделать.
        >>
        >>https://www.opennet.ru/docs/RUS/inet_book/4/4/dhcp.html
        >
        >
        >Спасибо за ссылку, но это просто переведенный RFC, который я уже изучил
        >:)
        >Вот если бы к-л исходники, легкие для понимания :)

        Вот если б ме кто-то кинул исходники как на C брать пакет из divert, и возвращать его в ipfw :)

        • работа с DHCP под линуксом, !*! Forth, 14:47 , 22-Июн-05 (4)
          >Вот если б ме кто-то кинул исходники как на C брать пакет
          >из divert, и возвращать его в ipfw :)
          вот кусочек с моей проги:
          /*Создаем сокет*/
            if ((s=socket(PF_INET, SOCK_RAW, IPPROTO_DIVERT))<0) {
              perror("socket");
              closelog();
              exit(1);
            }
            /*Заполняем структуру перед вызовом bind*/
            sa.sin_family=PF_INET;
            sa.sin_addr.s_addr=INADDR_ANY;
            sa.sin_port=htons(PORT_NUM);
            /*Вызываем bind для инициализации сокета*/
            if (bind(s,(struct sockaddr*) &sa,sizeof sa) == -1) {
              perror("bind");
              close(s);
              closelog();
              exit(1);
            }
          Вот так забираем пакетик из сокета(этож обычный raw):
          recv_size=recvfrom(s,buf,sizeof buf,0,(struct sockaddr*) &addr,&addr_size);
            if (recv_size==-1) {
             if (errno==EINTR) {
              continue;
             }
             perror("recv");
             closelog();
             close(s);
             return 1;
            }
          А чтобы обратно записать - sendto. Только пакетик правильно оформить перед передачей(Указатель на buf сунуть в указатель на структуру типа struct ip* (она есть в netinet/ip.h)). Смотреть одним глазом в man 4 divert, вторым в /usr/src/sbin/natd/natd.c (очень понятно написанный, по нему и изучать divert).



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру