определить мак адресс удаленно

Тема в разделе "WASM.WIN32", создана пользователем addedie, 21 мар 2020.

  1. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    25
    как програмно узнать мак адрес компьютера удаленного?
     
  2. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    addedie и Mikl___ нравится это.
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    MAC-адрес если что используется в пределах домена коллизий (в современном сетевом оборудовании это от сетевого разъема в компе до разъема роутера, у дедовских 10мбит хабов домен коллизий был в пределах коаксиального шланга, к которому все подключены), это типа аппаратного идентификатора сетевого интерфейса. Пожалуй только если ты соединяешь два кампуцера патч-кордом, то можешь с одного из них выяснить мак адрес соседнего. Я бы не назвал это "удаленно", для 100BASE-TX, 1000BASE-T и 1000BASE-TX эта удаленность не может превышать 100 метров.
    [​IMG]
     
    Последнее редактирование: 21 мар 2020
    addedie нравится это.
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Более того, сейчас многие локальные сети уже не используют чистый езернет. И мак-адрес может быть вам тупо недоступен за счет прослойки.
    В общем нужно больше инфы, что автор воспринимает про удаленность и о каких сетях идет речь.
     
  5. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    25
    Код (C):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <sys/socket.h>
    5. #include <sys/ioctl.h>
    6. #include <net/if_arp.h>
    7. #include <net/if.h>
    8. #include <netinet/in.h>
    9. #include <linux/sockios.h>
    10. #include <errno.h>
    11. int main(void)
    12. {
    13.     const char *addr = "192.168.0.2";
    14.     int             s;
    15.     struct arpreq       areq;
    16.     struct ifconf       ifc;
    17.     struct ifreq        ifrBuff[1024];
    18.     struct ifreq        *ifr;
    19.     struct sockaddr_in  *sin;
    20.     struct in_addr      ipaddr;
    21.     int num, i;
    22.     unsigned char       mac[10] = {0};
    23.     //  Create socket
    24.     if (-1 == (s = socket(AF_INET, SOCK_STREAM, 0)))
    25.     {
    26.         perror("socket");
    27.         exit(1);
    28.     }
    29.     //  Put address const char *addr to struct in_addr ipaddr
    30.     if (0 == inet_aton(addr, &ipaddr))
    31.     {
    32.         fprintf(stderr, "Error: bad dotted-decimal IP '%s'.\n", addr);
    33.         exit(1);
    34.     }
    35.     memset(&areq, 0, sizeof(areq));
    36.     sin = (struct sockaddr_in *)&areq.arp_pa;
    37.     sin->sin_family = AF_INET;
    38.     sin->sin_addr = ipaddr;
    39.     ifc.ifc_len = sizeof(ifrBuff);
    40.     ifc.ifc_buf = (char *)ifrBuff;
    41.     if (-1 == ioctl(s, SIOCGIFCONF, &ifc))
    42.     {
    43.         printf("Unable to make SIOCGIFCONF request, error %d: %s\n", errno, strerror(errno));
    44.         exit(1);
    45.     }
    46.     num = ifc.ifc_len/sizeof(struct ifreq);
    47.     for(ifr = ifc.ifc_req, i = 0; i<num; ifr++, i++)
    48.     {
    49.         if(ifr->ifr_addr.sa_family != AF_INET)
    50.             printf("[%d]: (%s) is not AF_INET interface!\n", i, ifr->ifr_name);
    51.         else
    52.             printf("[%d]: (%s) interface\n", i, ifr->ifr_name);
    53.         if(-1 == ioctl(s, SIOCGIFHWADDR, ifr))
    54.         {
    55.             printf("Unable to make SIOCGIFHWADDR request, error %d: %s\n", errno, strerror(errno));
    56.             continue;
    57.         }
    58.         memcpy(mac, (unsigned char *)&(ifr->ifr_hwaddr.sa_data), sizeof(struct sockaddr));
    59.         printf("[%d] MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
    60.                i, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
    61.         strncpy(areq.arp_dev, ifr->ifr_name, 15);
    62.         if(-1 == ioctl(s, SIOCGARP, &areq))
    63.         {
    64.             printf("Unable to make ARP request, error %d: %s\n", errno, strerror(errno));
    65.             continue;
    66.         }
    67.         printf("%s -> %02X:%02X:%02X:%02X:%02X:%02X\n", addr,
    68.                 (&areq.arp_ha)->sa_data[0],
    69.                 (&areq.arp_ha)->sa_data[1],
    70.                 (&areq.arp_ha)->sa_data[2],
    71.                 (&areq.arp_ha)->sa_data[3],
    72.                 (&areq.arp_ha)->sa_data[4],
    73.                 (&areq.arp_ha)->sa_data[5]);
    74.     }
    75.     return 0;
    76. }
    ну вот код к примеру по ссылке но он для линукс, как его на винду переписать?
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    С тобой как со стенами. Ссылка.
     
    LastNoob и addedie нравится это.
  7. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    25
    вот такого поворота я неожидал, то что надо спасибо.
     
  8. ant0xa

    ant0xa New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    29
    Если быть точным, то для Ethernet в пределах broadcast домена. Разница большая очень. Если грубо, то домен коллизий это хаб (Level-1 по OSI), а broadcast домен это свич (Level-2 по OSI). В пределах broadcast домена мак можно получить arp протоколом если разговор про IP сети.
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
  10. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Конечно же можно :)))
    Зашлите троян на удаленную машину и узнавайте не только MAC адрес.
    f13nd, абсолютно прав.