upd
This commit is contained in:
54
computer_networks/labs/lab1/code/netcfg.cmd
Normal file
54
computer_networks/labs/lab1/code/netcfg.cmd
Normal file
@@ -0,0 +1,54 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
setlocal EnableExtensions EnableDelayedExpansion
|
||||
|
||||
set MODE=%1
|
||||
set IFACE=%2
|
||||
set IP=%3
|
||||
set MASK=%4
|
||||
set GW=%5
|
||||
set DNS1=%6
|
||||
set DNS2=%7
|
||||
|
||||
if /i "%MODE%"=="dhcp" goto dhcp
|
||||
if /i "%MODE%"=="static" goto static
|
||||
|
||||
echo 1) DHCP
|
||||
echo 2) Static
|
||||
set /p MODESEL=Select mode [1/2]:
|
||||
if "%MODESEL%"=="1" set MODE=dhcp
|
||||
if "%MODESEL%"=="2" set MODE=static
|
||||
|
||||
if not defined IFACE set /p IFACE=Interface name [Ethernet]:
|
||||
if "%IFACE%"=="" set IFACE=Ethernet
|
||||
|
||||
if /i "%MODE%"=="dhcp" goto dhcp
|
||||
if /i "%MODE%"=="static" goto static
|
||||
echo Invalid selection
|
||||
exit /b 1
|
||||
|
||||
:dhcp
|
||||
if not defined IFACE set /p IFACE=Interface name [Ethernet]:
|
||||
if "%IFACE%"=="" set IFACE=Ethernet
|
||||
netsh interface ip set address name="%IFACE%" source=dhcp
|
||||
netsh interface ip set dns name="%IFACE%" source=dhcp
|
||||
ipconfig /flushdns
|
||||
echo Done
|
||||
exit /b 0
|
||||
|
||||
:static
|
||||
if not defined IFACE set /p IFACE=Interface name [Ethernet]:
|
||||
if "%IFACE%"=="" set IFACE=Ethernet
|
||||
if not defined IP set /p IP=IPv4 address:
|
||||
if not defined MASK set /p MASK=Subnet mask:
|
||||
if not defined GW set /p GW=Gateway:
|
||||
if not defined DNS1 set /p DNS1=DNS1:
|
||||
if not defined DNS2 set /p DNS2=DNS2 (optional):
|
||||
netsh interface ip set address name="%IFACE%" static %IP% %MASK% %GW% 1
|
||||
netsh interface ip set dns name="%IFACE%" static %DNS1% primary
|
||||
if defined DNS2 netsh interface ip add dns name="%IFACE%" %DNS2% index=2
|
||||
ipconfig /flushdns
|
||||
echo Done
|
||||
exit /b 0
|
||||
|
||||
|
||||
95
computer_networks/labs/lab1/code/netcfg.ps1
Normal file
95
computer_networks/labs/lab1/code/netcfg.ps1
Normal file
@@ -0,0 +1,95 @@
|
||||
param(
|
||||
[ValidateSet('DHCP','STATIC','INFO')] [string]$Mode,
|
||||
[string]$Interface = 'Ethernet',
|
||||
[string]$IP,
|
||||
[string]$Mask,
|
||||
[string]$Gateway,
|
||||
[string[]]$Dns
|
||||
)
|
||||
|
||||
function MaskToPrefix($m){
|
||||
$b = ($m -split '\.') | ForEach-Object {[Convert]::ToString([int]$_,2).PadLeft(8,'0')}
|
||||
($b -join '').ToCharArray() | Where-Object {$_ -eq '1'} | Measure-Object | Select-Object -ExpandProperty Count
|
||||
}
|
||||
|
||||
function EnsureInterface($alias){
|
||||
$a = Get-NetAdapter -InterfaceAlias $alias -ErrorAction SilentlyContinue
|
||||
if(-not $a){ throw "Interface not found: $alias" }
|
||||
}
|
||||
|
||||
function ConfigureDhcp($alias){
|
||||
EnsureInterface $alias
|
||||
Set-NetIPInterface -InterfaceAlias $alias -AddressFamily IPv4 -Dhcp Enabled
|
||||
Set-DnsClientServerAddress -InterfaceAlias $alias -ResetServerAddresses
|
||||
ipconfig /flushdns | Out-Null
|
||||
}
|
||||
|
||||
function ConfigureStatic($alias,$ip,$mask,$gw,$dns){
|
||||
EnsureInterface $alias
|
||||
$prefix = MaskToPrefix $mask
|
||||
Get-NetIPConfiguration -InterfaceAlias $alias | Get-NetIPAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | Remove-NetIPAddress -Confirm:$false -ErrorAction SilentlyContinue
|
||||
Get-NetIPConfiguration -InterfaceAlias $alias | Get-DnsClientServerAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | ForEach-Object { Set-DnsClientServerAddress -InterfaceAlias $alias -ResetServerAddresses }
|
||||
New-NetIPAddress -InterfaceAlias $alias -IPAddress $ip -PrefixLength $prefix -DefaultGateway $gw | Out-Null
|
||||
if($dns){ Set-DnsClientServerAddress -InterfaceAlias $alias -ServerAddresses $dns }
|
||||
ipconfig /flushdns | Out-Null
|
||||
}
|
||||
|
||||
function ShowNicInfo($alias){
|
||||
$na = Get-NetAdapter -InterfaceAlias $alias -ErrorAction SilentlyContinue
|
||||
if(-not $na){ throw "Interface not found: $alias" }
|
||||
$adv = Get-NetAdapterAdvancedProperty -InterfaceDescription $na.InterfaceDescription -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match 'Duplex|Speed' }
|
||||
[pscustomobject]@{
|
||||
Name = $na.Name
|
||||
InterfaceAlias = $na.InterfaceAlias
|
||||
InterfaceDescription = $na.InterfaceDescription
|
||||
Status = $na.Status
|
||||
MediaConnection = $na.MediaConnectionState
|
||||
LinkSpeed = $na.LinkSpeed
|
||||
DuplexSetting = ($adv | Where-Object { $_.DisplayName -match 'Duplex' } | Select-Object -First 1 -ExpandProperty DisplayValue)
|
||||
}
|
||||
}
|
||||
|
||||
if(-not $Mode){
|
||||
Write-Host "1) DHCP 2) STATIC 3) INFO"
|
||||
$sel = Read-Host "Select mode [1/2/3]"
|
||||
if($sel -eq '1'){ $Mode='DHCP' }
|
||||
elseif($sel -eq '2'){ $Mode='STATIC' }
|
||||
elseif($sel -eq '3'){ $Mode='INFO' }
|
||||
}
|
||||
|
||||
if($Mode -eq 'DHCP'){
|
||||
if(-not $PSBoundParameters.ContainsKey('Interface')){
|
||||
$Interface = Read-Host "Interface alias (default: Ethernet)"
|
||||
if([string]::IsNullOrWhiteSpace($Interface)){ $Interface='Ethernet' }
|
||||
}
|
||||
ConfigureDhcp -alias $Interface
|
||||
Get-NetIPConfiguration -InterfaceAlias $Interface
|
||||
exit
|
||||
}
|
||||
|
||||
if($Mode -eq 'STATIC'){
|
||||
if(-not $PSBoundParameters.ContainsKey('Interface')){
|
||||
$Interface = Read-Host "Interface alias (default: Ethernet)"
|
||||
if([string]::IsNullOrWhiteSpace($Interface)){ $Interface='Ethernet' }
|
||||
}
|
||||
if(-not $IP){ $IP = Read-Host "IPv4 address" }
|
||||
if(-not $Mask){ $Mask = Read-Host "Subnet mask" }
|
||||
if(-not $Gateway){ $Gateway = Read-Host "Gateway" }
|
||||
if(-not $Dns){
|
||||
$DnsStr = Read-Host "DNS (comma-separated, optional)"
|
||||
if($DnsStr){ $Dns = $DnsStr -split '\s*,\s*' }
|
||||
}
|
||||
ConfigureStatic -alias $Interface -ip $IP -mask $Mask -gw $Gateway -dns $Dns
|
||||
Get-NetIPConfiguration -InterfaceAlias $Interface
|
||||
exit
|
||||
}
|
||||
|
||||
if($Mode -eq 'INFO'){
|
||||
if(-not $PSBoundParameters.ContainsKey('Interface')){
|
||||
$Interface = Read-Host "Interface alias (default: Ethernet)"
|
||||
if([string]::IsNullOrWhiteSpace($Interface)){ $Interface='Ethernet' }
|
||||
}
|
||||
ShowNicInfo -alias $Interface | Format-List
|
||||
exit
|
||||
}
|
||||
|
||||
53
computer_networks/labs/lab1/code/netcfg_commented.cmd
Normal file
53
computer_networks/labs/lab1/code/netcfg_commented.cmd
Normal file
@@ -0,0 +1,53 @@
|
||||
@echo off // отключаем отображение выполеняемых команд в консольке
|
||||
chcp 65001 >nul // меняем кодировку на utf8 (вывод команды отправляется в nul)
|
||||
setlocal EnableExtensions EnableDelayedExpansion // включили расширенные возможности cmd и отложенную подстановку переменных
|
||||
|
||||
set MODE=%1 // первый параметр (statis/dhcp)
|
||||
set IFACE=%2 // второй параметр (имя интерфейса)
|
||||
set IP=%3 // третий параметр (ipv4 адрес)
|
||||
set MASK=%4 // четвертый параметр (маска подсети)
|
||||
set GW=%5 // пятый параметр (gateway)
|
||||
set DNS1=%6 // шестой параметр (первый DNS-сервер)
|
||||
set DNS2=%7 // седьмой параметр (второй DNS-сервер)
|
||||
|
||||
if /i "%MODE%"=="dhcp" goto dhcp // если параметр режима dhcp перейти по метке dhcp
|
||||
if /i "%MODE%"=="static" goto static // аналогично со static
|
||||
|
||||
echo 1) DHCP
|
||||
echo 2) Static // если режим не задан в параметрах то распечатаем 2 варианта и дадим пользователю выбрать
|
||||
set /p MODESEL=Select mode [1/2]: // спросим у пользователя вариант
|
||||
if "%MODESEL%"=="1" set MODE=dhcp // если введено 1, то MODE=dhcp
|
||||
if "%MODESEL%"=="2" set MODE=static // иначе MODE=static
|
||||
|
||||
if not defined IFACE set /p IFACE=Interface name [Ethernet]: // если не указано имя интерфейса запросим ввод
|
||||
if "%IFACE%"=="" set IFACE=Ethernet // если пользователь ничего не ввел (пустая строка), то используем Ethernet по умолчанию
|
||||
|
||||
if /i "%MODE%"=="dhcp" goto dhcp // опять же если выбран dhcp переходим на соответствующую метку
|
||||
if /i "%MODE%"=="static" goto static // аналогично
|
||||
echo Invalid selection // иначе выводим текст ошибки
|
||||
exit /b 1 // и выходим из программы (код ошибки 1)
|
||||
|
||||
:dhcp // метка для настройки DHCP
|
||||
if not defined IFACE set /p IFACE=Interface name [Ethernet]: // опять же если имя интерфейса не задано, запрашиваем
|
||||
if "%IFACE%"=="" set IFACE=Ethernet // по умолчанию ставим Ethernet
|
||||
netsh interface ip set address name="%IFACE%" source=dhcp // переводим интерфейс в получение ip через dhcp
|
||||
netsh interface ip set dns name="%IFACE%" source=dhcp // аналогично для dns
|
||||
ipconfig /flushdns // очищаем dns-кэш
|
||||
echo Done // оповещаем юзера о завершении операции
|
||||
exit /b 0 // выходим с кодом ошибки 0
|
||||
|
||||
:static
|
||||
if not defined IFACE set /p IFACE=Interface name [Ethernet]: // спрашиваем имя интерфеса если оно не установлено уже
|
||||
if "%IFACE%"=="" set IFACE=Ethernet // по умолчанию ставим Ethernet
|
||||
if not defined IP set /p IP=IPv4 address: // запрашиваем пользователя ввести ip
|
||||
if not defined MASK set /p MASK=Subnet mask: // маску
|
||||
if not defined GW set /p GW=Gateway: // шлюз
|
||||
if not defined DNS1 set /p DNS1=DNS1: // dns1
|
||||
if not defined DNS2 set /p DNS2=DNS2 (optional): // dns2
|
||||
netsh interface ip set address name="%IFACE%" static %IP% %MASK% %GW% 1 // назначаем все переданные пользователем параметры
|
||||
netsh interface ip set dns name="%IFACE%" static %DNS1% primary // задаем основной dns сервер
|
||||
if defined DNS2 netsh interface ip add dns name="%IFACE%" %DNS2% index=2 // если пользователем был задан второй dns то устанавливаем его как второй
|
||||
ipconfig /flushdns // очищаем dns-кэш
|
||||
echo Done // оповещаем пользователя об успешном завершении программы
|
||||
exit /b 0 // выходим с нулевым кодом ошибки
|
||||
|
||||
86
computer_networks/labs/lab1/code/netcfg_commented.ps1
Normal file
86
computer_networks/labs/lab1/code/netcfg_commented.ps1
Normal file
@@ -0,0 +1,86 @@
|
||||
param(
|
||||
[ValidateSet('DHCP','STATIC','INFO')] [string]$Mode, # параметр режима (DHCP/STATIC/INFO)
|
||||
[string]$Interface = 'Ethernet', # сетевой интерфейс (Ethernet - значение по умолчанию)
|
||||
[string]$IP, # ipv4 адрес
|
||||
[string]$Mask, # маска подсети
|
||||
[string]$Gateway, # шлюз
|
||||
[string[]]$Dns # массив dns серверов
|
||||
)
|
||||
|
||||
function MaskToPrefix($m){ # переводим маску в длину префикса (255.255.255.0 -> 24)
|
||||
$b = ($m -split '\.') | ForEach-Object {[Convert]::ToString([int]$_,2).PadLeft(8,'0')} # сплитим по точкам и переводим в воьсмибитные числа (двоичные)
|
||||
($b -join '' -split '1').Count - 1 | Out-Null # кусок тестов остался ((
|
||||
($b -join '').ToCharArray() | Where-Object {$_ -eq '1'} | Measure-Object | Select-Object -ExpandProperty Count # считаем количество единиц
|
||||
}
|
||||
|
||||
function EnsureInterface($alias){ # проверяем есть ли интерфейс с данным именем
|
||||
$a = Get-NetAdapter -InterfaceAlias $alias -ErrorAction SilentlyContinue
|
||||
if(-not $a){ throw "Interface not found: $alias" } # если нет, выбрасываем соответсвующую ошибку
|
||||
}
|
||||
|
||||
function ConfigureDhcp($alias){ # проводим настройку через dhcp сервер
|
||||
EnsureInterface $alias # проверяем есть ли интерфейс с таким именем
|
||||
Set-NetIPInterface -InterfaceAlias $alias -AddressFamily IPv4 -Dhcp Enabled # включаем получение IP по DHCP
|
||||
Set-DnsClientServerAddress -InterfaceAlias $alias -ResetServerAddresses # аналогично для dns
|
||||
ipconfig /flushdns | Out-Null # очищаем dns кэш
|
||||
}
|
||||
|
||||
function ConfigureStatic($alias,$ip,$mask,$gw,$dns){ # статическая настройка
|
||||
EnsureInterface $alias # проверяем валидность имени интерфейса
|
||||
$prefix = MaskToPrefix $mask # считаем префикс маски
|
||||
Get-NetIPConfiguration -InterfaceAlias $alias | Get-NetIPAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | Remove-NetIPAddress -Confirm:$false -ErrorAction SilentlyContinue # удалим существующие ip на этом интерфейсе
|
||||
Get-NetIPConfiguration -InterfaceAlias $alias | Get-DnsClientServerAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | ForEach-Object { Set-DnsClientServerAddress -InterfaceAlias $alias -ResetServerAddresses } # сбрасываем текущие dns настройки
|
||||
New-NetIPAddress -InterfaceAlias $alias -IPAddress $ip -PrefixLength $prefix -DefaultGateway $gw | Out-Null # создаем новый ip и шлюз
|
||||
if($dns){ Set-DnsClientServerAddress -InterfaceAlias $alias -ServerAddresses $dns } # если заданы dns сервера, пропишем их
|
||||
ipconfig /flushdns | Out-Null # чистим dns кэш
|
||||
}
|
||||
|
||||
function ShowNicInfo($alias){ # выводим информацию о сетевом интерфейсе
|
||||
$na = Get-NetAdapter -InterfaceAlias $alias -ErrorAction SilentlyContinue
|
||||
if(-not $na){ throw "Interface not found: $alias" } # проверяем имя интерфейса
|
||||
$adv = Get-NetAdapterAdvancedProperty -InterfaceDescription $na.InterfaceDescription -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match 'Duplex|Speed|дуплекс|скорост' } # получаем расширенные свойства адаптера, ищем строки со словом Duplex/Speed
|
||||
$info = [pscustomobject]@{
|
||||
Name = $na.Name
|
||||
InterfaceAlias = $na.InterfaceAlias
|
||||
InterfaceDescription= $na.InterfaceDescription
|
||||
Status = $na.Status
|
||||
MediaConnection = $na.MediaConnectionState
|
||||
LinkSpeed = $na.LinkSpeed
|
||||
DuplexSetting = ($adv | Where-Object { $_.DisplayName -match 'Duplex|дуплекс' } | Select-Object -First 1 -ExpandProperty DisplayValue)
|
||||
} # формируем объект с нужными полями
|
||||
$info # и выводим его
|
||||
}
|
||||
|
||||
# если параметр $Mode не передан, показываем меню выбора
|
||||
if(-not $Mode){
|
||||
Write-Host "1) DHCP 2) STATIC 3) INFO"
|
||||
$sel = Read-Host "Select mode [1/2/3]"
|
||||
if($sel -eq '1'){ $Mode='DHCP' }
|
||||
elseif($sel -eq '2'){ $Mode='STATIC' }
|
||||
elseif($sel -eq '3'){ $Mode='INFO' }
|
||||
} # пользователь выбрал мод
|
||||
|
||||
if($Mode -eq 'DHCP'){
|
||||
if(-not $PSBoundParameters.ContainsKey('Interface')){ $Interface = Read-Host "Interface alias (default: Ethernet)"; if([string]::IsNullOrWhiteSpace($Interface)){ $Interface='Ethernet' } } # если интерфейс не передан в качестве параметра, просим у пользователя
|
||||
ConfigureDhcp -alias $Interface # вызывыаем настройку dhcp
|
||||
Get-NetIPConfiguration -InterfaceAlias $Interface # показываем результат
|
||||
exit
|
||||
}
|
||||
|
||||
if($Mode -eq 'STATIC'){ # статическая конфигурация
|
||||
if(-not $PSBoundParameters.ContainsKey('Interface')){ $Interface = Read-Host "Interface alias (default: Ethernet)"; if([string]::IsNullOrWhiteSpace($Interface)){ $Interface='Ethernet' } } # если интерфейс не передан, просим у пользователя
|
||||
if(-not $IP){ $IP = Read-Host "IPv4 address" } # аналогично
|
||||
if(-not $Mask){ $Mask = Read-Host "Subnet mask" } # аналогично
|
||||
if(-not $Gateway){ $Gateway = Read-Host "Gateway" } # аналогично
|
||||
if(-not $Dns){ $DnsStr = Read-Host "DNS (comma-separated, optional)"; if($DnsStr){ $Dns = $DnsStr -split '\s*,\s*' } } # аналогично
|
||||
ConfigureStatic -alias $Interface -ip $IP -mask $Mask -gw $Gateway -dns $Dns # вызываем функцию статической настройки
|
||||
Get-NetIPConfiguration -InterfaceAlias $Interface # показываем результат
|
||||
exit
|
||||
}
|
||||
|
||||
if($Mode -eq 'INFO'){
|
||||
if(-not $PSBoundParameters.ContainsKey('Interface')){ $Interface = Read-Host "Interface alias (default: Ethernet)"; if([string]::IsNullOrWhiteSpace($Interface)){ $Interface='Ethernet' } } # если не задан интерфейс, спросим у юзера
|
||||
ShowNicInfo -alias $Interface | Format-List # показываем результат
|
||||
exit
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user