我正在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%
这个脚本给出主机名/计算机名。
请帮助我获得网络接口名称。
非常感谢。你好啊,叶什维德
发布于 2016-11-28 10:35:21
这将为您提供网络接口名称:
@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
发布于 2016-11-28 12:12:52
如果要根据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
,因为我在WMIC
方面没有多少经验,但在您的情况下,netsh
就足够了。
注意,SetLocal EnableDelayedExpansion
非常重要,因为这个脚本是基于检查ERRORLEVEL
的。cmd-解析器将用()
分隔的每一个命令块解析为一个命令,就好像它写在一行(在我们的例子中是FOR ... ( ... )
)一样。因此,除非使用延迟展开,否则不可能在()
中使用其更新值的更改变量。如果没有,则只能使用输入块之前的值。由于ERRORLEVEL
可以在每次迭代中更改(如果上面的findstr
在接口地址中找到了IP地址,则为0),所以我们总是需要更新的值。这也是为什么我使用!ERRORLEVEL!
而不是传统的%ERRORLEVEL%
。
有关EnableDelayedExtension
的更多信息可以找到这里。
使用set ownIP=127.0.0.1
运行上面的脚本(不要忘记更改到您的IP)将得到以下结果:
>search_interface.bat
IP-address 127.0.0.1 from interface Loopback Pseudo-Interface 1
如果您希望每次调用脚本时都将IP地址作为参数传递,请使用set ownIP=%~1
(但是,如果在这种情况下传递了参数,请不要忘记添加检查)。
希望能帮上忙。
祝好运!
https://stackoverflow.com/questions/40840400
复制相似问题