# 실제 LAN IP (Docker/Hyper-V 172.17.x 등 가상 어댑터 제외) param( [string]$PreferredPrefix = '172.16.' ) $override = $env:EENE_LAN_IP if ($override) { Write-Output $override.Trim() exit 0 } function Test-PhysicalAdapter { param([int]$IfIndex) $adapter = Get-NetAdapter -InterfaceIndex $IfIndex -ErrorAction SilentlyContinue if (-not $adapter -or $adapter.Status -ne 'Up') { return $false } $desc = $adapter.InterfaceDescription if ($desc -match 'Virtual|Hyper-V|Docker|WSL|vEthernet|VMware|Loopback|TAP|TUN|VPN') { return $false } return $true } $candidates = Get-NetIPAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | Where-Object { $_.IPAddress -match '^(172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|10\.)' -and $_.IPAddress -notmatch '^169\.254\.' -and $_.IPAddress -notmatch '^172\.17\.' -and (Test-PhysicalAdapter -IfIndex $_.InterfaceIndex) } if (-not $candidates) { $candidates = Get-NetIPAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | Where-Object { $_.IPAddress -match '^(172\.|192\.168\.|10\.)' -and $_.IPAddress -notmatch '^169\.254\.' -and $_.IPAddress -notmatch '^172\.17\.' } } $ip = $candidates | Sort-Object @{ Expression = { if ($_.IPAddress -like "$PreferredPrefix*") { 0 } elseif ($_.IPAddress -match '^192\.168\.') { 1 } elseif ($_.IPAddress -match '^10\.') { 2 } else { 3 } } }, @{ Expression = { $_.PrefixLength } } | Select-Object -First 1 -ExpandProperty IPAddress if ($ip) { Write-Output $ip }