The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Реализация на С."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Реализация на С."
Сообщение от Vladimir Z. emailИскать по авторуВ закладки on 23-Июл-03, 15:22  (MSK)
Подскажите пожалуйста как на С реализовать следующую вещь:
есть адрес, скажем 10.0.0.1;
как проверить в какую из сетей он входит:
192.168.0.0/24
172.16.0.0/16
10.0.0.0/8
?
Заранее спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Реализация на С."
Сообщение от XMan Искать по авторуВ закладки on 23-Июл-03, 15:50  (MSK)
Делаешь операцию AND между адресом и маской проверяемой подсети и смотришь, совпадает ли результат с адресом подсети. Если совпадает, то это та самая сеть:

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Реализация на С."
Сообщение от Vladimir Искать по авторуВ закладки on 23-Июл-03, 16:33  (MSK)
А какого типа hostaddr и mask?
у меня просто входные данные типа
char *ad="10.0.0.1";
как это должно выглядеть?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Реализация на С."
Сообщение от J Искать по авторуВ закладки on 24-Июл-03, 10:30  (MSK)
>А какого типа 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);                            
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Реализация на С."
Сообщение от Vladimir Искать по авторуВ закладки on 24-Июл-03, 11:33  (MSK)
Спасибо - помогло !
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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