Версия для печати темы (https://pro1c.org.ua/index.php?s=19eb4d63a50df3ffaf25420c1f5aea33&showtopic=48255)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Мак адресс клиента

Автор: l2d808 09.10.18, 15:27

Добрый день уважаемое сообщество.
1с8.2 самописная.
Как узнать MAC адрес компьютера, с которого заходил пользователь? А также записать этот МАК в справочник.

Автор: DrLivsi 09.10.18, 15:39

l2d808 @ Сегодня, 15:27 * ,
http://pro1c.org.ua/redirect.php?https://www.forum.mista.ru/topic.php?id=327244

Автор: Vladal 11.10.18, 9:16

Цитата
Как узнать MAC адрес компьютера, с которого заходил пользователь?


MAC-адрес можно узнать командой getmac из командной строки Windows:
Так же не забывайте, что в системе могут быть установлены несколько сетевых карт и протоколов, а вызов свойств сетевой карты клиента надо делать локально, если подключаетесь к серверу удаленно.

|C:\Program Files\PostgreSQL\9.4.2-1.1C\bin>getmac
|
|Физический адрес  Имя транспорта
|================= ==========================================================
|10-7B-44-16-C7-79 \Device\Tcpip_{4B9F7E56-610E-460F-90A7-AE2D91F2A575}
|00-FF-16-0D-B3-13 \Device\Tcpip_{160DB313-5615-466C-8497-D972C58FA97B}
|00-FF-32-A9-18-E2 \Device\Tcpip_{32A918E2-ECF9-4C8C-8DD8-417D7B1794B9}
|00-FF-86-45-FA-82 \Device\Tcpip_{8645FA82-14B3-412B-ACD9-60885857F52A}
|
|C:\Program Files\PostgreSQL\9.4.2-1.1C\bin>


Пишем запрос к объекту Win32_NetworkAdapter:

Процедура ОпределитьMAC_адресНажатие(Элемент)
    
    ServicesSet = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера() + "\root\cimv2");
    Items = ServicesSet.ExecQuery("Select * From Win32_NetworkAdapter");
    Для каждого Item Из Items Цикл
        MACAddress = Item.MACAddress;
        Если Не ЗначениеЗаполнено(MACAddress) Тогда // -- если убрать это условие, можно получить еще больше интересной информации
            Продолжить;
        КонецЕсли;
        AdapterType = Item.AdapterType;
        Caption  = Item.Caption; //-- переименуйте эту переменную, потому как она меняет заголовок окна обработки, это английский синоним свойства Форма.Заголовок
        Manufacturer = Item.Manufacturer;
        Status  = Item.Status;
        Name = Item.Name;
        PermanentAddress = Item.PermanentAddress;
        Line = "AdapterType: " + AdapterType
            + символы.ПС + "Caption: " + Caption
            + символы.ПС + "Manufacturer: " + Manufacturer
            + символы.ПС + "MACAddress: " + MACAddress
            + символы.ПС + "Name: " + Name
            + символы.ПС + "Status: " + Status;
        Сообщить(Line);
    КонецЦикла;
    
КонецПроцедуры


И вот вывод моей процедурки на моем сервере:

Цитата
AdapterType: Ethernet 802.3
Caption: [00000009] Realtek PCIe GBE Family Controller
Manufacturer: Realtek
MACAddress: 10:7B:44:16:C7:79
Name: Realtek PCIe GBE Family Controller #2
Status:
AdapterType: Ethernet 802.3
Caption: [00000012] TAP-Win32 Adapter V9
Manufacturer: TAP-Win32 Provider V9
MACAddress: 00:FF:16:0D:B3:13
Name: TAP-Win32 Adapter V9 #3
Status:
AdapterType: Ethernet 802.3
Caption: [00000013] TAP-Win32 Adapter V9
Manufacturer: TAP-Win32 Provider V9
MACAddress: 00:FF:32:A9:18:E2
Name: TAP-Win32 Adapter V9
Status:
AdapterType: Ethernet 802.3
Caption: [00000015] TAP-Win32 Adapter V9
Manufacturer: TAP-Win32 Provider V9
MACAddress: 00:FF:86:45:FA:82
Name: TAP-Win32 Adapter V9 #2
Status:


Развивая тему, вытащил IP-адреса для каждой сетевухи:

Цитата
MAC адрес: 10:7B:44:16:C7:79
.IP адрес: 192.168.0.7
.IP адрес: fe80::c52f:4618:2c8b:851e
MAC адрес: 00:FF:16:0D:B3:13
.IP адрес: 10.12.12.1
MAC адрес: 00:FF:32:A9:18:E2
.IP адрес: 10.10.10.1
MAC адрес: 00:FF:86:45:FA:82
.IP адрес: 10.11.11.1

Процедура ОпределитьIPНажатие(Элемент)
    
    // Определение MAC и IP адресов
    
    MACAddress = "";
    ServicesSet = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера() + "\root\cimv2");
    Items = ServicesSet.ExecQuery("Select * From Win32_NetworkAdapter");
    Для каждого Item Из Items Цикл
        MACAddress = Item.MACAddress;
        
        Если MACAddress <> Null Тогда
            Сообщить("MAC адрес: " + MACAddress);
            
            Items = ServicesSet.ExecQuery("Select * From Win32_NetworkAdapterConfiguration");
            Для каждого Item Из Items Цикл
                Если Item.MACAddress = MACAddress Тогда
                    Если Item.MACAddress <> Null Тогда
                        Для каждого IPAddress Из Item.IPAddress Цикл
                            Сообщить(".IP адрес: " + IPAddress);
                        КонецЦикла;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Автор: Vladal 16.10.18, 9:48

Цитата(l2d808 @ 09.10.18, 16:27) *
Как узнать MAC адрес компьютера, с которого заходил пользователь?

У Вас получилось получить адреса?

Интересно, зря ли я трудился? (себе я ответ знаю - я себе алгоритм положил в копилку)

Имеет ли смыл делать вторую часть вопроса?
Цитата(l2d808 @ 09.10.18, 16:27) *
А также записать этот МАК в справочник.


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua