Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

Изменить основной шлюз, альтерн. и предпочит ДНС в виндовсе   Найти похожие ветки 

 
DelphiN! ©   (2006-02-06 09:18) [0]

Как изменить САБЖ, и применить изменения сразу, без перезагрузки. Сам ксожадению данную информацию найти не смог :(


 
Rouse_ ©   (2006-02-06 09:43) [1]

Очень просто. Есть такая недокументированная функция в iphlpapi.dll
Выглядит она так:

function SetAdapterIpAddress(szAdapterGUID: PChar; dwDHCP, dwIP, dwMask, dwGateway: DWORD): DWORD; stdcall; external "iphlpapi.dll";

Первый параметр - ГУИД сетевого интерфейса. найти его ты можешь через GetAdaptersInfo. Пример здесь: http://rouse.front.ru/netifenum.zip

дальше идут адрес DHCP сервера, IP адрес и маска подсети которые ты хочешь установить и последним параметром идет шлюз.

Если какойто из параметров менять не хочешь - передавай ноль, если будешь менять, то передавай через inet_addr, к примеру inet_addr("192.168.1.2")

По поводу первого параметра, я не помню, там либо PChar либо PWideChar - поэксперементируй.


 
DelphiN! ©   (2006-02-06 11:57) [2]


>  [1] Rouse_ ©   (06.02.06 09:43)


Спасибо, попробовал, но к сожадению адреса по каким-то причинам не меняются, вот как я это сделал :


const
 MAX_ADAPTER_NAME_LENGTH        = 256;
 MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
 MAX_ADAPTER_ADDRESS_LENGTH     = 8;
 IPHelper = "iphlpapi.dll";

 MIB_IF_TYPE_OTHER     = 1;
 MIB_IF_TYPE_ETHERNET  = 6;
 MIB_IF_TYPE_TOKENRING = 9;
 MIB_IF_TYPE_FDDI      = 15;
 MIB_IF_TYPE_PPP       = 23;
 MIB_IF_TYPE_LOOPBACK  = 24;
 MIB_IF_TYPE_SLIP      = 28;

type
 time_t = Longint;

 IP_ADDRESS_STRING = record
   S: array [0..15] of Char;
 end;
 IP_MASK_STRING = IP_ADDRESS_STRING;
 PIP_MASK_STRING = ^IP_MASK_STRING;

 PIP_ADDR_STRING = ^IP_ADDR_STRING;
 IP_ADDR_STRING = record
   Next: PIP_ADDR_STRING;
   IpAddress: IP_ADDRESS_STRING;
   IpMask: IP_MASK_STRING;
   Context: DWORD;
 end;

 PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
 IP_ADAPTER_INFO = record
   Next: PIP_ADAPTER_INFO;
   ComboIndex: DWORD;
   AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
   Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
   AddressLength: UINT;
   Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
   Index: DWORD;
   Type_: UINT;
   DhcpEnabled: UINT;
   CurrentIpAddress: PIP_ADDR_STRING;
   IpAddressList: IP_ADDR_STRING;
   GatewayList: IP_ADDR_STRING;
   DhcpServer: IP_ADDR_STRING;
   HaveWins: BOOL;
   PrimaryWinsServer: IP_ADDR_STRING;
   SecondaryWinsServer: IP_ADDR_STRING;
   LeaseObtained: time_t;
   LeaseExpires: time_t;
 end;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   function GetAdapterGUID: String;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

 function SetAdapterIpAddress(szAdapterGUID: PChar; dwDHCP, dwIP, dwMask, dwGateway: DWORD): DWORD; stdcall; external "iphlpapi.dll";

 function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
   var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 InterfaceInfo,
 TmpPointer: PIP_ADAPTER_INFO;
 Len: Cardinal;
 strl: TStringList;
begin
 try
   strl := TStringList.Create;
   strl.Text := GetAdapterGUID;
   if strl.Count > 0 then
     SetAdapterIpAddress(PChar(strl.Strings[0]),0,0,inet_addr("255.255.255.0"),inet_addr("198.162.0.147"));
 finally
   strl.Free;
 end;
end;

function TForm1.GetAdapterGUID: String;
var
 InterfaceInfo,
 TmpPointer: PIP_ADAPTER_INFO;
 IP: PIP_ADDR_STRING;
 Len: ULONG;
 AdapterType: String;
begin
 if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
 begin
   GetMem(InterfaceInfo, Len);
   try
     if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then
     begin
       TmpPointer := InterfaceInfo;
       repeat
         if Result <> "" then
           Result := Result+#13#10;
         Result := Result+TmpPointer^.AdapterName;
         TmpPointer := TmpPointer.Next;
       until TmpPointer = nil;
     end;
   finally
     FreeMem(InterfaceInfo);
   end;
 end;
end;


 
DelphiN! ©   (2006-02-06 12:22) [3]

SetAdapterIpAddress возвращает 68


 
Rouse_ ©   (2006-02-06 13:19) [4]

DHCP клиент должен быть включен в службах, ну и текущай IP третим параметром тоже передай попробуй.


 
piople ©   (2006-02-06 13:33) [5]

А как при этом еще заменить DNS? и альтернативный DNS?


 
DelphiN! ©   (2006-02-06 13:41) [6]

DHCP клиент включен, ИП адрес тоже ставить пробовал, результат тотже :(


 
DelphiN! ©   (2006-02-06 13:50) [7]

В кодах ошибок Windows код 68 соответствует ошибке "Превышен предел по числу имен для локальной сетевой платы компьютера".
Что это значит?


 
Rouse_ ©   (2006-02-06 14:41) [8]

Тэкс, попробуй передать ГУИД просто строкой... Он у тебя должен быть известен:

Вот тут еще посмотри: http://rsdn.ru/Forum/Message.aspx?mid=511834


 
DelphiN! ©   (2006-02-06 15:08) [9]


>  [8] Rouse_ ©   (06.02.06 14:41)


Переустановил драйвера на сетевую карту и все заработало! Странно, а локальная сеть у меня работала без проблемм ... Теперь осталось изменить предпочитаемый и альтернативный ДНС сервер.
Может кто знает как сделать и это?


 
DelphiN! ©   (2006-02-08 14:51) [10]

Функция SetAdapterIpAddress не работает, если на компьютере прописано несколько IP адресов!


 
DelphiN! ©   (2006-02-08 14:51) [11]

Возвращает код 68


 
piople ©   (2006-02-14 05:30) [12]

Что значит - "прописано несколько IP адресов" несколько сетевых карт в машине?


 
Rouse_ ©   (2006-02-14 22:43) [13]


> Что значит - "прописано несколько IP адресов" несколько
> сетевых карт в машине?

за каждой сетевой картой может быть закреплено несколько IP адесов. Добавляются через свойства сетевого подключения...
Матчасть однако... ;)


 
Kuzia   (2006-02-15 15:31) [14]

Нужна аналогичная функция для Win98 (в ип хелпере 98 - SetAdapterIpAddress нет). Собственно даже нужен только способ включить DHCP для определенного интерфейса.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.01 c
15-1148715019
Kolan
2006-05-27 11:30
2006.06.25
Помогите настроить ADSL дома...


6-1139935671
Korneley
2006-02-14 19:47
2006.06.25
Минимальный таймаут для PING


6-1139813826
Pavlusha00
2006-02-13 09:57
2006.06.25
БД Через Proxy


2-1149259611
>BeRDor<
2006-06-02 18:46
2006.06.25
Таймер


2-1149518593
evgenij_
2006-06-05 18:43
2006.06.25
API Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский