На самом деле рекомендованый ранее способ (без обид) — один из самых глупых. Его использование проблематично, т.к. нельзя сопоставить имя сетевухт и ее MAC. Более того, нетбиос не всегда установлен.
Есть много вариантов.
1. SNMP (inetmib1.dll) — работает на всех системах win32 с TCP/IP. На самом деле, глубоко внутри то же, что и (2). Его использую я.
2. Inet Helper Api — работает начиная с win98.
3. Raw NDIS call — наиболее правильный способ, однако для 9х систем придется писать драйвер. Более подробно — на pcausa. Зато позволяет определять все, что угодно.
4. IPX Socket — объяснять, надеюсь, не надо.
И еще много-много других способов. Начиная от WMI до мучений с dhcp.vxd (лично расковырял формат данных благодаря ipconfig из 95-х. Формат благополучно утерян ).
Вобщем, успехов. Если надо что подробнее — постараюсь помочь, но не гарантирую. На самом деле я даже этих сведений не имел вначале, так что вперед — к поискам на форумах.
D>Подскажите как программно узнать МАС адресс сетевухи
Здравствуйте Andrew S, Вы писали:
AS>На самом деле рекомендованый ранее способ (без обид) — один из самых глупых.
Нельзя ли поподробнее почему же он глуп?
Понятно, что у него свои недостатки, но и у других методо, про которые ты пишешь ниже, они тоже есть, насколько я поинмаю.
AS>Его использование проблематично, т.к. нельзя сопоставить имя сетевухт и ее MAC.
Согласен. но имя не всегда и требуется. Бывает нужен просто ЛЮБОЙ MAC адрес компьютера, например при привязка программы к конкретному компьютеру для лицензирования.
AS>Более того, нетбиос не всегда установлен.
Наверное бывает, но ИМХО это уже экзотика, по крайней мере на серверах.
AS>1. SNMP (inetmib1.dll) — работает на всех системах win32 с TCP/IP. На самом деле, глубоко внутри то же, что и (2). AS>2. Inet Helper Api — работает начиная с win98.
Отличный способ. Видимо речь идет о GetAdaptersInfo()? Очень удобно и кода меньше чем с Нетбиосом, но, насколько я понимаю, на серверах это работает только с Win2000, т.е. под NT этого нет.
Другими словами, если, например, надо определять любой МАК аддрес на сервере, то получается, что нетбиос все же наиболее простой способ. Поправь пож-та если я не прав.
Ну хотя бы потому, что этот способ рекомендован майкрософт, однако сами они его нигде не используют. Везде — от netstat до ipconfig используется SNMP. Вот так... А если несколько сетевух? Что, предлагаешь определять все LANA и после этого вызывать нетбиос? Кода еще больше, чем в SNMP ,и проблем в разы больше. А функциональность — никакая.
У всех способов есть недостатки. Пожалуй, только RAW NDIS позволяет узнать все, что надо. Но под 9х — проблематично, драйвер надо писать.
Если требуется привязка к конкретному компютеру — то можно брать серийник, например, биоса, млм еще как. Заменил сетевуху — и что, заново лицензировать. А если ее вообще нет, а есть только PPP адаптер, у которого мак адрес одинаков на всех компутерах? Тогда что делать? Между прочим, в этом случае работает только метод с SNMP и IP Helper. Так что выводы ...
O>Нельзя ли поподробнее почему же он глуп? O>Понятно, что у него свои недостатки, но и у других методо, про которые ты пишешь ниже, они тоже есть, насколько я поинмаю.
AS>>Его использование проблематично, т.к. нельзя сопоставить имя сетевухт и ее MAC.
O>Согласен. но имя не всегда и требуется. Бывает нужен просто ЛЮБОЙ MAC адрес компьютера, например при привязка программы к конкретному компьютеру для лицензирования.
AS>>Более того, нетбиос не всегда установлен.
O>Наверное бывает, но ИМХО это уже экзотика, по крайней мере на серверах.
AS>>1. SNMP (inetmib1.dll) — работает на всех системах win32 с TCP/IP. На самом деле, глубоко внутри то же, что и (2). AS>>2. Inet Helper Api — работает начиная с win98.
O>Отличный способ. Видимо речь идет о GetAdaptersInfo()? Очень удобно и кода меньше чем с Нетбиосом, но, насколько я понимаю, на серверах это работает только с Win2000, т.е. под NT этого нет.
O>Другими словами, если, например, надо определять любой МАК аддрес на сервере, то получается, что нетбиос все же наиболее простой способ. Поправь пож-та если я не прав.
Здравствуйте Andrew S, Вы писали:
AS>Если требуется привязка к конкретному компютеру — то можно брать серийник, например, биоса, млм еще как.
Параметров привязки обязательно д.б. несколько, причем клиенту необязательно знать каких.
AS>Заменил сетевуху — и что, заново лицензировать.
При промышленной эксплуатации сетевуху никто просто так не меняет. Если есть причины поменять, то можно сгенерить новую лицензию (бесплатно).
AS>А если ее вообще нет, а есть только PPP адаптер, у которого мак адрес одинаков на всех компутерах? Тогда что делать? Между прочим, в этом случае работает только метод с SNMP и IP Helper. Так что выводы ...
Ну у меня речь шла о привязке серверного приложения, а сервер подключенный только по РРР, это странно.
Но в принципе, я согласен про РРР. И вобще не считаю Нетбиос универсальным и идеальным средством. Про его недостатки ты еще раньше все правильно написал. Мое замечание было о том, что идеального средства нет, а среди неидеальных у Нетбиос есть свои достоинства.
Вообще то, в первоначальном сабже ничего не сказано про то, где это будет использоваться. Так что...
Единственный, по моему мнению, правильный метод — RAW вызов NDIS. Но он слишком сложен под 9x. Зато работает на любых сетевых протоколах.
А еще есть метод SQUID, кажется... Но тоже для нескольких сетевух не подходит.
Вобщем, я рекомендую использовать SNMP — тем более, что через него же можно получить много другой интересной информации.
(А первое, что я в свое время нашел, и был нетбиос. На самом деле — он ужасен).
В общем, всем успехов.
AS>>Если требуется привязка к конкретному компютеру — то можно брать серийник, например, биоса, млм еще как.
O>Параметров привязки обязательно д.б. несколько, причем клиенту необязательно знать каких.
AS>>Заменил сетевуху — и что, заново лицензировать.
O>При промышленной эксплуатации сетевуху никто просто так не меняет. Если есть причины поменять, то можно сгенерить новую лицензию (бесплатно).
AS>>А если ее вообще нет, а есть только PPP адаптер, у которого мак адрес одинаков на всех компутерах? Тогда что делать? Между прочим, в этом случае работает только метод с SNMP и IP Helper. Так что выводы ...
O>Ну у меня речь шла о привязке серверного приложения, а сервер подключенный только по РРР, это странно.
O>Но в принципе, я согласен про РРР. И вобще не считаю Нетбиос универсальным и идеальным средством. Про его недостатки ты еще раньше все правильно написал. Мое замечание было о том, что идеального средства нет, а среди неидеальных у Нетбиос есть свои достоинства.
Возможно я заблуждаюсь, но писать
Ncb.ncb_lana_num = 0;
неверно. LAN adapter number может быть и не равен нулю.
Вот у меня сработала строка
Ncb.ncb_lana_num = 1;
Хотя правельнее дольжно писать что то вроде следующего.