The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Узнать MAC-адрес по IP"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Узнать MAC-адрес по IP"  +/
Сообщение от jockerface on 28-Апр-15, 09:19 
Здравствуйте!
Скажите пожалуйста, как можно узнать MAC-адрес устройства в локальной сети, зная его IP?
Есть вот такой код, но при использовании этой функции получаю "ioctl: No such device", хотя устройство с этим адресом точно подключено.

void *GetMAC(char *IP) {
    int s;
    struct arpreq arpreq;
    struct sockaddr_in *sin;
    unsigned char *eap;

    memset(&arpreq, 0, sizeof(arpreq));

    sin = (struct sockaddr_in *) &arpreq.arp_pa;
    sin->sin_family = AF_INET;
    sin->sin_addr.s_addr = inet_addr(IP);

    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s < 0) {
        perror("socket");
        exit(0);
    }
    if (ioctl(s, SIOCGARP, &arpreq) < 0) {
        perror("ioctl");
        exit(0);
    }
    printf("IP address:       %s\n", inet_ntoa(sin->sin_addr));

    if (arpreq.arp_flags & ATF_COM) {
        eap = (unsigned char *) &arpreq.arp_ha.sa_data[0];
        printf("Ethernet address: X:X:X:X:X:X",
                eap[0], eap[1], eap[2], eap[3], eap[4], eap[5]);
        if (arpreq.arp_flags & ATF_PERM) printf(" PERM");
        if (arpreq.arp_flags & ATF_PUBL) printf(" PUBLISHED");
        if (arpreq.arp_flags & ATF_USETRAILERS) printf(" TRAILERS");
        if (arpreq.arp_flags & ATF_PROXY) printf(" PROXY");
        printf("\n");
    } else {
        printf("*** INCOMPLETE ***\n");
    }
    close(s);
}

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Узнать MAC-адрес по IP"  +/
Сообщение от PavelR (??) on 28-Апр-15, 09:41 
ИМХО:

сокет надо забиндить на конкретный интерфейс.


На С я не писал таких штук, но что-то, про что в файле написано

Original code from: https://www.phillips321.co.uk/2012/07/24/python-arp-ping-code/

у меня работало.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Узнать MAC-адрес по IP"  +/
Сообщение от Прохожий (??) on 28-Апр-15, 10:12 
А arping для этого не подойдет ?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Узнать MAC-адрес по IP"  +/
Сообщение от jockerface on 28-Апр-15, 11:25 
>  А arping для этого не подойдет ?

Не проверял, не знаю.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Узнать MAC-адрес по IP"  +/
Сообщение от jockerface on 28-Апр-15, 14:14 
Решение проблемы:

Нужно перед ioctl добавить

strcpy(arpreq.arp_dev, "eth0");


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Узнать MAC-адрес по IP"  +/
Сообщение от Аноним (??) on 28-Апр-15, 19:21 
> Здравствуйте!
> Скажите пожалуйста, как можно узнать MAC-адрес устройства в локальной сети, зная его  IP?

rv@guru:~$ /usr/sbin/arp 192.168.7.10
Address                  HWtype  HWaddress           Flags Mask            Iface
noc-**01.f***.com       ether   00:15:5d:07:37:00   C                     eth0

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру