Ошибка при выполнении SendARP
От: Sokil  
Дата: 12.02.07 19:42
Оценка:
Нужно получить МАС-адресс машины, на которой выполняется приложение.
Взял из МСДН"а пример.
Работает без ошибок:
    HRESULT hr;
    IPAddr  ipAddr;
    ULONG   pulMac[2];
    ULONG   ulLen;

    memset (pulMac, 0xff, sizeof (pulMac));
    ulLen = 6;

    ipAddr = inet_addr ("192.168.XXX.XXX"); //адрес в локальной сети
    hr = SendARP (ipAddr, 0, pulMac, &ulLen);


Чтобы получить свой МАС-адресс отправляю пакет на 127.0.0.1
    ipAddr = inet_addr ("127.0.0.1");
    hr = SendARP (ipAddr, 0, pulMac, &ulLen);


Возвращает hr = 0x0000001f A device attached to the system is not functioning.

Подскажите, пожалуйста, в чем проблема ?


13.02.07 17:13: Перенесено модератором из 'C/C++' — Кодт
Re: Ошибка при выполнении SendARP
От: Аноним  
Дата: 12.02.07 20:49
Оценка: 1 (1) +1
во первых — у 127.0.0.0 нету MAC
во вторых SendARP Не резолвит свои собственные маки
Re: Ошибка при выполнении SendARP
От: Аноним  
Дата: 14.02.07 15:57
Оценка:
Здравствуйте, Sokil, Вы писали:

S>Нужно получить МАС-адресс машины, на которой выполняется приложение.

S>Взял из МСДН"а пример.
S>Работает без ошибок:
S>
S>    HRESULT hr;
S>    IPAddr  ipAddr;
S>    ULONG   pulMac[2];
S>    ULONG   ulLen;

S>    memset (pulMac, 0xff, sizeof (pulMac));
S>    ulLen = 6;

S>    ipAddr = inet_addr ("192.168.XXX.XXX"); //адрес в локальной сети
S>    hr = SendARP (ipAddr, 0, pulMac, &ulLen);
S>


S>Чтобы получить свой МАС-адресс отправляю пакет на 127.0.0.1

S>
S>    ipAddr = inet_addr ("127.0.0.1");
S>    hr = SendARP (ipAddr, 0, pulMac, &ulLen);
S>


S>Возвращает hr = 0x0000001f A device attached to the system is not functioning.


S>Подскажите, пожалуйста, в чем проблема ?



Для получения MAC'адреса сетевого интерфейса можно использовать IpHelper API (см. MSDN). Честно говоря, когда
передомной стоял тот же вопрос, я не нашёл другого решения в Win (имею ввиду в Win API), как это, но его вполне хватает (если на PC есть несколько сетевых интерфейсов — это не проблема). Ещё, вроде как, что-то было в библиотеки ACE, но я это не использовал.

P. S. У Вас, как мне кажется, программа на WinAPI (т.е., например, требования кросс-платформенности нет), так что ACE, думаю, будет излишней. IpHelper!
Re: Ошибка при выполнении SendARP
От: SergeyVKV  
Дата: 16.02.07 20:45
Оценка:
Здравствуйте, Sokil, Вы писали:

Ещё можно и через службу NetBIOS (конечно, если она запущена). Кстати на сайте вроде где-то был пример.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.