The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Реализация на С., !*! Vladimir Z., 23-Июл-03, 15:22  [смотреть все]
Подскажите пожалуйста как на С реализовать следующую вещь:
есть адрес, скажем 10.0.0.1;
как проверить в какую из сетей он входит:
192.168.0.0/24
172.16.0.0/16
10.0.0.0/8
?
Заранее спасибо.
  • Реализация на С., !*! XMan, 15:50 , 23-Июл-03 (1)
    Делаешь операцию AND между адресом и маской проверяемой подсети и смотришь, совпадает ли результат с адресом подсети. Если совпадает, то это та самая сеть:

    if ((hostaddr & mask) == netaddr) {
      // нужная сеть
    };

    • Реализация на С., !*! Vladimir, 16:33 , 23-Июл-03 (2)
      А какого типа hostaddr и mask?
      у меня просто входные данные типа
      char *ad="10.0.0.1";
      как это должно выглядеть?
      • Реализация на С., !*! J, 10:30 , 24-Июл-03 (3)
        >А какого типа hostaddr и mask?
        >у меня просто входные данные типа
        >char *ad="10.0.0.1";
        >как это должно выглядеть?


        int is_host_in_net(unsigned long net, unsigned long mask, unsigned long host){  
                long res,res1,res2;                                                    
                res1=net & mask;                                                        
                res2=host & mask;                                                      
                res=res1 - res2;                                                        
                if(res == 0)                                                            
                        return 0;                                                      
                return 1;                                                              
        }                                                                              
                                                                                        
        int is_host_in_net2(unsigned long net, unsigned long mask, char *host){        
                struct in_addr snet;                                                    
                inet_aton(host, &snet);                                                
                return is_host_in_net(net,mask,snet.s_addr);                            
        }




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

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