Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение IP_mask_gateway 
V
    Опции темы
fredEburg
Дата 29.4.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Привет всем!

Столкнулся с такой проблемой
Нужно изменить в программе настройки tcp/ip соединения.....т.е. пользователь в определенные поля заносит сетевые реквизиты от провайдера - и они собственно говоря при нажатии на кнопку сменяются.....вот...
Материала в гугле не много нашел - вот ссылки

http://www.delphisources.ru/forum/showthread.php?p=13854
http://programmersforum.ru/archive/index.php/t-877.html
http://www.online-admin.com/ntset.html (компонент NTFirewall)
http://msdn.microsoft.com/library/default....tconnection.asp

если пробовать менять с помощью netsh - то нужно знать имя самого подключения(а оно может отличаться от дефолтного "Подключение по локальной сети")
эту информацию конечно можно получить из вывода команд - либо ipconfig - либо - netsh interface show interface
но возникает вопрос - как парсить, извлечь из этого вывода наименование подключения?
NTFirewall - это делает - но он коммерческий компонент...

Посоветуйте что-нибудь smile  - 

P/S/ - если исходники на других языках - рассмотрю любые варианты)

Это сообщение отредактировал(а) fredEburg - 29.4.2008, 15:53
PM MAIL   Вверх
Snowy
Дата 29.4.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



PM MAIL   Вверх
fredEburg
Дата 29.4.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Snowy - пример программы описывает только получение списка адаптеров, а для netsh необходимо именно имя самого подключения ("Подключение по локальной сети")
или если знаете как с помощью названия сетевого адаптера сменить ip, dns, маску, шлюз -буду только радsmile

Это сообщение отредактировал(а) fredEburg - 29.4.2008, 18:56
PM MAIL   Вверх
fredEburg
Дата 30.4.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Решил проблему поиска имен подключений
но теперь возникла другая проблема - то ли netsh не понимает когда подставляю полученное имя соединения - да же когда перекодировал в Dos....
кто-нибудь знает как посмотреть отображение в командной строке....а то она быстро мелькает, а текст в ней - какую команду она там выполняет увидеть невозможно))
вот код, который список подключений выводит
Код

try
 ShellApp := CoShell.Create;
 ControlPanel := ShellApp.NameSpace(ssfCONTROLS);
   Fol := ControlPanel;//Shell .NameSpace(ssfCONTROLS);
   for i := 0 to Fol.Items.Count - 1 do
     begin
       Cpl := Fol.Items.Item(i);
       if Cpl.Name = 'Ñåòåâûå ïîäêëþ÷åíèÿ' then
         begin
        //   Memo1.Lines.Add(Cpl.Name);
           for v := 0 to Cpl.Verbs.Count - 1 do
         //    Memo1.Lines.Add(Cpl.Verbs.Item(v).Name);
           Net := Cpl.GetFolder as Folder;
     //      Memo1.Lines.Add('Connections:');
           for v := 0 to Net.Items.Count - 1 do
             begin
               Memo1.Lines.Add(Net.Items.Item(v).Name);
               Combobox1.Items.Add(Net.Items.Item(v).Name)
       {        if Net.Items.Item(v).Name = 'Internet' then
                 begin
                   Con := Net.Items.Item(v);
                   for j := 0 to Con.Verbs.Count - 1 do
                     begin
                       Memo1.Lines.Add(Con.Verbs.Item(j).Name);
                       if Con.Verbs.Item(j).Name = 'Disa&ble' then
                         Con.Verbs.Item(j).DoIt;
                     end;
                 end;  }
             end;
    //       Memo1.Lines.Add('======================');
         end;
     end;
 finally
   Fol := nil;
   Cpl := nil;
   Net := nil;
   Con := nil;
 end;
end;

PM MAIL   Вверх
fredEburg
Дата 2.5.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



