This commit is contained in:
nik
2025-10-01 22:55:09 +03:00
parent 4d0ece634b
commit 74e98c37c4
591 changed files with 20286 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

View 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

View 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
}

View 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 // выходим с нулевым кодом ошибки

View 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
}

Binary file not shown.

View File

@@ -0,0 +1,438 @@
#set text(size: 1.3em)
// title
#align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики]
\
\
\
#align(center)[Факультет инфокоммуникационных технологий]
#align(center)[Направление подготовки 11.03.02]
\
\
#align(center)[Практическая работа №1]
#align(center)[Консольные средства настройки Windows]
\
\
\ //#align(center)[Вариант 19]
\
\
\
\
\
\
\
#align(right)[Выполнил:]
#align(right)[Дощенников Никита Андреевич]
#align(right)[Группа: К3121]
#align(right)[Проверил:]
#align(right)[Антон Харитонов]
\
\
#align(center)[Санкт-Петербург]
#align(center)[2025]
#pagebreak()
// page 1
=== Цель работы
Освоить практические навыки настройки сетевых параметров в ОС Windows (или другой операционной системе), изучить консольные инструменты для диагностики и администрирования сети, научиться создавать скрипты для автоматической конфигурации сетевого интерфейса и ознакомиться с форматом записи сетевых путей UNC.
=== Сетевые компоненты
Control Panel -> Network and Internet -> Network and Sharing Center -> Change adapter settings -> Ethernet -> Properties
#align(center)[#image("assets/1.png")]
На снимке экрана мы видим сетевые компоненты, такие как Client for Microsoft Networks (позволяет ПК подключаться к общим папкам, принтерам и другим ресурсам в сети (клиентская часть SMB/CIFS)), File and Printer Sharing for Microsoft Networks (позволяем другим ПК подключаться к ресурсам моего компьютера (серверная часть SMB/CIFS)), Internet Protocol Version 4 / 6 (обеспечивает работу сети и интернета через IPv4/IPv6 адреса).
Я отключил File and Printer Sharing for Microsoft Networks, чтобы предотвратить удалённый доступ к файлам, принтерам и другим ресурсам моего компьютера по протоколу Server Message Block.
=== Утилиты.
`ping` - консольная утилита для проверки доступности узла в сети и измерения времени отклика. Она отправляет ICMP-эхо-запросы на указанный IP-адрес или доменное имя и выводит ответы (если узел доступен).
#align(center)[#image("assets/2.png")]
Если установлен параметр `-t`, пакеты отправляются бесконечно, например:
#align(center)[#image("assets/3.png")]
Пинг, в данном случае, прерывается сочетанием клавиш Ctrl+C.
Для установки определенного количества запросов используется параметр `-n <number>`:
#align(center)[#image("assets/4.png")]
Чтобы установить размер пакета байтах), можно использовать параметр `-l <size>`.
#align(center)[#image("assets/5.png")]
Параметр `-f` позволяет не фрагментировать пакет.
#align(center)[#image("assets/6.png")]
Параметры `-4` и `-6` позволяют принудительно использовать IPv4 и IPv6 соответственно.
#align(center)[#image("assets/7.png")]
Пример записи результата в файл:
#align(center)[#image("assets/8.png")]
`tracert` - утилита, показывающая маршрут следования пакетов от компьютера-исполнителя до указанного хоста (список всех промежуточных узлов, через которые проходит пакет).
#align(center)[#image("assets/9.png")]
Параметр `-d` позволяет программе не пытаться определять имена узлов и тем самым ускоряет работу программы.
#align(center)[#image("assets/10.png")]
Параметр `-h <number>` устанавливает максимальное число прыжков, через которое программа завершает свою работу.
#align(center)[#image("assets/11.png")]
Параметр `-w <time>` задает таймаут ожидания ответа в мс.
#align(center)[#image("assets/12.png")]
`ipconfig` - утилита, используемая для работы с сетевыми настройками. Она выводит и управляет конфигурацией сетевых интерфейсов на ПК.
#align(center)[#image("assets/13.png")]
`ipconfig /all` показывает расширенную информацию (физический адрес, dhcp-настройки, и т.д.)
#align(center)[#image("assets/14.png")]
#align(center)[#image("assets/15.png")]
Чтобы освободить текущий IP можно использовать `ipconfig /release`
#align(center)[#image("assets/16.png")]
#align(center)[#image("assets/17.png")]
Чтобы запросить новый IP используется команда `ipconfig /renew`
#align(center)[#image("assets/18.png")]
#align(center)[#image("assets/19.png")]
Чтобы посмотреть содержимое DNS-кэша можно использовать команду `ipconfig /displaydns`
#align(center)[#image("assets/20.png")]
#align(center)[#image("assets/21.png")]
#align(center)[#image("assets/22.png")]
#align(center)[#image("assets/23.png")]
Чтобы сбросить DNS-кэш используем `ipconfig /flushdns`:
#align(center)[#image("assets/24.png")]
Чтобы повторно зарегистрировать компьютер в DNS используем команду `ipconfig /registerdns`
#align(center)[#image("assets/25.png")]
`net` - утилита для администрирования, работы с сетью, пользователями, сервисами и ресурсами.
Для подключения, отображения и отключения сетевых ресурсов используем `net use`.
#align(center)[#image("assets/26.png")]
Для просмотра компьютеров и общих ресурсов в локальной сети используем `net view`.
#align(center)[#image("assets/27.png")]
Команды `net start` и `net stop` используются для управления службами Windows.
#align(center)[#image("assets/28.png")]
Для управления общими ресурсами используем команду `net share`.
#align(center)[#image("assets/29.png")]
Для демонстрации и настройки параметров сетевых служб Server и Workstation используем команды `net config server` и `net config workstation` соответственно.
#align(center)[#image("assets/30.png")]
#align(center)[#image("assets/31.png")]
#align(center)[#image("assets/32.png")]
Для демонстрации и управления сетевыми сессиями (т.е. соединения удаленных пользователей с компьютером) используем команду `net session`.
#align(center)[#image("assets/33.png")]
Для работы с локальными пользователями Windows используем команду `net user`.
#align(center)[#image("assets/34.png")]
#align(center)[#image("assets/35.png")]
Для демонстрации статистики работы сетевых служб Windows используем команду `net statistics`.
#align(center)[#image("assets/36.png")]
#align(center)[#image("assets/37.png")]
Для управления локальными группами пользователей в Windows используем команду `net localgroup`.
#align(center)[#image("assets/38.png")]
#align(center)[#image("assets/39.png")]
=== Скрипты.
Исходный код для `netcfg.cmd`:
```bat
@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
```
В начале пользователь выбирает вариант настройки:
#align(center)[#image("assets/40.png")]
При выборе DHCP пользователю предлагается выбрать имя интерфейса (по умолчанию Ethernet), а затем настройки устанавливаются автоматически.
#align(center)[#image("assets/41.png")]
При выборе опции Static происходит следующая настройка.
#align(center)[#image("assets/42.png")]
Аналогичные настройки можно произвести при помощи аргументов командной строки.
#align(center)[#image("assets/43.png")]
#align(center)[#image("assets/44.png")]
Исходный код для `netcfg.ps1`:
```powershell
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 '' -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){
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|дуплекс|скорост' }
$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
}
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
}
```
При запуске скрипта, пользователю предлагается выбрать одну из трех опций: DHCP, STATIC, INFO.
При выборе опции INFO пользователю предлагается выбрать имя интерфейса (по умолчанию Ethernet).
#align(center)[#image("assets/45.png")]
Пользователю, при помощи функции `ShowNicInfo`, находит указанный адаптер (`Get-NetAdapter`), затем его расширенные настройки (`Get-NetAdapterAdvancedProperty`) и выводит их через `Format-List`.
Если выбрать режим DHCP, то автоматически будут получены IP и DNS через DHCP. `Set-NetIPInterface -InterfaceAlias <name> -AddressFamily IPv4 -Dhcp Enabled` включает DHCP-клиент для IPv4 у выбранного интерфейса. `Set-DnsClientServerAddress -InterfaceAlias <name> -ResetServerAddresses` сбрасывает настройки DNS. `ipconfig /flushdns` очищает DNS-кэш.
#align(center)[#image("assets/46.png")]
Если же выбран режим STATIC, то производится ручная настройка сети. `Remove-NetIPAddress` удаляет старые IP-настройки интерфейса, чтобы не было конфликтов. `Set-DnsClientServerAddress -InterfaceAlias <name> -ResetServerAddresses` очищает предыдущие записи DNS. `New-NetIPAddress -InterfaceAlias <name> -IPAddress <ip> -PrefixLength <length> -DefaultGateway <gateway>` создаёт новую конфигурацию для IPv4. `Set-DnsClientServerAddress -InterfaceAlias <name> -ServerAddresses <dns1,dns2>` прописывает DNS-сервера вручную. `ipconfig /flushdns` сбрасывает DNS-кэш.
#align(center)[#image("assets/47.png")]
Аналогичную настройку можно произвести при помощи аргументов командной строки.
#align(center)[#image("assets/48.png")]
#align(center)[#image("assets/49.png")]
#align(center)[#image("assets/50.png")]
=== Ответы на вопросы
Как с помощью графической оболочки Windows можно запретить доступ через определенный сетевой интерфейс к ресурсам используемого компьютера? Как можно запретить используемому компьютеру доступ к ресурсам других компьютеров в сети Microsoft?
Чтобы запретить доступ через определённый сетевой интерфейс к ресурсам локального компьютера, необходимо отключить компонент File and Printer Sharing for Microsoft Networks в свойствах этого интерфейса
Чтобы запретить компьютеру обращаться к общим ресурсам других компьютеров, необходимо отключить компонент Client for Microsoft Networks.
Опишите назначение команды net с директивами use, view, stop, start, share, config, session, user, statistics, localgroup. Приведите примеры.
- `net use` подключение сетевых дисков или принтеров.
Пример: `net use Z: \\server\docs`
- `net view` просмотр доступных в сети компьютеров и их общих ресурсов.
Пример: `net view \\PC-NAME`
- `net start` запуск службы.
Пример: `net start spooler`
- `net stop` остановка службы.
Пример: `net stop spooler`
- `net share` управление общими папками и принтерами.
Пример: `net share docs=C:\Users\Public\Documents`
- `net config` параметры служб Workstation и Server.
Пример: `net config server`
- `net session` просмотр и управление сетевыми сессиями.
Пример: `net session \\192.168.1.5 /delete`
- `net user` управление локальными пользователями.
Пример: `net user student 12345 /add`
- `net statistics` статистика работы сетевых служб.
Пример: `net statistics workstation`
- `net localgroup` управление локальными группами пользователей.
Пример: `net localgroup Administrators student /add`
Как с помощью командной строки в Windows узнать адрес DNS, на который настроен ваш компьютер?
В командной строке можно выполнить:
```
ipconfig /all
```
В выводе будет раздел DNS Servers, где перечислены все настроенные DNS-адреса.
Зачем нужна команда net use? Как с помощью этой утилиты подключить на локальный диск R: папку TEST на компьютере SRV (приведите командную строку)?
`net use` используется для подключения сетевых ресурсов (папок и принтеров).
Пример для подключения:
```
net use R: \SRV\TEST
```
Как в Windows из PowerShell переименовать сетевое соединение?
Для переименования используется команда:
```powershell
Rename-NetAdapter -Name "old name" -NewName "new name"
```
Какие существуют и чем отличаются режимы работы адаптера (duplex)?
- Half-Duplex данные передаются только в одном направлении в каждый момент времени (либо приём, либо передача). Используется в старых сетях, более низкая производительность.
- Full-Duplex одновременная передача и приём данных. Современный стандарт, обеспечивает более высокую скорость.
- Auto-Negotiation автоматическое согласование режима (по умолчанию на большинстве адаптеров).
=== Вывод
В ходе работы я ознакомился с графическими и консольными средствами настройки сети в Windows. Были рассмотрены базовые сетевые утилиты (`ping`, `tracert`, `ipconfig`) и возможности системной команды `net` с её основными подкомандами. Также были реализованы скрипты для автоматической настройки сетевых интерфейсов через CMD и PowerShell.