1

I want to get the network interface name (like ens33, ens37 etc) from an IPv6 address which belongs to that interface from a C program in Linux. How to do that? Please help.

JatiA
  • 63
  • 1
  • 2
  • 10

1 Answers1

2

You can get a list of network interfaces using getifaddrs (Linux getting all network interface names)

below is from man page of getifaddrs

   The  getifaddrs() function creates a linked list of structures describing the network interfaces of the local system, and stores the address
   of the first item of the list in *ifap.  The list consists of ifaddrs structures, defined as follows:

       struct ifaddrs {
           struct ifaddrs  *ifa_next;    /* Next item in list */
           char            *ifa_name;    /* Name of interface */
           unsigned int     ifa_flags;   /* Flags from SIOCGIFFLAGS */
           struct sockaddr *ifa_addr;    /* Address of interface */
           struct sockaddr *ifa_netmask; /* Netmask of interface */
           union {
               struct sockaddr *ifu_broadaddr;
                                /* Broadcast address of interface */
               struct sockaddr *ifu_dstaddr;
                                /* Point-to-point destination address */
           } ifa_ifu;
       #define              ifa_broadaddr ifa_ifu.ifu_broadaddr
       #define              ifa_dstaddr   ifa_ifu.ifu_dstaddr
           void            *ifa_data;    /* Address-specific data */
       };

to do the reverse, just search the list.

Community
  • 1
  • 1
D3Hunter
  • 1,239
  • 10
  • 20