Xinqi Bao's Git
25071e46f2f93c4cdc63dfd2168aa27648e1fc52
1 /* See LICENSE file for copyright and license details. */
12 ipv4(const char *iface
)
14 struct ifaddrs
*ifaddr
, *ifa
;
16 char host
[NI_MAXHOST
];
18 if (getifaddrs(&ifaddr
) == -1) {
19 warn("Failed to get IPv4 address for interface %s", iface
);
23 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
24 if (ifa
->ifa_addr
== NULL
) {
27 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
28 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
30 warnx("Failed to get IPv4 address for interface %s", iface
);
33 return bprintf("%s", host
);
43 ipv6(const char *iface
)
45 struct ifaddrs
*ifaddr
, *ifa
;
47 char host
[NI_MAXHOST
];
49 if (getifaddrs(&ifaddr
) == -1) {
50 warn("Failed to get IPv6 address for interface %s", iface
);
54 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
55 if (ifa
->ifa_addr
== NULL
) {
58 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
59 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
61 warnx("Failed to get IPv6 address for interface %s", iface
);
64 return bprintf("%s", host
);