Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
Здравствуйте, ebersen, Вы писали:
E>Привет Всем!
E>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
1. есть хорошая команда ARP ДОС сесии. Типа ARP>>filename.txt, а потом разбираешь файл
2. через WinSock(не помню как, гже-то исходники валялись)
3 пошли сам себе сообщение и заснифь пакет IP
Здравствуйте, ebersen, Вы писали:
E>Привет Всем!
E>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
На уровне драйвера сетевой карты MAC можно перехватить двумя способами:
тупой: фильтровать весь трафик и смотеть адрес в заголовке пакета
поумней: перехватывать конфигурационные запросы от системы (NDIS), среди них есть запрос и об адресе карты.
А МАС, прошитый в карты, также обычно можно узнать. Например, RTL8139 (RealTech) предоставляет регистры для перепрограммирования собственного ПЗУ (где и хранит МАС). НА уровне ядра туда можно чето посмотреть.
Здравствуйте, Flex2, Вы писали:
F>Здравствуйте, ebersen, Вы писали:
E>>Привет Всем!
E>>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
F>1. есть хорошая команда ARP ДОС сесии. Типа ARP>>filename.txt, а потом разбираешь файл F>2. через WinSock(не помню как, гже-то исходники валялись) F>3 пошли сам себе сообщение и заснифь пакет IP
Но эти способы, на сколько я понимаю, тоже не будут работать при выключении сети...
Здравствуйте, ebersen, Вы писали:
E>Здравствуйте, Flex2, Вы писали:
F>>Здравствуйте, ebersen, Вы писали:
E>>>Привет Всем!
E>>>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
F>>1. есть хорошая команда ARP ДОС сесии. Типа ARP>>filename.txt, а потом разбираешь файл F>>2. через WinSock(не помню как, гже-то исходники валялись) F>>3 пошли сам себе сообщение и заснифь пакет IP
E>Но эти способы, на сколько я понимаю, тоже не будут работать при выключении сети...
Будут.
Есть еще одно.
Придется помучатся, но можно открыть дрова, эдементраной командой CreateFile и дергать сервис API DDK, он 100% имеет такую-то апи аппаратура-ядро-ситема(это тебе в DDK или ставь Numega — для разработчиков драйверов, VS от 6.0 интегрируется.)
Однакодумаю что есть более простой способ.
И что значит выключенная сеть ?
Если нет драйва под карту сетки то нет. если все "ок" и сам себя видишь то все будет работать.
Здравствуйте, Flex2, Вы писали:
F>Здравствуйте, ebersen, Вы писали:
E>>Привет Всем!
E>>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
F>1. есть хорошая команда ARP ДОС сесии. Типа ARP>>filename.txt, а потом разбираешь файл F>2. через WinSock(не помню как, гже-то исходники валялись) F>3 пошли сам себе сообщение и заснифь пакет IP
Кто тебе мешает послать сообщение на адрес 127.0.0.1 — это localhost всегда — Сам себе пошли .
Все пройдет по 7 уровней арзхитектуре TCP/IP от 1 приложения ко 2.
Здравствуйте, Flex2, Вы писали:
F>Здравствуйте, ebersen, Вы писали:
E>>Здравствуйте, Flex2, Вы писали:
F>>>Здравствуйте, ebersen, Вы писали:
E>>>>Привет Всем!
E>>>>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
F>>>1. есть хорошая команда ARP ДОС сесии. Типа ARP>>filename.txt, а потом разбираешь файл F>>>2. через WinSock(не помню как, гже-то исходники валялись) F>>>3 пошли сам себе сообщение и заснифь пакет IP
E>>Но эти способы, на сколько я понимаю, тоже не будут работать при выключении сети...
F>Будут. F>Есть еще одно. F>Придется помучатся, но можно открыть дрова, эдементраной командой CreateFile и дергать сервис API DDK, он 100% имеет такую-то апи аппаратура-ядро-ситема(это тебе в DDK или ставь Numega — для разработчиков драйверов, VS от 6.0 интегрируется.) F>Однакодумаю что есть более простой способ.
F>И что значит выключенная сеть ? F>Если нет драйва под карту сетки то нет. если все "ок" и сам себя видишь то все будет работать.
Выключенная сеть означает, что для Local Area Connection просто юзер сделал Disable. От этого же карта не перестала существовать со своим MAC'ом, но трафика ужо никакого нету.
Здравствуйте, ebersen, Вы писали:
E>Здравствуйте, Flex2, Вы писали:
F>>Здравствуйте, ebersen, Вы писали:
E>>>Здравствуйте, Flex2, Вы писали:
F>>>>Здравствуйте, ebersen, Вы писали:
E>>>>>Привет Всем!
E>>>>>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
F>>>>1. есть хорошая команда ARP ДОС сесии. Типа ARP>>filename.txt, а потом разбираешь файл F>>>>2. через WinSock(не помню как, гже-то исходники валялись) F>>>>3 пошли сам себе сообщение и заснифь пакет IP
E>>>Но эти способы, на сколько я понимаю, тоже не будут работать при выключении сети...
F>>Будут. F>>Есть еще одно. F>>Придется помучатся, но можно открыть дрова, эдементраной командой CreateFile и дергать сервис API DDK, он 100% имеет такую-то апи аппаратура-ядро-ситема(это тебе в DDK или ставь Numega — для разработчиков драйверов, VS от 6.0 интегрируется.) F>>Однакодумаю что есть более простой способ.
F>>И что значит выключенная сеть ? F>>Если нет драйва под карту сетки то нет. если все "ок" и сам себя видишь то все будет работать.
E>Выключенная сеть означает, что для Local Area Connection просто юзер сделал Disable. От этого же карта не перестала существовать со своим MAC'ом, но трафика ужо никакого нету.
Вопрос не в том к чему ты стучишься а в том как.
В данном случе парень хочет поиметь мак-адрес катры. ну и попролбуй, безVXD, WDM, SYS достучаться до адреса(хрен его знает какой) по базовому адрему сетевухи, как минимум тебе надо иметь привилегии уровня ядра, а имеено 0-1, и хто тебя пустит ? Уверен, что есть API, что облегчает, и что радует API форточек, либо это значение возвращается в качестве результат в структуру. Надеюсь по крайне мере.
Не знаю задачи, если быстро и надежно я бы выгрузку сгрузку в файл и потом его распарсил. Хоть как-то, но работало, а правильно потом-потом.
Здравствуйте, ebersen, Вы писали:
E>Привет Всем!
E>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
Значит так:
Работает на ОС : Windows NT/2000/XP
DWORD SendARP(
IPAddr DestIP, // тут тот куда посылаешь запрос, IP твоей машины
IPAddr SrcIP, // тут твой адрес, может быть 0 или 127.0.0.1
PULONG pMacAddr, // мак двоичный
PULONG PhyAddrLen // его длинна
/* Сконверитируем двоичный MAC в понятную форму */
for (i = 0, j = 0; i < ulLen — 1; ++i)
{
j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
}
sprintf (szMac + j, "%02X", pbHexMac[i]);
_RetChar(szMac); // тут вернули МАС в вызывающую функцию.
free(szMac);
free(szIPAddress);
}
P.S. Этот код заточен под библиотеку вызова из VFP, тебе надо szIPAddress и szIPAddressS указывать или явно или через твой механихм передачи параметров, так же и значения возвращать не _RetChar(szMac), а по твоему. Надеюсь разберешься.
В вызывающей программе это выглядит у меня так =GetMAC(192.168.0.148,127.0.0.1) взвращает адрес интерфейса связи IP c МАС : 00:80:48:14:46:3F
Используя это можешь узнать МАС любой машины во внутренней сети.
Ошибки вызова можно посмотреть, вызвав FormatMessage ()
Здравствуйте, ebersen, Вы писали:
E>Привет Всем!
E>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...
можно воспользоваться тем фактом, что Uuid, генерируемые системой зависят от MAC адреса, точнее говоря последние 6 байт UUID и есть MAC адрес
UUID NewUuid;
UuidCreate(&NewUuid); //или UuidCreateSequential(&NewUuid) в случае W2K/XP
E>Привет Всем!
E>Не подскажет ли кто-нить, как получить MAC адрес сетевухи (сетевух) стоящих в системе (XP). Пробовал всякие GetAdaptersInfo(), но это всё не то — если тривиально выключить сеть, то указанная функция ничего не обнаружит...