вообщем вроде написал, но работает через раз...может кто-нибудь объяснить в чем проблема тут??
работает, если давать еще время на выполнение для каждой смены, но опять же как-то через раз:(

Код

 ip:= Trim(AlignEdit1.Text)+'.'+Trim(AlignEdit2.Text)+'.'+Trim(AlignEdit3.Text) +'.'+Trim(AlignEdit4.Text) ;
   gateway:= Trim(AlignEdit5.Text)+'.'+Trim(AlignEdit6.Text)+'.'+Trim(AlignEdit7.Text) +'.'+Trim(AlignEdit8.Text) ;
   mask:= Trim(AlignEdit9.Text)+'.'+Trim(AlignEdit10.Text)+'.'+Trim(AlignEdit11.Text) +'.'+Trim(AlignEdit12.Text) ;
   dns1:= Trim(AlignEdit13.Text)+'.'+Trim(AlignEdit14.Text)+'.'+Trim(AlignEdit15.Text) +'.'+Trim(AlignEdit16.Text) ;
   dns2:= Trim(AlignEdit17.Text)+'.'+Trim(AlignEdit18.Text)+'.'+Trim(AlignEdit19.Text) +'.'+Trim(AlignEdit20.Text) ;     
    temp:=ASCIIToStr(DeleteLineBreaks(StrToAscii(ConnName)));
   strip:= ' interface ip set address name="'+temp;
 //  strip:= MyWriteln(strip);

 strip:=strip+ '" static ' + ip+' '+mask+' '+gateway+' 1';
cleardns:= 'interface ip set dns name="' + temp+ '" static addr=none register=none';
strdns:= 'interface ip set dns name="' + temp+ '" static addr=' + dns1+ ' primary';
strdns2:= 'interface ip add dns name="' + temp+ '" addr=' + dns2+' index=2';

ShellExecute(Handle, 'open','netsh',pchar(strip), nil, SW_HIDE);
ShellExecute(Handle, 'open','netsh',PChar(cleardns), nil, SW_HIDE);
sleep(7500);
ShellExecute(Handle, 'open','netsh',PChar(strdns), nil, SW_HIDE);
sleep(7500);
ShellExecute(Handle, 'open','netsh',PChar(strdns2), nil, SW_HIDE);
sleep(5500);
ShellExecute(Handle, 'open','ipconfig',' /flushdns', nil, SW_HIDE);


народ) правда подсказывает все дулать через WMI
http://www.delphi3000.com/articles/article_4392.asp?SK=
http://msdn.microsoft.com/en-us/library/aa394595.aspx

опять если делать через wmi - то как там реализовать выбор сетевого подключения или давже самого адаптера, для которого менять сетевые настройки??
есть идеи???

PM MAIL   Вверх
Seeker
Дата 3.5.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.11.2006

Репутация: 1
Всего: 1



Решаю сейчас аналогичную задачу что и вы. Только настроичную часть почти закончил уже.
Через wmi я для себя писал такую функцию вытаскивания инфы по всем адаптерам:
Код

function GetAdapterInfo(ADeviceID: variant): TNetworkAdapterSet;
var
  Service:            ISWbemServices;
  EnumNetAdapter:     IEnumVARIANT;
  oNetAdapter:        olevariant;
  EnumNetAdapterConf: IEnumVARIANT;
  oNetAdapterConf:    olevariant;
  lNumElements:       ULong;
  cnt:                integer;
