diff --git a/client/clientConnection.cpp b/client/clientConnection.cpp index a42678fc..4cd6a767 100644 --- a/client/clientConnection.cpp +++ b/client/clientConnection.cpp @@ -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; diff --git a/common/utils.h b/common/utils.h index 9e2127ad..98298509 100644 --- a/common/utils.h +++ b/common/utils.h @@ -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 */ }