我ipconfig
可以显示网络适配器及其设置的列表,例如 IP 地址。
我正在寻找一个反向命令,显示给定 IP 地址的网络适配器的名称。
ipconfig
我尝试使用类似的命令过滤输出ipconfig | find "192.168.2.4"
,但适配器名称消失了。
我的输出ipconfig
是(棘手的部分似乎我在这里的一个适配器上有几个地址):
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::xxxx:xxxx:xxxx:xxxx%11
IPv4 Address. . . . . . . . . . . : 192.168.2.4
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IPv4 Address. . . . . . . . . . . : 192.168.178.20
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.178.1
192.168.2.1
Ethernet adapter VMware Network Adapter VMnet1:
...
答案1
如何显示给定 IP 地址的网络适配器的名称?
这个解决方案确实不是需要任何外部命令(pcre2grep
、sed
等)。
使用以下批处理文件(getname.cmd):
@echo off
setlocal
setlocal enabledelayedexpansion
set "_adapter="
set "_ip="
for /f "tokens=1* delims=:" %%g in ('ipconfig /all') do (
set "_tmp=%%~g"
if "!_tmp:adapter=!"=="!_tmp!" (
if not "!_tmp:IPv4 Address=!"=="!_tmp!" (
for %%i in (%%~h) do (
if not "%%~i"=="" set "_ip=%%~i"
)
set "_ip=!_ip:(Preferred)=!"
if "!_ip!"=="%1" (
@echo !_adapter!
)
)
) else (
set "_ip="
set "_adapter=!_tmp:*adapter =!"
)
)
endlocal
用法:
getname ipaddress
例子:
F:\test>getname 192.168.42.78
Local Area Connection 2
F:\test>
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- ipconfig- 配置IP(Internet协议配置)
答案2
你可以使用这个 PS 单行代码:
$addr='192.168.2.4'; get-wmiobject Win32_NetworkAdapterConfiguration |? {$_.ipaddress -contains $addr} |select Description |% {$_.Description}
要直接从命令行使用它:
powershell "$addr='192.168.2.4'; get-wmiobject Win32_NetworkAdapterConfiguration |? {$_.ipaddress -contains $addr} |select Description |% {$_.Description}"
或者如果你想重复使用它,请将其放入脚本中并将地址作为参数
编辑:获取 Win/Ipconfig 中显示的名称:
$addr='192.168.2.4';
$netconf = get-wmiobject Win32_NetworkAdapterConfiguration |? {$_.ipaddress -contains $addr};
$netconf |% {$_.GetRelated("win32_NetworkAdapter")} | select NetConnectionID |%{$_.NetConnectionID}
(分配给中间变量只是为了使其更易读一些)
答案3
我正在寻找一个反向命令,显示给定 IP 地址的网络适配器的名称。
根据我尝试的所有方法,这应该可行,似乎您说您需要仅从您在示例中已指定的 IP 地址获取此信息。
交互式输入 IP 地址以获取网络连接名称
(使用WMIC
一些批处理FOR
循环token
和delim
解析来获取指定 IP 地址的网络连接名称。)
(结果值将回显到命令窗口和消息框窗口。这都是批处理脚本,但动态构建了一些 VBS 脚本函数,以简化任何需要的人的流程。)
@ECHO ON
:SetTempFiles
SET tmpIPaddr=%tmp%\~tmpipaddress.vbs
SET tmpNetConName1=%tmp%\~tmpNetConName1.txt
SET tmpNetConName2=%tmp%\~tmpNetConName2.txt
SET tmpBatFile=%tmp%\~tmpBatch.cmd
SET tmpVBNetCon=%tmp%\~tmpVBNetCon.vbs
IF EXIST "%tmpIPaddr%" DEL /F /Q "%tmpIPaddr%"
IF EXIST "%tmpNetConName1%" DEL /Q /F "%tmpNetConName1%"
IF EXIST "%tmpNetConName2%" DEL /Q /F "%tmpNetConName2%"
IF EXIST "%tmpBatFile%" DEL /Q /F "%tmpBatFile%"
IF EXIST "%tmpVBNetCon%" DEL /Q /F "%tmpVBNetCon%"
:InputBox
SET msgboxTitle=IP ADDRESS
SET msgboxLine1=Enter the IP address to get its Windows connection name
>"%tmpIPaddr%" ECHO wsh.echo inputbox("%msgboxLine1%","%msgboxTitle%")
FOR /F "tokens=*" %%N IN ('cscript //nologo "%tmpIPaddr%"') DO CALL :setvariables %%N
GOTO EOF
:setvariables
SET IPAddress=%~1
FOR /F "USEBACKQ TOKENS=3 DELIMS=," %%A IN (`"WMIC NICCONFIG GET IPADDRESS,MACADDRESS /FORMAT:CSV | FIND /I "%IPAddress%""`) DO (SET MACAddress=%%~A)
FOR /F "USEBACKQ TOKENS=3 DELIMS=," %%B IN (`"WMIC NIC GET MACADDRESS,NETCONNECTIONID /FORMAT:CSV | FIND /I "%MACAddress%""`) DO ECHO(%%~B>>"%tmpNetConName1%"
::: Parse Empty Lines
FINDSTR "." "%tmpNetConName1%">"%tmpNetConName2%"
::: Build Dynamic Batch with ECHO'd Network Connection Value
FOR /F "tokens=*" %%C IN (%tmpNetConName2%) DO ECHO ECHO %%~C>>"%tmpBatFile%"
IF NOT EXIST "%tmpBatFile%" GOTO :NullExit
START "" "%tmpBatFile%"
::: Build Dynamic VBS with Message Box Network Connection Value
FOR /F "tokens=*" %%C IN (%tmpNetConName2%) DO (SET vbNetconName=%%~C)
ECHO msgbox "%vbNetconName%",0,"%vbNetconName%">"%tmpVBNetCon%"
START /B "" "%tmpVBNetCon%"
EXIT /B
:NullExit
ECHO msgbox "Cannot find MAC Address, check to confirm IP Address was correct.",0,"Invalid IP">"%tmpVBNetCon%"
START /B "" "%tmpVBNetCon%"
EXIT /B
全部单行
仅限本机 Windows,使用 NETSH 所有接口(所有 IPv4 地址)
NETSH INT IP SHOW CONFIG | FINDSTR /R "Configuration for interface.* Address.*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
本机 Windows 仅适用于 IPCONFIG 所有接口(所有 IPv4 地址)
IPCONFIG | FINDSTR /R "Ethernet* Address.*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
使用 PCRE2GREP (@SalvoF)
指定单个 IP 地址
netsh interface ipv4 show address | pcre2grep -B2 "192\.168\.2\.4" | FIND /V "DHCP"
查找所有 IP 地址
netsh interface ip show config | pcre2grep -B2 ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$ | FIND /V "DHCP" | FIND /V "Gate" | FIND /V "Metric" | FIND /V "Subnet"
查找所有 IP 地址 (清理正则表达式 (根据@SalvoF))
netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"
请注意,pcre2grep
我尝试的是@SalvoF[+1]
建议的,但使用....FIND /V
删除上面包含的行DHCP
似乎可以得到您描述的所需输出。我也使用了NETSH
而不是IPCONFIG
。
答案4
为了更准确,按照OP的例子,我会使用sed
,它可以在\usr\local\wbin
文件夹下找到这个压缩文件(UnxUtils 项目)。
ipconfig | sed -rn "/^[A-Z]/h;/192.168.2.4/{g;s/.* adapter (.*):/\1/p;}"
-n
抑制不匹配的行;第一个模式找到以大写字母开头的任何行,然后h
将其放在保留空间中;第二个匹配是所需的 IP 号码:此时,调用包含接口名称的行 ( g
),删除多余的前导文本 ( s
),并打印 ( p
)。