Xinqi Bao's Git
600fb86004c7f9e5e21943d9bfb31d516074f34b
10 ipv4(const char *iface
)
12 struct ifaddrs
*ifaddr
, *ifa
;
14 char host
[NI_MAXHOST
];
16 if (getifaddrs(&ifaddr
) == -1) {
17 warn("Failed to get IPv4 address for interface %s", iface
);
21 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
22 if (ifa
->ifa_addr
== NULL
) {
25 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
26 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
28 warnx("Failed to get IPv4 address for interface %s", iface
);
31 return bprintf("%s", host
);
41 ipv6(const char *iface
)
43 struct ifaddrs
*ifaddr
, *ifa
;
45 char host
[NI_MAXHOST
];
47 if (getifaddrs(&ifaddr
) == -1) {
48 warn("Failed to get IPv6 address for interface %s", iface
);
52 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
53 if (ifa
->ifa_addr
== NULL
) {
56 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
57 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
59 warnx("Failed to get IPv6 address for interface %s", iface
);
62 return bprintf("%s", host
);