Unchecked ioctl Return Value

This commit is contained in:
2025-12-09 21:47:20 +01:00
parent 24d0eda150
commit 2c45158ee8
2 changed files with 37 additions and 13 deletions

View File

@ -16,6 +16,10 @@
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <ifaddrs.h>
#include <netpacket/packet.h>
#include <cstring>
#include <string>
#include <errno.h>
#include <stdlib.h>
#include <sys/ioctl.h>

View File

@ -143,24 +143,44 @@ string Logger::getTimestamp()
* \param void
* \return string MAC address (formatted)
*/
string Logger::getMacAddress()
std::string Logger::getMacAddress()
{
struct ifreq ifr;
int s = socket(AF_INET, SOCK_STREAM, 0);
struct ifaddrs *ifaddr, *ifa;
strcpy(ifr.ifr_name, "eth0");
if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0)
// default MAC if none found
std::string result = "00:00:00:00:00:00";
if (getifaddrs(&ifaddr) == -1)
return result;
for (ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next)
{
strcpy(ifr.ifr_name, "eno1");
if (!ifa->ifa_addr)
continue;
// We want AF_PACKET interfaces (Ethernet)
if (ifa->ifa_addr->sa_family == AF_PACKET &&
!(ifa->ifa_flags & IFF_LOOPBACK) && // skip loopback interface
(ifa->ifa_flags & IFF_UP)) // must be up
{
struct sockaddr_ll *s = (struct sockaddr_ll *)ifa->ifa_addr;
if (s->sll_halen == 6)
{
char buf[32];
snprintf(buf, sizeof(buf),
"%02X:%02X:%02X:%02X:%02X:%02X",
s->sll_addr[0], s->sll_addr[1], s->sll_addr[2],
s->sll_addr[3], s->sll_addr[4], s->sll_addr[5]);
freeifaddrs(ifaddr);
return std::string(buf);
}
}
}
unsigned char *hwaddr = (unsigned char *)ifr.ifr_hwaddr.sa_data;
char buffer[80];
snprintf(buffer, sizeof(buffer), "%02X:%02X:%02X:%02X:%02X:%02X", hwaddr[0], hwaddr[1], hwaddr[2],
hwaddr[3], hwaddr[4], hwaddr[5]);
close(s);
string tmp = buffer;
return tmp;
freeifaddrs(ifaddr);
return result;
}
/**