Как программно изменить ip адрес

Я пользуюсь личным ноутбуком на работе и дома. Для доступа к сети мне приходится дважды в день менять сетевые настройки. Причем, как дома, так и в офисе есть при...

Я пользуюсь личным ноутбуком на работе и дома. Для доступа к сети мне приходится дважды в день менять сетевые настройки. Причем, как дома, так и в офисе есть привязка к MAC-адресу машины. Поэтому приходится также менять MAC в свойствах сетевой платы.
Чтобы как-то автоматизировать этот процесс, была запущена командная строка и поисковик. Подробности и готовый bat-файл под катом.

Вступление

Для смены IP в командной строке windows есть утилита netsh. Подробнее, что это такое и с чем её едят на wiki.
Для смены MAC-адреса я стандартных средств не нашел (если таковые есть — укажите, буду признателен). Поэтому я использовал программу Macshift. Скачать можно с официального сайта.

Занятия bat-аникой

Создаем файл network.bat с содержимым:
@echo off
set /p mesto="Выберите настройки (1 - дом, 2 - работа): "
echo Выбраны настройки - %mesto%

if %mesto% equ 2 goto rabota

:dom
set IFACE="local"
set IP=10.160.100.9
set MASK=255.255.255.0
set GATEWAY=10.160.100.1
set GWMETRIC=1
set DNS1=10.160.100.1
set MAC=001122334455
goto smena

:rabota
set IFACE="local"
set IP=192.168.1.91
set MASK=255.255.255.0
set GATEWAY=192.168.1.1
set GWMETRIC=1
set DNS1=192.168.1.10
set MAC=221133004455
goto smena

:smena
echo Меняем MAC адрес на %MAC%
echo _____
macshift -i "local" %MAC%

echo _____
echo Устанавливаем IP адрес-%IP%
echo Маску подсети-%MASK%
echo Основной Шлюз-%GATEWAY%

netsh interface ip set address name=%IFACE% source=static addr=%IP% mask=%MASK% gateway=%GATEWAY% gwmetric=%GWMETRIC%

echo Устанавливаем основной DNS сервер %DNS1%
netsh interface ip set dns name=%IFACE% source=static addr=%DNS1% register=PRIMARY

echo Настройки сети изменены:
ipconfig /all
echo _____
pause

Обратите внимание на начало файла, после меток dom и rabota вводим свои настройки.
Примечание: «echo _____» использовано исключительно из эстетических начинаний.

Последние приготовления

Программу macshift и батник я разместил в d:programnetwork. А на рабочий стол вынес ярлычок network.lnk. При запуске ярлыка командный файл начинает работу с вопроса о выборе настроек. Нажав «1», получаем настройки для дома, соответственно, «2» — для офиса.
Может быть кому-то данный топик окажется полезным.


Windows, Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP

  • 04.03.2020
  • 41 588
  • 4
  • 28.03.2021
  • 62
  • 61
  • 1

Как изменить IP адрес компьютера из командной строки или bat-файла

  • Содержание статьи
    • Описание
    • Комментарии к статье ( 4 шт )
    • Добавить комментарий

В процессе работы в ОС семейства Windows иногда бывает необходимо изменить IP адрес компьютера не через графический интерфейс, а с помощью пакетного файла (bat) или же с помощью командной строки (cmd). В данной статье мы расскажем о том, как это можно сделать.

Описание

Смена IP адреса компьютера осуществляется с помощью утилиты netsh, которая входит в состав Windows начиная с самых старых версий этой ОС. Чтобы правильно сменить IP адрес, сначала надо выяснить текущую конфигурацию. Сделать это можно в командной строке при помощи команды

netsh interface ip show address


Результат работы этой команды — отображение текущей конфигурации всех сетевых интерфейсов, настроенных в ОС. Из всех, нам необходимо найти и запомнить название того интерфейса, для которого мы хотим поменять адрес. В нашем примере видно, что интерфейс называется Ethernet. Текущий IP адрес 192.168.100.136, маска подсети 255.255.255.0, а основной шлюз 192.168.100.1.
Предположим, что нужно сменить наш IP адрес на 192.168.100.10, адресация в сети статическая, без использования DHCP, шлюз остается прежним 192.168.100.1, маска тоже не меняется 255.255.255.0

В этом случае, команда, которая должна быть выполнена из пакетного файла или командой строки принимает следующий вид:

netsh interface ip set address name="Ethernet" static 192.168.100.10 255.255.255.0 192.168.100.1 1

После выполнения этой команды у интерфейса Ethernet сменится IP адрес на 192.168.100.10, как на скриншоте ниже.

В том случае, если вы укажите неверное название интерфейса, то получите ошибку следующего содержания: «Синтаксическая ошибка в имени файла, имени папки или метке тома.«. Проверьте внимательно, что нигде не ошиблись при написании.

Также вы можете столкнуться со следующей ошибкой: «Для запрошенной операции требуется повышение прав (запустите с правами администратора)«. Как видно из текста ошибки, необходимо запустить командную строку (или bat-файл) с правами администратора, как это сделать на разных версиях Windows, можно прочитать в этой статье.

Команда netsh предоставляет широкие возможности по управлению сетевыми настройками из командной строки. Для ознакомления с другими ее функциональными возможностями пользуйтесь справкой при помощи netsh /?

I made a script you may like.
It uses netsh to achieve what you need.

Just copy the code here into a new file and name it something like configip.bat or whatever you prefer (just don’t call it ipconfig :)

You will need to modify several things in the script:
IP addresses you want, subnet masks and gateways.
All DNS servers are set to Google’s (8.8.8.8) so they are very likely to work for you — unless your ISP requires you use their ones. In that case, use those.

