Skip to content

Commit ed01272

Browse files
committed
LocalIP: detect netmask
1 parent 1c660ca commit ed01272

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/detection/localip/localip_linux.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,17 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results)
8080
continue;
8181

8282
struct sockaddr_in* ipv4 = (struct sockaddr_in*) ifa->ifa_addr;
83-
char addressBuffer[INET_ADDRSTRLEN];
83+
char addressBuffer[INET_ADDRSTRLEN + 4];
8484
inet_ntop(AF_INET, &ipv4->sin_addr, addressBuffer, INET_ADDRSTRLEN);
85+
86+
struct sockaddr_in* netmask = (struct sockaddr_in*) ifa->ifa_netmask;
87+
int cidr = __builtin_popcount(inet_netof(netmask->sin_addr));
88+
if (cidr != 0)
89+
{
90+
size_t len = strlen(addressBuffer);
91+
snprintf(addressBuffer + len, 4, "/%d", cidr);
92+
}
93+
8594
addNewIp(results, ifa->ifa_name, addressBuffer, AF_INET, isDefaultRoute);
8695
}
8796
else if (ifa->ifa_addr->sa_family == AF_INET6)

src/detection/localip/localip_windows.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,15 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results)
105105
if (ifa->Address.lpSockaddr->sa_family == AF_INET)
106106
{
107107
SOCKADDR_IN* ipv4 = (SOCKADDR_IN*) ifa->Address.lpSockaddr;
108-
char addressBuffer[INET_ADDRSTRLEN];
108+
char addressBuffer[INET_ADDRSTRLEN + 4];
109109
inet_ntop(AF_INET, &ipv4->sin_addr, addressBuffer, INET_ADDRSTRLEN);
110+
111+
if (ifa->OnLinkPrefixLength)
112+
{
113+
size_t len = strlen(addressBuffer);
114+
snprintf(addressBuffer + len, 4, "/%u", (unsigned) ifa->OnLinkPrefixLength);
115+
}
116+
110117
addNewIp(results, name, addressBuffer, AF_INET, newIp, isDefaultRoute);
111118
newIp = false;
112119
}

0 commit comments

Comments
 (0)