目次
Windows Server / ClientでLLDPを使用する方法。
各バージョンのLLDPサポート状況を公開情報から収集した結果は以下の通り。
| Windows XP | 非対応 |
| Windows Vista | 非対応 |
| Windows 7 | 非対応 |
| Windows 8 | 対応(未確認) |
| Windows 10 | 対応 |
| Windows 11 | 対応 |
| Windows Server 2003 | 非対応 |
| Windows Server 2008 | 非対応 |
| Windows Server 2012 | 対応 |
| Windows Server 2016 | 対応 |
| Windows Server 2019 | 対応 |
| Windows Server 2022 | 対応 |
| Windows Server 2025 | 対応 |
尚、Windows Vista以降に搭載されたLLTD(Link Layer Topology Discovery)は似て非なるものであるため、LLDPとは互換性が無い。
OS標準の機能としてLLDPが実装されており、ネットワークのプロパティから有効/無効を切り替えられる。
しかし、周囲に送信する情報量が少なく、情報の種類を選択することもできないため使い勝手はかなり悪い。
Windows用のオープンソースLLDPサービス。
動作させるためには、別途パケットキャプチャライブラリが必要。
以下の順番にインストールと設定を行う。
ファイルの保管場所:C:\Program Files\WinLLDPService\ ファイル名:Configuration.default.ps1 上記ファイルを以下の名称でコピーする「Configuration.ps1」
# See homepage for configuration details
$config = New-Object WinLLDPService.Configuration
$config.PortDescription.Add("")
$config.SystemDescription.Add("")
#$config.SystemName.Clear()
#$config.SystemName.Add("")
#$config.Separator = "|"
# Must always return WinLLDPService.Configuration object
Return $config設定ファイルの以下の箇所に任意の文字列を設定することで、情報を付加することが可能。
| $config.PortDescription.Add("") | PortDescriptionに付加する文字列の指定 |
| $config.SystemDescription.Add("") | SystemDescriptionに付加する文字列の指定 |
| $config.SystemName.Add("") | SystemNameに付加する文字列の指定 |
| $config.Separator = "," | 付加文字列のセパレータに使用する記号の指定 |
SystemDescriptinoにOSバージョンを設定。
PortNameにIPアドレスとMACアドレスを設定。
# See homepage for configuration details
$config = New-Object WinLLDPService.Configuration
# Port Description
$adapters = Get-WmiObject Win32_NetworkAdapter `
| Where-Object { $_.NetEnabled -eq $true -and $_.PhysicalAdapter -eq $true }
if (-not $adapters) {
$adapters = Get-WmiObject Win32_NetworkAdapter | Where-Object { $_.NetEnabled -eq $true }
}
$ipConfigs = Get-WmiObject Win32_NetworkAdapterConfiguration |
Where-Object { $_.IPEnabled -eq $true }
foreach ($nic in $adapters) {
# Interface Name
$name = $nic.NetConnectionID
if (-not $name) { $name = $nic.Name }
# MAC Address
$mac = $nic.MACAddress -replace '-', ':'
# IP Address
$cfg = $ipConfigs | Where-Object { $_.Index -eq $nic.Index } | Select-Object -First 1
$ipv4 = $null
if ($cfg -and $cfg.IPAddress) {
$ipv4 = ($cfg.IPAddress |
Where-Object { $_ -match '^\d{1,3}(\.\d{1,3}){3}$' } |
Select-Object -First 1)
}
$ipPart = ""
if ($ipv4) {
$ipPart = " IP=$ipv4"
}
# Output
$config.PortDescription.Clear()
$config.PortDescription.Add("MAC=$mac,$ipPart")
}
# System Description
$os = Get-WmiObject Win32_OperatingSystem
$osCaption = $os.Caption # 例: "Microsoft Windows Server 2022 Datacenter"
$osVersion = $os.Version # 例: "10.0.20348"
$osBuild = $os.BuildNumber # 例: "20348"
$cpuInfo = (Get-WmiObject Win32_Processor)[0].Name
$config.SystemDescription.Clear()
$config.SystemDescription.Add("$osCaption (Version $osVersion, Build $osBuild)")
# System Name
$config.SystemName.Clear()
$config.SystemName.Add($env:COMPUTERNAME)
# Separator Setting
$config.Separator = ","
# Must always return WinLLDPService.Configuration object
Return $config上記のスクリプトを以下のコマンドで動作確認する。
Add-Type -Path 'C:\Program Files\WinLLDPService\LLDPBase.dll' . 'C:\Program Files\WinLLDPService\Configuration.ps1'
以下のような出力が得られれば正常に動作している。
Separator : ,
ChassisType : MacAddress
PortDescription : MAC=70:85:C2:18:14:3E IP=172.16.1.24}
SystemName : {WINSRV-2022-DC}
SystemDescription : {Microsoft Windows Server 2022 Datacenter (Version 10.0.20348, Build 20348)}
Packet sent failed: System.AggregateException: 1 つ以上のエラーが発生しました。 ---> WinLLDPService.PowerShellConfiguratorException: Configuration file error: このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\WinLLDPService\Configuration.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 場所 WinLLDPService.PowerShellConfigurator.<LoadConfiguration>d__3.MoveNext() --- 内部例外スタック トレースの終わり --- 場所 System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) 場所 WinLLDPService.WinLLDP.Run() 場所 WinLLDPService.WinLLDPService.SendPacket(Object source, ElapsedEventArgs ea) ---> (内部例外 #0) WinLLDPService.PowerShellConfiguratorException: Configuration file error: このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\WinLLDPService\Configuration.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 場所 WinLLDPService.PowerShellConfigurator.<LoadConfiguration>d__3.MoveNext()<---
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
Packet sent failed: System.AggregateException: 1 つ以上のエラーが発生しました。 ---> WinLLDPService.PowerShellConfiguratorException: Configuration file error: ファイル C:\Program Files\WinLLDPService\Configuration.ps1 を読み込めません。ファイル C:\Program Files\WinLLDPService\Configuration.ps1 はデジタル署名されていません。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 場所 WinLLDPService.PowerShellConfigurator.<LoadConfiguration>d__3.MoveNext() --- 内部例外スタック トレースの終わり --- 場所 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) 場所 WinLLDPService.WinLLDP.Run() 場所 WinLLDPService.WinLLDPService.SendPacket(Object source, ElapsedEventArgs ea) ---> (内部例外 #0) WinLLDPService.PowerShellConfiguratorException: Configuration file error: ファイル C:\Program Files\WinLLDPService\Configuration.ps1 を読み込めません。ファイル C:\Program Files\WinLLDPService\Configuration.ps1 はデジタル署名されていません。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 場所 WinLLDPService.PowerShellConfigurator.<LoadConfiguration>d__3.MoveNext()<---
ドイツ製のWindows向けLLDPサービス。
サービス本体の他にLLDP受信結果を閲覧できるビューワが付属する。
1. インストーラをダウンロード(lldp[ver].exe)
2. インストーラを実行
3. サービスに「LLDP Agent」が登録され、自動起動する