RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : чтение масок сетей


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Joseph
To : All
Subj : чтение масок сетей

Привет всем.
Столкнулся с проблемой:

мне нужно в программе ограничить входящие пакеты только прописанными в ifconfig (setup.cmd) локальными сетками. При этом компьютер имеет выход в Инет и могут быть попытки внешних соединений.

Для этого я должен иметь список висящих на порту адресов вместе с alias и их маски.

Получить их можно только примерно таким кодом
for (i = 0; i < nInterfaces; i++) { struct ifreq *item = &ifr[i]; struct
sockaddr_in *sin;

if (item->ifr_addr.sa_family != AF_INET) continue;

sin = (struct sockaddr_in *)&item->ifr_addr; printf("%s: IP %s",
item->ifr_name, inet_ntoa(sin->sin_addr));

{ struct ifreq ifr_mask;
memset(&ifr_mask, 0, sizeof(ifr_mask));
strncpy(ifr_mask.ifr_name, item->ifr_name, IFNAMSIZ);
ifr_mask.ifr_name[IFNAMSIZ - 1] = '';

if (ioctl(s, SIOCGIFNETMASK, &ifr_mask) >= 0) { sin = (struct sockaddr_in
*)&ifr_mask.ifr_addr; printf(", Mask %s", inet_ntoa(sin->sin_addr)); } }
printf("n");
}
С адресами все хорошо - получаю весь список а вот с масками я получаю одну маску на все alias. Независимо от класса сети :(

Может кто знает какую-нибудь хитрость, что нужно учесть?
Внутренний, казалось-бы ненужный блок посоветовал Grok, но и без него работает так-же. реальную маску я получаю только одну на интерфейс

Вот настройки адресов
ifconfig lan0 192.168.103.155 netmask 255.255.255.0 metric 1 mtu 1500
ifconfig lan0 10.0.0.254 netmask 255.0.0.0 metric 1 mtu 1500 alias
ifconfig lan0 128.1.0.254 netmask 255.255.0.0 metric 1 mtu 1500 alias






Tue 20 Oct 2026 11:46 Mozilla/5.0 (OS/2; Warp 4.5; rv:45.0) Gecko/20100101 Firefox




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.