Skip to content

Commit 3a2786a

Browse files
committed
LocalIP: support network prefix detection for IPv6
1 parent a6cb30d commit 3a2786a

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/detection/localip/localip_linux.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,19 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results)
101101
continue;
102102

103103
struct sockaddr_in6* ipv6 = (struct sockaddr_in6 *)ifa->ifa_addr;
104-
char addressBuffer[INET6_ADDRSTRLEN];
104+
char addressBuffer[INET6_ADDRSTRLEN + 4];
105105
inet_ntop(AF_INET6, &ipv6->sin6_addr, addressBuffer, INET6_ADDRSTRLEN);
106+
107+
struct sockaddr_in6* netmask = (struct sockaddr_in6*) ifa->ifa_netmask;
108+
int cidr = 0;
109+
for (uint32_t i = 0; i < sizeof(netmask->sin6_addr.s6_addr32) / sizeof(netmask->sin6_addr.s6_addr32[0]); ++i)
110+
cidr += __builtin_popcount(netmask->sin6_addr.s6_addr32[i]);
111+
if (cidr != 0)
112+
{
113+
size_t len = strlen(addressBuffer);
114+
snprintf(addressBuffer + len, 4, "/%d", cidr);
115+
}
116+
106117
addNewIp(results, ifa->ifa_name, addressBuffer, AF_INET6, isDefaultRoute);
107118
}
108119
#if defined(__FreeBSD__) || defined(__APPLE__)

src/detection/localip/localip_windows.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,15 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results)
122122
else if (ifa->Address.lpSockaddr->sa_family == AF_INET6)
123123
{
124124
SOCKADDR_IN6* ipv6 = (SOCKADDR_IN6*) ifa->Address.lpSockaddr;
125-
char addressBuffer[INET6_ADDRSTRLEN];
125+
char addressBuffer[INET6_ADDRSTRLEN + 4];
126126
inet_ntop(AF_INET6, &ipv6->sin6_addr, addressBuffer, INET6_ADDRSTRLEN);
127+
128+
if (ifa->OnLinkPrefixLength)
129+
{
130+
size_t len = strlen(addressBuffer);
131+
snprintf(addressBuffer + len, 4, "/%u", (unsigned) ifa->OnLinkPrefixLength);
132+
}
133+
127134
addNewIp(results, name, addressBuffer, AF_INET6, newIp, isDefaultRoute);
128135
newIp = false;
129136
}

0 commit comments

Comments
 (0)