You have several options for local network (wire and wireless), as well as DHCP (autoassigned IP).

There is also an option to dump your current configuration so you can see how it looks from netsh perspective.

This will allow you to modify my script with ease as you will have all the parameters in c:networkconfig.txt file.

Of course, should you need further help with modification, I’ll be here :)


@echo off
cls
:start
echo.
echo IP Configuration
echo.
echo 1. LAN Home
echo 2. LAN Office
echo 3. LAN DHCP
echo 4. WLAN Home
echo 5. WLAN Office
echo 6. Configuration Dump
echo 7. Quit
echo.

set /p userinput=Enter your choice: set option=%userinput:~0,1% if "%option%"=="1" goto homelan if "%option%"=="2" goto officelan if "%option%"=="3" goto landhcp if "%option%"=="4" goto homewan if "%option%"=="5" goto officewan if "%option%"=="6" goto configdump if "%option%"=="7" goto end echo. echo Invalid choice goto start

:homelan echo. echo Applying LAN HOME configuration. echo. netsh interface ip set address "Local Area connection" static 192.168.1.2 255.255.255.0 192.168.1.1 1 netsh interface ip set dns name="Local Area Connection" static 8.8.8.8 goto end

:officelan echo. echo Applying LAN OFFICE configuration. echo. netsh interface ip set address "Local Area connection" static 123.456.78.90 255.255.255.0 123.456.78.254 1 netsh interface ip set dns name="Local Area Connection" static 8.8.8.8 goto end

:landhcp echo. echo Applying DYNAMIC configuration. echo. netsh interface ip set address name="Local Area Connection" source=dhcp netsh interface ip set dns name="Local Area Connection" source=dhcp goto end

:homewan echo. echo Applying WLAN HOME configuration. echo. netsh interface ip set address name="Wireless Network Connection" source=dhcp netsh interface ip set dns name="Wireless Network Connection" source=dhcp goto end

:officewan echo. echo Applying WLAN OFFICE configuration. echo. netsh interface ip set address name="Wireless Network Connection" static 123.456.78.90 255.255.255.0 123.456.78.254 1 netsh interface ip set dns name="Wireless Network Connection" static 8.8.8.8 goto end

:configdump netsh -c interface dump > c:networkconfig.txt echo. echo Config file "c:networkconfig.txt" created. echo. echo To restore settings from config dump, use: echo netsh -f networkconfig.txt echo. pause goto end

:end

I made a script you may like.
It uses netsh to achieve what you need.

Just copy the code here into a new file and name it something like configip.bat or whatever you prefer (just don’t call it ipconfig :)

You will need to modify several things in the script:
IP addresses you want, subnet masks and gateways.
All DNS servers are set to Google’s (8.8.8.8) so they are very likely to work for you — unless your ISP requires you use their ones. In that case, use those.

You have several options for local network (wire and wireless), as well as DHCP (autoassigned IP).

There is also an option to dump your current configuration so you can see how it looks from netsh perspective.

This will allow you to modify my script with ease as you will have all the parameters in c:networkconfig.txt file.

Of course, should you need further help with modification, I’ll be here :)


@echo off
cls
:start
echo.
echo IP Configuration
echo.
echo 1. LAN Home
echo 2. LAN Office
echo 3. LAN DHCP
echo 4. WLAN Home
echo 5. WLAN Office
echo 6. Configuration Dump
echo 7. Quit
echo.

set /p userinput=Enter your choice: set option=%userinput:~0,1% if "%option%"=="1" goto homelan if "%option%"=="2" goto officelan if "%option%"=="3" goto landhcp if "%option%"=="4" goto homewan if "%option%"=="5" goto officewan if "%option%"=="6" goto configdump if "%option%"=="7" goto end echo. echo Invalid choice goto start

:homelan echo. echo Applying LAN HOME configuration. echo. netsh interface ip set address "Local Area connection" static 192.168.1.2 255.255.255.0 192.168.1.1 1 netsh interface ip set dns name="Local Area Connection" static 8.8.8.8 goto end

:officelan echo. echo Applying LAN OFFICE configuration. echo. netsh interface ip set address "Local Area connection" static 123.456.78.90 255.255.255.0 123.456.78.254 1 netsh interface ip set dns name="Local Area Connection" static 8.8.8.8 goto end

:landhcp echo. echo Applying DYNAMIC configuration. echo. netsh interface ip set address name="Local Area Connection" source=dhcp netsh interface ip set dns name="Local Area Connection" source=dhcp goto end

:homewan echo. echo Applying WLAN HOME configuration. echo. netsh interface ip set address name="Wireless Network Connection" source=dhcp netsh interface ip set dns name="Wireless Network Connection" source=dhcp goto end

:officewan echo. echo Applying WLAN OFFICE configuration. echo. netsh interface ip set address name="Wireless Network Connection" static 123.456.78.90 255.255.255.0 123.456.78.254 1 netsh interface ip set dns name="Wireless Network Connection" static 8.8.8.8 goto end

:configdump netsh -c interface dump > c:networkconfig.txt echo. echo Config file "c:networkconfig.txt" created. echo. echo To restore settings from config dump, use: echo netsh -f networkconfig.txt echo. pause goto end

:end

    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;

Понравилась статья? Поделить с друзьями:
  • Как проводится работа над ошибками после диктанта
  • Как провести работу над ошибками после диктанта 3 класс
  • Как провести день рождения чтобы изменить жизнь к лучшему
  • Как провести гашение на кассовом аппарате меркурий 185ф ошибка 066
  • Как проверить электронику автомобиля на ошибки