begin
  cnt     := 0;
  Service := CoSWbemLocator.Create.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);

  // Если указан DeviceID адаптера то инфу выдаем только для него
  if VarIsStr(ADeviceID) then
  begin
    EnumNetAdapter := Service
      .ExecQuery('select * ' +
      'from Win32_NetworkAdapter ' +
      'where DeviceID="' + ADeviceID + '"',
      'WQL', wbemFlagBidirectional, nil)._NewEnum as IEnumVariant;
  end
  else
  begin
    EnumNetAdapter := Service
      .ExecQuery('select * ' +
      'from Win32_NetworkAdapter ' +
      'where NetConnectionID is not null ' +
      'and NetConnectionStatus=2',
      'WQL', wbemFlagBidirectional, nil)._NewEnum as IEnumVariant;
  end;
  while (Succeeded(EnumNetAdapter.Next(1, oNetAdapter, lNumElements)))
    and (lNumElements > 0) do
  begin
    SetLength(Result, succ(cnt));
    Result[cnt].DeviceID            := oNetAdapter.DeviceID;
    Result[cnt].AdapterPath         := oNetAdapter.Path_.Path;
    Result[cnt].Name                := oNetAdapter.Name;
    Result[cnt].AdapterType         := oNetAdapter.AdapterType;
    Result[cnt].NetConnectionID     := oNetAdapter.NetConnectionID;
    Result[cnt].NetConnectionStatus := oNetAdapter.NetConnectionStatus;
    Result[cnt].MACAddress          := oNetAdapter.MACAddress;
    Result[cnt].Manufacturer        := oNetAdapter.Manufacturer;

    EnumNetAdapterConf := Service
      .ExecQuery('select * ' +
      'from Win32_NetworkAdapterConfiguration ' +
      'where Index="' + oNetAdapter.DeviceID + '"',
      'WQL', wbemFlagBidirectional, nil)._NewEnum as IEnumVariant;
    if (Succeeded(EnumNetAdapterConf.Next(1, oNetAdapterConf, lNumElements)))
      and (lNumElements > 0) then
    begin
      // Если DeviceID указан то информацию никак не отфильтровываем
      if (not VarIsStr(ADeviceID)) and (not VarToBoolean(oNetAdapterConf.IPEnabled)) then
      begin
        SetLength(Result, cnt);
        Dec(cnt);
      end
      else
      begin
        Result[cnt].AdapterConfigurationPath := oNetAdapterConf.Path_.Path;
        Result[cnt].IPAddress                := oNetAdapterConf.IPAddress;
        Result[cnt].IPSubnet                 := oNetAdapterConf.IPSubnet;
        Result[cnt].DefaultIPGateway         := oNetAdapterConf.DefaultIPGateway;
        Result[cnt].GatewayCostMetric        := oNetAdapterConf.GatewayCostMetric;
        Result[cnt].IPConnectionMetric       := oNetAdapterConf.IPConnectionMetric;
        Result[cnt].DNSServerSearchOrder     := oNetAdapterConf.DNSServerSearchOrder;
        Result[cnt].DHCPEnabled              := oNetAdapterConf.DHCPEnabled;
        Result[cnt].DHCPServer               := oNetAdapterConf.DHCPServer;
        Result[cnt].DHCPLeaseExpires         := oNetAdapterConf.DHCPLeaseExpires;
        Result[cnt].DHCPLeaseObtained        := oNetAdapterConf.DHCPLeaseObtained;
      end;
    end;
    Inc(cnt);
  end;
end;

возвращает:
Код

type

  TNetworkAdapter = record
    DeviceID:                 variant;              // Номер устройства
    AdapterPath:              variant;              // Путь экземпляра адаптера
    AdapterConfigurationPath: variant;              // Путь экземпляра конфигурации адаптера
    Name:                     variant;              // Сетевой адаптер
    AdapterType:              variant;              // Тип адаптера
    NetConnectionID:          variant;              // Соединение
    NetConnectionStatus:      variant;              // Состояние подключения:
    //  0 - Отключено
    //  1 - Подключение
    //  2 - Подключено
    //  3 - Отключение
    //  4 - Устройство отсутствует
    //  5 - Аппаратное отключение
    //  6 - Аппаратный сбой
    //  7 - Носитель отключен
    //  8 - Проверка подлинности
    //  9 - Подлинность удостоверена
    //  10 - Подлинность не подтверждена
    MACAddress:               variant;              // MAC-адрес
    Manufacturer:             variant;              // Производитель сетевого адаптера
    IPAddress:                variant;              // IP-адрес
    IPSubnet:                 variant;              // Маска подсети
    DefaultIPGateway:         variant;              // Шлюз IP по умолчанию
    GatewayCostMetric:        variant;              // Метрика
    IPConnectionMetric:       variant;              // Метрика по умолчанию
    DNSServerSearchOrder:     variant;              // Адреса DNS-серверов
    DHCPEnabled:              variant;              // DHCP вкл.
    DHCPServer:               variant;              // DHCP-сервер
    DHCPLeaseExpires:         variant;              // DHCP-аренда истекает
    DHCPLeaseObtained:        variant;              // DHCP-аренда получена
  end;

  TNetworkAdapterSet = array of TNetworkAdapter;


