Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
11 ipv4(const char *iface
)
13 struct ifaddrs
*ifaddr
, *ifa
;
15 char host
[NI_MAXHOST
];
17 if (getifaddrs(&ifaddr
) == -1) {
18 warn("Failed to get IPv4 address for interface %s", iface
);
22 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
23 if (ifa
->ifa_addr
== NULL
) {
26 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
27 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
29 warnx("Failed to get IPv4 address for interface %s", iface
);
32 return bprintf("%s", host
);
42 ipv6(const char *iface
)
44 struct ifaddrs
*ifaddr
, *ifa
;
46 char host
[NI_MAXHOST
];
48 if (getifaddrs(&ifaddr
) == -1) {
49 warn("Failed to get IPv6 address for interface %s", iface
);
53 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
54 if (ifa
->ifa_addr
== NULL
) {
57 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
58 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
60 warnx("Failed to get IPv6 address for interface %s", iface
);
63 return bprintf("%s", host
);