Войти

Показать полную графическую версию : [решено] Перебор свободных IP по списку и выбор свободного


Debugger
10-02-2012, 14:19
Цель такая - имеется несколько свободных IP-адресов, которые используются не постоянно, а только на момент подготовки компьютеров к работе - установка ОС, софта, назначение уже постоянного другого IP адреса и выдача сотруднику. Сваял батник, который при первом входе в систему назначает компьютеру временный и заведомо никем не используемый IP-адрес, затем пингует остальные по списку и назначает уже другой - свободный (DHCP отключен). После чего установка софта запускается уже по сетке. Батник получился довольно громоздким, все думаю как бы его уменьшить (просто из спортивного интереса), или может быть можно сделать вообще как-то по-другому? И хочу чтобы был только один файл.
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v SearchList /t REG_SZ /d zavod.loc /f
reg add HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters /v SearchList /t REG_SZ /d zavod.loc /f
echo pushd interface ip > c:\ipconfig
echo set address name="Подключение по локальной сети" source=static addr=192.168.9.192 mask=255.255.252.0 >> c:\ipconfig
echo set address name="Подключение по локальной сети" gateway=192.168.10.199 gwmetric=0 >> c:\ipconfig
echo set dns name="Подключение по локальной сети" source=static addr=192.168.10.5 register=PRIMARY >> c:\ipconfig
echo add dns name="Подключение по локальной сети" addr=192.168.10.171 index=2 >> c:\ipconfig
echo set wins name="Подключение по локальной сети" source=static addr=none >> c:\ipconfig
echo popd >> c:\ipconfig
netsh exec c:\ipconfig
del /q c:\ipconfig

for %%I in (245,246,247,248) do ping 192.168.9.%%I -n 3 | find /I "TTL" || (set freeIP=%%I & goto :setip)
echo "Нет свободных адресов" & pause & exit

:setip
echo pushd interface ip > c:\ipconfig
echo set address name="Подключение по локальной сети" source=static addr=192.168.9.%freeIP% mask=255.255.252.0 >> c:\ipconfig
echo set address name="Подключение по локальной сети" gateway=192.168.10.199 gwmetric=0 >> c:\ipconfig
echo set dns name="Подключение по локальной сети" source=static addr=192.168.10.5 register=PRIMARY >> c:\ipconfig
echo add dns name="Подключение по локальной сети" addr=192.168.10.171 index=2 >> c:\ipconfig
echo set wins name="Подключение по локальной сети" source=static addr=none >> c:\ipconfig
echo popd >> c:\ipconfig
netsh exec c:\ipconfig
del /q c:\ipconfig

Busla
11-02-2012, 11:39
Именно для этого и придумывали DHCP - почему же его не использовать в своей лабораторной сети?

Debugger
11-02-2012, 12:47
Нет возможности включить DHCP - сеть общая, заводская.

Iska
11-02-2012, 13:32
Батник получился довольно громоздким, все думаю как бы его уменьшить (просто из спортивного интереса) »
1. В общем и целом — имеет смысл для повторяющегося текста использовать переменные. Скажем, у Вас многократно идёт текст «Подключение по локальной сети», идентифицирующий подключение. Может быть, стоит даже захватить чуть больше — вместе с «name=…».

Т.е., что-то наподобие:
set sName=name="Подключение по локальной сети"

echo set address %sName% source=static addr=192.168.9.192 mask=255.255.252.0 >> c:\ipconfig
echo set address %sName% gateway=192.168.10.199 gwmetric=0 >> c:\ipconfig
echo set dns %sName% source=static addr=192.168.10.5 register=PRIMARY >> c:\ipconfig

То же относится и к имени файла, куда мы выводим — лучше его один раз определить через переменную, затем использовать эту переменную в коде (см. также п.2).

2. Чтобы не писать в каждой команде перенаправление вывода — можно оформить их операторными скобками, за/перед которыми уже и использовать перенаправление. Наподобие:
set sFileOut=c:\ipconfig.txt
set sName=name="Подключение по локальной сети"


>"%sFileOut%" (
echo pushd interface ip
echo set address %sName% source=static addr=192.168.9.192 mask=255.255.252.0
echo set address %sName% gateway=192.168.10.199 gwmetric=0
echo set dns %sName% source=static addr=192.168.10.5 register=PRIMARY
echo add dns %sName% addr=192.168.10.171 index=2
echo set wins %sName% source=static addr=none
echo popd
)
netsh exec "%sFileOut%"
del /q "%sFileOut%"




Как Вы поняли — это всё «косметика».

Debugger
11-02-2012, 17:42
В общем и целом — имеет смысл для повторяющегося текста использовать переменные. »
Вот это - да, непростительно. Надо было догадаться.
Как Вы поняли — это всё «косметика». »
Вот именно "косметику" я и имел в виду, спасибо за предложения. Про конструкцию
>"%sFileOut%" (
echo pushd interface ip
echo set address %sName% source=static addr=192.168.9.192 mask=255.255.252.0
echo set address %sName% gateway=192.168.10.199 gwmetric=0
echo set dns %sName% source=static addr=192.168.10.5 register=PRIMARY
echo add dns %sName% addr=192.168.10.171 index=2
echo set wins %sName% source=static addr=none
echo popd) - я вообще не знал, что такое допускается в батниках. Тему отмечаю решенной.




© OSzone.net 2001-2012