NetConnectionID грубо говоря и есть "Подключение по локальной сети..."
NetConnectionStatus статус подключения

з.ы. В моем примере к wmi подключаюсь через локатор, для этого нужно импортнуть Microsoft WMI Scripting V1.2 Library
можно и через моникер как в одной из приведенных вами ссылок, тогда вообще ничего не нужно дополнительного
з.з.ы. Инфа выдается только по активным сетевым подключениям. Другие меня не интересовали. Иначе нужно убрать строчку "      'and NetConnectionStatus=2',"

Это сообщение отредактировал(а) Seeker - 3.5.2008, 10:37
PM MAIL   Вверх
fredEburg
Дата 4.5.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Seeker - мегасенкс что откликнулся......а то в wmi немного устал искать инфу(нашел хороший пример на C#, но когда основа уже на делфях написана не хочется усложнять все)))..
в твоем коде только не разобрался как саму функцию вызывать? ADeviceID откуда берется?
 smile 

PM MAIL   Вверх
Seeker
Дата 4.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.11.2006

Репутация: 1
Всего: 1



Null передаешь в нее чтобы вернуть инфу о всех адаптерах.
Примерно так:
Код

Adapters := GetAdapterInfo(Null);
for i := 0 to High(Adapters) do
begin
  s := Format('DeviceID=%s', [VarToStr(Adapters[i].DeviceID)];
end;

В общем заполняешь данными тот элемент управления через который будет инфу показывать.

з.ы. вот полный код как у меня есть занесения этой инфы в таблички. Понятно что один в один тебе он не понадобится. Да и избыточный малось, но лень переделывать smile
Код

procedure TfrmIPSetUp.LoadAdapterDataInfo(ANeedRequery: boolean = False);
var
  i, j: integer;
  s:    string;
begin
  if ANeedRequery or (not Assigned(Adapters)) then
    Adapters := GetAdapterInfo(Null);

  if memdsetAdapterInfo.Active then
    memdsetAdapterInfo.Close;
  memdsetAdapterInfo.Open;
  if memdsetAdapterIP.Active then
    memdsetAdapterIP.Close;
  memdsetAdapterIP.Open;
  if memdsetIPGateway.Active then
    memdsetIPGateway.Close;
  memdsetIPGateway.Open;
  if memdsetDNSServer.Active then
    memdsetDNSServer.Close;
  memdsetDNSServer.Open;

  for i := 0 to High(Adapters) do
  begin
    s := GetNetConnectionStatusTextById(vartoint(Adapters[i].NetConnectionStatus, -1));

    // Заполнение таблицы с информацие по доступным соединениям
    with tvConnection.DataController do
    begin
      BeginUpdate;
      try
        RecordCount                           := Succ(i);
        Values[i, tvConnectionId.Index]       := i;
        Values[i, tvConnectionDeviceID.Index] := Adapters[i].DeviceID;
        Values[i, tvConnectionNetConnectionID.Index] := Adapters[i].NetConnectionID;
        Values[i, tvConnectionNetConnectionStatus.Index] := s;
        Values[i, tvConnectionName.Index]     := Adapters[i].Name;
        Values[i, tvConnectionAdapterConfigurationPath.Index] := Adapters[i].AdapterConfigurationPath;
      finally
        EndUpdate;
      end;
    end;

    // Заполняем датасеты подробной информацией
    with memdsetAdapterInfo do
    begin
      DisableControls;
      try
        {$IFDEF RUN_DEVELOP}
        WriteLog(Format('DeviceID=%s; Name="%s"; NetConnectionID="%s"',
          [VarToStr(Adapters[i].DeviceID), VarToStr(Adapters[i].Name), VarToStr(Adapters[i].NetConnectionID)]));
        {$ENDIF}
        AppendRecord([Null, Adapters[i].DeviceID, 'DeviceID', 'Номер устройства',
          Adapters[i].DeviceID, False, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'AdapterPath', 'Путь экземпляра адаптера',
          Adapters[i].AdapterPath, False, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'AdapterConfigurationPath',
          'Путь экземпляра конфигурации адаптера', Adapters[i].AdapterConfigurationPath, False,
          Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'Name', 'Сетевой адаптер', Adapters[i].Name,
          True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'AdapterType', 'Тип адаптера',
          Adapters[i].AdapterType, True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'Manufacturer', 'Производитель сетевого адаптера',
          Adapters[i].Manufacturer, True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'NetConnectionID', 'Соединение',
          Adapters[i].NetConnectionID, False, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'NetConnectionStatus', 'Состояние подключения',
          s, True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'MACAddress', 'MAC-адрес', Adapters[i].MACAddress,
          True, Adapters[i].NetConnectionID]);

        if not VarIsArray(Adapters[i].IPAddress) then
        begin
          AppendRecord([Null, Adapters[i].DeviceID, 'IPAddress',
            'IP-адрес', Null, True, Adapters[i].NetConnectionID]);
          AppendRecord([Null, Adapters[i].DeviceID, 'IPSubnet',
            'IP-подсеть', Null, True, Adapters[i].NetConnectionID]);
        end
        else
          for j := VarArrayLowBound(Adapters[i].IPAddress, 1) to VarArrayHighBound(Adapters[i].IPAddress, 1) do
          begin
            AppendRecord([Null, Adapters[i].DeviceID, 'IPAddress' + IntToStr(Succ(j)),
              'IP-адрес' + IntToStr(Succ(j)), Adapters[i].IPAddress[j], True, Adapters[i].NetConnectionID]);
            AppendRecord([Null, Adapters[i].DeviceID, 'IPSubnet' + IntToStr(Succ(j)),
              'IP-подсеть' + IntToStr(Succ(j)), Adapters[i].IPSubnet[j], True, Adapters[i].NetConnectionID]);
            memdsetAdapterIP.AppendRecord([Null, Adapters[i].DeviceID, Adapters[i].IPAddress[j],
              Adapters[i].IPSubnet[j], (j = 0)]);
          end;

        if not VarIsArray(Adapters[i].DefaultIPGateway) then
        begin
          AppendRecord([Null, Adapters[i].DeviceID, 'DefaultIPGateway', 'Шлюз IP по умолчанию',
            Null, True, Adapters[i].NetConnectionID]);
          AppendRecord([Null, Adapters[i].DeviceID, 'GatewayCostMetric', 'Метрика',
            Null, True, Adapters[i].NetConnectionID]);
        end
        else
          for j := VarArrayLowBound(Adapters[i].DefaultIPGateway, 1)
            to VarArrayHighBound(Adapters[i].DefaultIPGateway, 1) do
          begin
            AppendRecord([Null, Adapters[i].DeviceID, 'DefaultIPGateway', 'Шлюз IP по умолчанию',
              Adapters[i].DefaultIPGateway[j], True, Adapters[i].NetConnectionID]);
            AppendRecord([Null, Adapters[i].DeviceID, 'GatewayCostMetric', 'Метрика',
              Adapters[i].GatewayCostMetric[j], True, Adapters[i].NetConnectionID]);
            memdsetIPGateway.AppendRecord([Null, Adapters[i].DeviceID, Adapters[i].DefaultIPGateway[j],
              Adapters[i].GatewayCostMetric[j], (j = 0)]);
          end;

        if not VarIsArray(Adapters[i].DNSServerSearchOrder) then
        begin
          AppendRecord([Null, Adapters[i].DeviceID, 'DNSServerSearchOrder', 'DNS-сервер',
            Null, True, Adapters[i].NetConnectionID]);
        end
        else
          for j := VarArrayLowBound(Adapters[i].DNSServerSearchOrder, 1)
            to VarArrayHighBound(Adapters[i].DNSServerSearchOrder, 1) do
          begin
            AppendRecord([Null, Adapters[i].DeviceID, 'DNSServerSearchOrder', 'DNS-сервер',
              Adapters[i].DNSServerSearchOrder[j], True, Adapters[i].NetConnectionID]);
            memdsetDNSServer.AppendRecord([Null, Adapters[i].DeviceID,
              Adapters[i].DNSServerSearchOrder[j], (j = 0)]);
          end;

        AppendRecord([Null, Adapters[i].DeviceID, 'DHCPEnabled', 'DHCP вкл.', Adapters[i].DHCPEnabled,
          True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'DHCPServer', 'DHCP-сервер', Adapters[i].DHCPServer,
          True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'DHCPLeaseExpires', 'DHCP-аренда истекает',
          Adapters[i].DHCPLeaseExpires, True, Adapters[i].NetConnectionID]);

        AppendRecord([Null, Adapters[i].DeviceID, 'DHCPLeaseObtained', 'DHCP-аренда получена',
          Adapters[i].DHCPLeaseObtained, True, Adapters[i].NetConnectionID]);
      finally
        EnableControls;
      end;
    end;
  end;
end;


з.з.ы. 
Сразу кину подправленные варианты функций по настройки всякого разного. Функции я брал на этом форуме изначально, да и по одной из твоих ссылок они есть...

Настройка адресов и шлюза. Первый параметр - на каком адаптере настраивать. Остальные могут быть либо строки либо вариантные массивы чтобы установить несколько адресов.
Код

function SetIpConfig(const ADeviceID: variant; const AIpAddress: variant;
  const AGateWay: variant; const ASubnetMask: variant): integer;
var
  Retvar:                   integer;
  oBindObj:                 IDispatch;
  oNetAdapters, oNetAdapter,
  oIpAddress, oGateWay,
  oWMIService, oSubnetMask: olevariant;
  i, iValue:                longword;
  oEnum:                    IEnumvariant;
  oCtx:                     IBindCtx;
  oMk:                      IMoniker;
  sFileObj:                 WideString;
begin
  Retvar   := -1;
  Result   := Retvar;
  sFileObj := 'winmgmts:\\.\root\cimv2';

  if not VarIsStr(ADeviceID) then
    Exit;

  // Create OLE [IN} Parameters
  if VarIsArray(AIpAddress) then
    oIpAddress := AIpAddress
  else
  if VarIsStr(AIpAddress) then
  begin
    oIpAddress    := VarArrayCreate([0, 0], varOleStr);
    oIpAddress[0] := AIpAddress;
  end;

  if VarIsArray(AGateWay) then
    oGateWay := AGateWay
  else
  if VarIsStr(AGateWay) then
  begin
    oGateWay    := VarArrayCreate([0, 0], varOleStr);
    oGateWay[0] := AGateWay;
  end;

  if VarIsArray(ASubnetMask) then
    oSubnetMask := ASubnetMask
  else
  if VarIsNull(ASubnetMask) then
  begin
    if VarIsArray(oIpAddress) then
    begin
      oSubnetMask := VarArrayCreate([VarArrayLowBound(oIpAddress, 1), VarArrayHighBound(oIpAddress, 1)],
        varOleStr);
      for i := VarArrayLowBound(oIpAddress, 1) to VarArrayHighBound(oIpAddress, 1) do
      begin
        oSubnetMask[i] := '255.255.255.0';
      end;
    end;
  end
  else
  if VarIsStr(ASubnetMask) then
  begin
    oSubnetMask    := VarArrayCreate([0, 0], varOleStr);
    oSubnetMask[0] := ASubnetMask;
  end;

  // Connect to WMI - Emulate API GetObject()
  OleCheck(CreateBindCtx(0, oCtx));
  OleCheck(MkParseDisplayNameEx(oCtx, PWideChar(sFileObj), i, oMk));
  OleCheck(oMk.BindToObject(oCtx, nil, IUnknown, oBindObj));
  oWMIService  := oBindObj;
  oNetAdapters := oWMIService.ExecQuery('Select * ' +
    'from Win32_NetworkAdapterConfiguration ' +
    'where Index="' + ADeviceID + '"');

  oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;
  while oEnum.Next(1, oNetAdapter, iValue) = 0 do
  begin
    try
      // Set by DHCP ? (Gateway and Subnet ignored)
      if not VarIsArray(oIpAddress) then
        Retvar := oNetAdapter.EnableDHCP
      // Set via STATIC ?
      else
      begin
        Retvar := oNetAdapter.EnableStatic(oIpAddress, oSubnetMask);
        // Change Gateway ?
        if (Retvar = 0) and (VarIsArray(oGateWay)) then
          Retvar := oNetAdapter.SetGateways(oGateway);
        // *** This is where we need some sort of ***
        // *** Network Mapped Resource Refresh    ***
      end;
    except
      Retvar := -1;
    end;
  end;
  Result := Retvar;
end;


Для DNS тож. самое
Код

function SetDnsServers(const ADeviceID: variant; const ADnsAddr: variant): integer;
var
  Retvar:                    integer;
  oDnsAddr, oWMIService:     olevariant;
  oBindObj:                  IDispatch;
  oNetAdapters, oNetAdapter: olevariant;
  i, iValue:                 longword;
  oEnum:                     IEnumvariant;
  oCtx:                      IBindCtx;
  oMk:                       IMoniker;
  sFileObj:                  WideString;
begin
  Retvar   := -1;
  Result   := Retvar;
  sFileObj := 'winmgmts:\\.\root\cimv2';

  if not VarIsStr(ADeviceID) then
    Exit;

  if VarIsArray(ADnsAddr) then
    oDnsAddr := ADnsAddr
  else
  if VarIsStr(ADnsAddr) then
  begin
    oDnsAddr    := VarArrayCreate([0, 0], varOleStr);
    oDnsAddr[0] := ADnsAddr;
  end;

  // Connect to WMI - Emulate API GetObject()
  OleCheck(CreateBindCtx(0, oCtx));
  OleCheck(MkParseDisplayNameEx(oCtx, PWideChar(sFileObj), i, oMk));
  OleCheck(oMk.BindToObject(oCtx, nil, IUnknown, oBindObj));
  oWMIService  := oBindObj;
  oNetAdapters := oWMIService.ExecQuery('Select * ' +
    'from Win32_NetworkAdapterConfiguration ' +
    'where Index="' + ADeviceID + '"');

  oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;
  while oEnum.Next(1, oNetAdapter, iValue) = 0 do
  begin
    try
      if VarIsArray(oDnsAddr) then
        Retvar := oNetAdapter.SetDNSServerSearchOrder(oDnsAddr)
      else
        Retvar := oNetAdapter.SetDNSServerSearchOrder();
    except
      Retvar := -1;
    end;
  end;
  Result := Retvar;
end;


Это сообщение отредактировал(а) Seeker - 4.5.2008, 12:46
PM MAIL   Вверх
fredEburg
Дата 4.5.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Seeker - ..мегареспектsmile)все завелось с полоборота)))))))))))))!!!!! --именно этот код мне и нужен был -
добавил только альтернативный dns....щас еще проверю на нескольких интерфейсах(думаю без проблем заведется)....smile))

PM MAIL   Вверх
BigSandy
Дата 11.12.2011, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.12.2011

Репутация: нет
Всего: нет



Добро день. 
Как установить вице ИП ячеек. 
Это есть подобная. 
http://www.delphi3000.com/articles/article_4392.asp?SK=

Одну ИП приставил таким образом. 
SetIpConfig(' 110.148.195.23 ' ,'10.148.195.1','255.255.255.224')  
Как отделать здройак чтобы я моh установить вице ИП  

110.148.195.23 ' ,'10.148.195.1','255.255.255.224 + 192.168.1.100 ' ,'192.168.1.1','255.255.255.255  





PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1690 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.