Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Цитата Geleoss:
Нужно определить из какого диапазона шлюз используеться для локальной сети, а конкретно он начинаеться на "10" или на "192.168", после чего записать в файлик настроек (provider.ini) строку с диапазонов IP (10.0.0.0/8 либо 192.168.0.0/16). »
Такие вот времяночки/заплаточки при каких-либо "флуктуациях" настроек сети обычно приводят к непонятным глючкам, вобщем я хотел сказать, что так делать нехорошо.

Вообще, возни с подсчетом маски вышло...
Код: Выделить весь код
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

set Out="provider.ini"
set TMP="%~DPN0.TMP"
del /f %TMP% 2>nul

rem Получаем IP, с которого выход на шлюз по-умолчанию
for /f "tokens=4" %%A in ('route print ^| findstr /r /c:" 0.0.0.0 * 0.0.0.0 "') do (
set A=%%A
set A=!A:.= !
call :ValidateIP !A!
if not ErrorLevel 1 echo %%A>>%TMP%
)
if not exist %TMP% (
Echo Не удалось получить адрес подключения
exit 1
)

rem Ищем адреса сетей
for /f "usebackq tokens=* delims=" %%A in (%TMP%) do (
for /f "tokens=1,2" %%L in ('route print ^| findstr /r /c:" %%A "') do (
set Err=0
set L=%%L
set L=!L:.= !
call :ValidateIP !L!
set /a Err+=!ErrorLevel!
set M=%%M
set M=!M:.= !
call :ValidateIP !M!
set /a Err+=!ErrorLevel!
if "!L!"=="224 0 0 0" set Err=1
if "!M!"=="0 0 0 0" set Err=1
if "!M!"=="255 255 255 255" set Err=1
if !Err!==0 call :CalcMask %%L
)
)

exit

:CalcMask
set /a M="!M:~0,3!<<24 | !M:~4,3!<<16 | !M:~8,3!<<8 | !M:~12,3!"
set Mask=0
:loop
set /a Mask+=1
set /a L="(!M!>>!Mask!)<<!Mask!"
if not !M!==0 if !M!==!L! goto loop
set /a Mask=33-!Mask!
echo %1^/!Mask!>%Out%
)
exit /b

:ValidateIP
set VErr=0
:ValidateIP1
if "%1"=="" exit /b !VErr!
set B=%1
set B=!B:0=!
if not "!B!"=="" if /i %1 LEQ 0 set /A VErr+=1
if /i %1 GEQ 256 set /A VErr+=1
shift
goto ValidateIP1
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:55, 05-04-2010 | #11