Сетка возвращается в rt_msghdr2 в неверном форматеIOS

Программируем под IOS
Ответить
Anonymous
 Сетка возвращается в rt_msghdr2 в неверном формате

Сообщение Anonymous »

Я хочу проанализировать маршруты, возвращаемые ядром при выводе функции sysctl с аргументами: {ctl_net, pf_route, 0, af_inet, net_rt_dump2, 0} . sockaddr* at index rtax_netmask не содержит действительной структуры sockaddr .

Код для извлечения адресов из struct rt_msghdr2 возвращается с помощью sysctl :

Код: Выделить всё

// ROUNDUP Taken from route.c
#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (sizeof(uint32_t) - 1))) : sizeof(uint32_t))

struct rt_msghdr2* routeMsg = (struct rt_msgdr2*)buffer;
struct sockaddr* sockAddrArray[RTAX_MAX];
memset(sockAddrArray, 0, sizeof(sockAddrArray));
struct sockaddr* currentSockAddr;
currentSockAddr = (struct sockaddr*)(routeMsg + 1);

for (int i = 0; i < RTAX_MAX; i++) {
if (routeMsg->rtm_addrs & (1 sa_len) + (char *)currentSockAddr);
}
else {
sockAddrArray[i] = NULL;
}
}
< /code>

Несмотря на то, что rootmesg < /code> утверждает, что у него есть сетка, когда я проверяю содержимое, я считаю, что в нем есть что -то вроде этого: < /p>

sockAddrArray[RTAX_NETMASK]->sa_len = 0
sockAddrArray[RTAX_NETMASK]->sa_type = \xff
sockAddrArray[RTAX_NETMASK]->sa_data = { \xff, \xff, \0, ...}
< /code>

Странная вещь заключается в том, что в соответствующем маршруте на хосте (на основе адресов сети и шлюза) есть сетчатая масска 255.255.255.0 < /code>, который слишком хорошо соответствует прямому содержанию сети Sockaddr < /code>. Rtax_netmask 
в массиве, поскольку он будет неправильно проанализирован.>

Подробнее здесь: https://stackoverflow.com/questions/336 ... lid-format
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»