GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan alamat MAC mesin Anda menggunakan program C?

Jauh lebih bagus daripada semua kegilaan soket atau shell ini hanya menggunakan sysfs untuk ini:

file /sys/class/net/eth0/address membawa alamat mac Anda sebagai string sederhana yang dapat Anda baca dengan fopen() /fscanf() /fclose() . Tidak ada yang lebih mudah dari itu.

Dan jika Anda ingin mendukung antarmuka jaringan selain eth0 (dan Anda mungkin menginginkannya), cukup gunakan opendir() /readdir() /closedir() pada /sys/class/net/ .


Anda perlu mengulangi semua antarmuka yang tersedia di mesin Anda, dan menggunakan ioctl dengan SIOCGIFHWADDR bendera untuk mendapatkan alamat mac. Alamat mac akan diperoleh sebagai array biner 6 oktet. Anda juga ingin melewati antarmuka loopback.

#include <sys/ioctl.h>
#include <net/if.h> 
#include <unistd.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
    struct ifreq ifr;
    struct ifconf ifc;
    char buf[1024];
    int success = 0;

    int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock == -1) { /* handle error*/ };

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = buf;
    if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) { /* handle error */ }

    struct ifreq* it = ifc.ifc_req;
    const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq));

    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) {
                    success = 1;
                    break;
                }
            }
        }
        else { /* handle error */ }
    }

    unsigned char mac_address[6];

    if (success) memcpy(mac_address, ifr.ifr_hwaddr.sa_data, 6);
}

Anda ingin melihat halaman manual getifaddrs(3). Ada contoh di C di halaman manual itu sendiri yang bisa Anda gunakan. Anda ingin mendapatkan alamat dengan tipe AF_LINK .


Linux
  1. Cara mengubah alamat MAC menggunakan macchanger di Kali Linux

  2. Bagaimana Menjadi Anonim Pada Protokol IPv6 Dengan Tidak Menggunakan Alamat Mac Di Eui-64?

  3. Dapatkan alamat MAC menggunakan skrip shell

  1. Bagaimana cara menambahkan Alamat IP di Ubuntu 18.04 menggunakan netplan?

  2. Bagaimana cara menambahkan alamat IP di Ubuntu menggunakan perintah?

  3. Cara mendapatkan alamat memori tertentu menggunakan C

  1. Bagaimana menemukan alamat IP Anda di Linux

  2. Cara Menemukan/Mendapatkan Alamat IP Anda di Linux

  3. Bagaimana saya bisa menetapkan IP dengan alamat MAC di dhcpd