:すべてのインターフェイスのC/C++ LinuxのMACアドレス
ifreq ifr;
ifconf ifc;
char buf[1024];
int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sock == -1) { ... };
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) { ... }
ifreq *it = ifc.ifc_req;
const ifreq* const end = it + (ifc.ifc_len/sizeof(ifreq));
for (; it != end; ++it) {
strcpy(ifr.ifr_name, it->ifr_name);
if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0) {
if (!(ifr.ifr_flags & IFF_LOOPBACK)) {
if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0) {
unsigned char mac_address[6];
memcpy(mac_address, ifr.ifr_hwaddr.sa_data, 6);
...
}
}
}
else { ... }
}
簡単なシェルコマンドifconfigを実行することにより、私は、LO、eth0とwlan0を見ることができます。 C/C++コードでeth0とwlan0のMACアドレスを取得したいと思います。しかしwlan0だけが返されます - eth0はありません(私はifr_names lo、lo、wlan0を持っています)。おそらく、eth0がアクティブでない(イーサネットケーブルが接続されていない、ケーブルが接続されていない)ためです。 「オフ」にしてもeth0を取得するためにioctl(SIOCGIFCONF)コマンドをどうにか変更することはできますか?
私が直接
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strcpy(s.ifr_name, "eth0");
if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) { ... }
が、何名がeth0のではないだろう場合はを使用することによって、そのHWアドレスを取得することができます何か他のもの(eth1の、EM0、...)?私はそれらのすべてを手に入れたいです。手伝ってくれてありがとう。
おかげで、それは常に解決策ですが、私はむしろ問題となる可能性がifconfigコマンドの結果を解析し、いくつかのC液を使用することになり、フォーマットは、など – user1173626