SIOCGIFNETMASK не работает

У меня проблема с получением маски подсети с C++ на Кали Линукс.

Я не вижу что-то не так. Это не выдает ошибку или предупреждение. Если я заменю SIOCGIFNETMASK с SIOCGIFADDR в коде ниже, он работает нормально и возвращает IPv4-адрес.

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<string.h>

#include <sys/socket.h>
#include <sys/ioctl.h>
#include<linux/if.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#include <netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include <cerrno>

using namespace std;

int main() {

int s = socket(AF_INET, SOCK_DGRAM, 0);

struct ifreq conf;

memset(&conf, 0, sizeof(conf)); // fill confs with zero's
strncpy(conf.ifr_name, "eth0", IFNAMSIZ - 1); // eth0 as an interface
conf.ifr_addr.sa_family = AF_INET; //ipv4

if (ioctl(s, SIOCGIFNETMASK, &conf) < 0) {
printf("Could not get the subnet mask. Errorcode : %d %s\n", errno,
strerror(errno));
}

char* netmask = (conf.ifr_netmask.sa_data) + 2; // pointer zur subnetzmaske
printf("Subnet mask : %d.%d.%d.%d", netmask[0], netmask[1], netmask[2],
netmask[3]);

return 0;
}

С этим кодом возвращается -1.-1.-4.0

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]