我在windows上工作并希望得到网络接口名称,无论是eth0,eth1,eth2等等。我写了java程序并通过传递主机/计算机名称我可以找到ip地址,然后基于ip地址我可以找到网络接口名称。代码如下:
public static String getNetworkInterface() {
try {
String computerHostName = "dummy";
if(!computerHostName.equals("Unknown Computer")) {
InetAddress address = InetAddress.getByName(computerHostName);
return NetworkInterface.getByInetAddress(address).getName();
}
else {
return null;
}
}
catch (SocketException e) {
e.printStackTrace();
}
catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
上述方法返回的值类似于eth0 / eth1 / eth2等。
我希望在Windows上使用批处理脚本实现同样的功能。我编写了以下脚本,提供主机名和IP地址。但我不知道如何获取网络接口名称。
for /f "skip=1 delims=" %%A in (
'wmic computersystem get name'
) do for /f "delims=" %%B in ("%%A") do set "compName=%%A"
echo hostname is %compName%
此脚本提供主机名/计算机名。
请帮我获取网络接口名称。
非常感谢。 问候, Yeshwant
答案 0 :(得分:1)
这应该为您提供网络接口名称:
@Echo Off
For /F "Skip=1Delims=" %%a In (
'"WMIC NIC Where (Not NetConnectionStatus Is Null) Get NetConnectionID"'
) Do For /F "Tokens=*" %%b In ("%%a") Do Echo=%%b
Timeout -1
答案 1 :(得分:1)
如果您想根据可以使用的IP地址找到网络接口:
@echo off
SetLocal EnableDelayedExpansion
set ownIP=W.X.Y.Z
set netifc=
FOR /F "tokens=4*" %%G IN ('netsh interface ipv4 show interfaces ^| findstr /I "[^a-zA-Z]connected"') DO (
REM set /P =interface %%G is connected < nul >> !progress!
netsh interface ipv4 show addresses "%%H" | findstr /c "%ownIP%" > nul 2>&1
IF !ERRORLEVEL! EQU 0 (
set netifc=%%H
)
)
:outLoop
echo IP-address %ownIP% from interface %netifc%
EndLocal
exit /b 0
我使用netsh
代替WMIC
,因为我在[{1}}中没有多少经验,但WMIC
就足够了。
请注意,netsh
非常重要,因为此脚本基于检查SetLocal EnableDelayedExpansion
。 cmd-parser将用ERRORLEVEL
分隔的每个命令块解析为一个单独的命令,就像它写在一行上一样(在我们的例子中是()
)。因此,除非您使用延迟扩展,否则无法在FOR ... ( ... )
内使用更新后的变量值。如果您不这样做,则只能使用输入块之前的值。由于()
可以在每次迭代中发生变化(如果在接口地址上方的ERRORLEVEL
找到了IP地址,则为0;如果没有,则为1),我们总是需要更新的价值。这也是我使用findstr
代替经典!ERRORLEVEL!
的原因
有关%ERRORLEVEL%
的更多信息,请访问here。
使用EnableDelayedExtension
运行上面的脚本(不要忘记更改为您的IP)会得到以下结果:
set ownIP=127.0.0.1
如果您希望每次调用脚本时都将IP地址作为参数传递,请使用>search_interface.bat
IP-address 127.0.0.1 from interface Loopback Pseudo-Interface 1
(但不要忘记添加检查是否已通过参数在那种情况下)。
希望它有所帮助。
祝你好运!