|
17 | 17 |
|
18 | 18 | use Config qw(%Config);
|
19 | 19 | use IO::Handle qw();
|
20 |
| -use Socket qw(inet_ntoa); |
| 20 | +use Socket qw(inet_ntop sockaddr_in sockaddr_in6 getaddrinfo AI_CANONNAME SOCK_STREAM AF_INET AF_INET6); |
21 | 21 | use Sys::Hostname qw(hostname);
|
22 | 22 |
|
23 | 23 | my $instance = shift;
|
24 | 24 |
|
25 |
| -my $addr = scalar gethostbyname(hostname()); |
| 25 | +my $hints = {}; |
| 26 | +$hints->{flags} = AI_CANONNAME; |
| 27 | +$hints->{socktype} = SOCK_STREAM; |
| 28 | + |
26 | 29 | # If hostname address cannot be determines, use localhost to trigger fallback to system_profiler lookup
|
27 |
| -my $ipv4 = length $addr ? inet_ntoa($addr) : "127.0.0.1"; |
28 |
| -my $ipv6 = ""; # todo |
| 30 | +my $ipv4 = ""; |
| 31 | +my $ipv6 = ""; |
| 32 | +my ($err, @addrs) = getaddrinfo(hostname(), undef, $hints); |
| 33 | + |
| 34 | +if (addrs) { |
| 35 | + for (@addrs) { |
| 36 | + if ($_->{family} == AF_INET && $ipv4 eq "") { |
| 37 | + my $addr4 = (sockaddr_in($_->{addr}))[1]; |
| 38 | + $ipv4 = inet_ntop(AF_INET, $addr4); |
| 39 | + } elsif ($_->{family} == AF_INET6 && $ipv6 eq "") { |
| 40 | + my $addr6 = (sockaddr_in6($_->{addr}))[1]; |
| 41 | + $ipv6 = inet_ntop(AF_INET6, $addr6); |
| 42 | + } |
| 43 | + } |
| 44 | +} |
| 45 | + |
29 | 46 |
|
30 | 47 | # macOS Github runners seem to use "localhost" as the hostname
|
31 | 48 | if ($ipv4 eq "127.0.0.1" && $Config{osname} eq "darwin") {
|
32 |
| - $ipv4 = qx(system_profiler SPNetworkDataType -json | jq -r 'first(.SPNetworkDataType[] | select(.ip_address) | .ip_address) | first'); |
| 49 | + $ipv4 = qx(system_profiler SPNetworkDataType -json | jq -r 'first(.SPNetworkDataType[] | select(.IPv4.Addresses)) | .IPv4.Addresses | first'); |
33 | 50 | chomp $ipv4;
|
| 51 | + $ipv6 = qx(system_profiler SPNetworkDataType -json | jq -r 'first(.SPNetworkDataType[] | select(.IPv6.Addresses)) | .IPv6.Addresses | first'); |
| 52 | + chomp $ipv6; |
34 | 53 | }
|
35 | 54 |
|
36 | 55 | # If $instance is a filename, add our portForwards to it to enable testing
|
|
0 commit comments