Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Obtaining SubnetMask in C

Tags:

c

subnet

I wanted to get the IP address and the subnet mask. Now the IP part is done, however I couldn't find any socket function that would return a structure with the subnet mask in it. Does a socket function exist, that returns it in a structure?

Thanks!

like image 731
StephenOSx Avatar asked Dec 12 '22 12:12

StephenOSx


1 Answers

In Unix using getifaddrs

struct ifaddrs haves a member named ifa_netmask (Netmask of interface)

#include <arpa/inet.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <stdio.h>

int main ()
{
    struct ifaddrs *ifap, *ifa;
    struct sockaddr_in *sa;
    char *addr;

    getifaddrs (&ifap);
    for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
        if (ifa->ifa_addr->sa_family==AF_INET) {
            sa = (struct sockaddr_in *) ifa->ifa_netmask;
            addr = inet_ntoa(sa->sin_addr);
            printf("Interface: %s\tAddress: %s\n", ifa->ifa_name, addr);
        }
    }

    freeifaddrs(ifap);
    return 0;
}

Output

Interface: lo   Address: 255.0.0.0
Interface: eth0 Address: 255.255.255.0
like image 162
David Ranieri Avatar answered Dec 22 '22 07:12

David Ranieri