fallback for getting the MAC address

This commit is contained in:
badaix 2016-01-12 07:21:43 +01:00
parent 4eb77a2384
commit 2923a7d456
2 changed files with 22 additions and 5 deletions

View file

@ -72,7 +72,7 @@ void ClientConnection::start()
std::string mac = getMacAddress(socket_->native());
if (mac.empty())
mac = "00:00:00:00:00:00";
logO << "My MAC: \"" << mac << "\"\n";
logO << "My MAC: \"" << mac << "\", socket: " << socket_->native() << "\n";
msg::Hello hello(mac);
send(&hello);
connected_ = true;

View file

@ -160,14 +160,31 @@ static std::string getMacAddress(int sock)
struct ifreq* it = ifc.ifc_req;
const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq));
for (; it != end; ++it) {
for (; it != end; ++it)
{
strcpy(ifr.ifr_name, it->ifr_name);
if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0) {
if (! (ifr.ifr_flags & IFF_LOOPBACK)) { // don't count loopback
if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0) {
if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0)
{
if (!(ifr.ifr_flags & IFF_LOOPBACK)) // don't count loopback
{
if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0)
{
success = 1;
break;
}
else
{
std::stringstream ss;
ss << "/sys/class/net/" << ifr.ifr_name << "/address";
std::ifstream infile(ss.str().c_str());
std::string line;
if (infile.good() && std::getline(infile, line))
{
trim(line);
if ((line.size() == 17) && (line[2] == ':'))
return line;
}
}
}
}
else { /* handle error */ }