wake-up-neo.com

Befehl zum Suchen der Netzwerkschnittstelle für IP

Mit ipconfig kann ich die Liste der Netzwerkadapter und deren Einstellungen anzeigen, z. die IP-Adresse.

Ich suche nach einem umgekehrten Befehl, der den Namen des Netzwerkadapters für eine bestimmte IP-Adresse anzeigt.

Ich habe versucht, die Ausgabe von ipconfig mit einem Befehl wie ipconfig | find "192.168.2.4" zu filtern, aber dann ist der Adaptername weg.

Meine Ausgabe von ipconfig ist (der schwierige Teil scheint, dass ich hier mehrere Adressen auf einem Adapter habe):

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:
...
11
Thomas Weller

Wie zeige ich den Namen eines Netzwerkadapters für eine bestimmte IP-Adresse an?

Diese Lösung benötigt keine externen Befehle (pcre2grep, sed, etc).

Verwenden Sie die folgende Batchdatei (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

Verwendungszweck:

getname ipaddress

Beispiel:

F:\test>getname 192.168.42.78
Local Area Connection 2
F:\test>

Weitere Lektüre

8
DavidPostill

Du könntest diesen PS one Liner verwenden:

$addr='192.168.2.4'; get-wmiobject Win32_NetworkAdapterConfiguration |? {$_.ipaddress -contains $addr} |select Description |% {$_.Description}

So verwenden Sie es direkt über die Befehlszeile:

powershell "$addr='192.168.2.4'; get-wmiobject Win32_NetworkAdapterConfiguration |? {$_.ipaddress -contains $addr} |select Description |% {$_.Description}"

oder wenn Sie es wiederverwenden möchten, setzen Sie es in ein Skript und machen Sie die Adresse zu einem Parameter

Bearbeiten: um einen Namen zu erhalten, wie er in Win/Ipconfig angezeigt wird:

$addr='192.168.2.4'; 
$netconf = get-wmiobject Win32_NetworkAdapterConfiguration |? {$_.ipaddress -contains $addr};
$netconf |% {$_.GetRelated("win32_NetworkAdapter")} | select NetConnectionID |%{$_.NetConnectionID}

(Die Zuordnung zu Zwischenvariablen dient nur dazu, die Lesbarkeit zu verbessern.)

6
wmz

Ich suche nach einem umgekehrten Befehl, der den Namen des Netzwerkadapters für eine bestimmte IP-Adresse anzeigt.

Basierend auf allem, was ich versucht habe, sollte dies funktionieren. Anscheinend müssen Sie diese Informationen NUR von der IP-Adresse beziehen, die Sie in Ihrem Beispiel bereits angegeben haben.

INTERACTIVE-Eingabeaufforderung für IP-Adresse zum Abrufen des Netzwerkverbindungsnamens

(Verwenden Sie WMIC und eine Batch-Analyse von FOR loop token und delim, um den Netzwerkverbindungsnamen für eine angegebene IP-Adresse abzurufen.)

(Der Ergebniswert wird in einem Befehlsfenster und einem Meldungsfenster angezeigt. Es handelt sich um ein Batch-Skript, das jedoch dynamisch einige VBS-Skriptfunktionen erstellt, um den Prozess für alle Benutzer zu vereinfachen.)

@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

Alle Einzeiler

NATIVE WINDOWS NUR MIT NETSH ALLE SCHNITTSTELLEN (ALLE IPv4-ADRESSEN)

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]*"

enter image description here

NATIVE WINDOWS NUR MIT IPCONFIG ALLE SCHNITTSTELLEN (ALLE IPv4-ADRESSEN)

IPCONFIG | FINDSTR /R "Ethernet* Address.*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"

enter image description here


PCRE2GREP VERWENDEN (per @SalvoF)

EINZELNE IP-ADRESSE ANGEGEBEN

netsh interface ipv4 show address | pcre2grep -B2 "192\.168\.2\.4" | FIND /V "DHCP"

ALLE IP-ADRESSEN FINDEN

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"

ALLE IP-ADRESSEN FINDEN (Cleaned Up Regex (per @SalvoF))

netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"

Bitte beachten Sie, dass der pcre2grep, den ich ausprobiert habe, dem @SalvoF [+1] entspricht, wie er vorgeschlagen hat. Wenn Sie jedoch den .... FIND /V verwenden, um die obige Zeile mit DHCP zu entfernen, wird die von Ihnen beschriebene Ausgabe angezeigt. Ich habe NETSH und nicht IPCONFIG verwendet.

4
Pimp Juice IT

Um genauer zu sein, würde ich nach dem Beispiel von OP sed verwenden, das sich im Ordner \usr\local\wbin von this zipped file (UnxUtils project) befindet.

ipconfig | sed -rn "/^[A-Z]/h;/192.168.2.4/{g;s/.* adapter (.*):/\1/p;}"

-n unterdrückt nicht übereinstimmende Zeilen; Das erste Muster findet eine Zeile, die mit einem Großbuchstaben beginnt. Dann legt h die Zeile in der Warteschleife ab. Die zweite Übereinstimmung bezieht sich auf die gewünschte IP-Nummer: An diesem Punkt wird der Name der Schnittstelle für die Zeilenhaltung abgerufen (g), zusätzlicher führender Text entfernt (s) und gedruckt (p).

3
SΛLVΘ

Nur zur Veranschaulichung, hier ist eine andere Batch-Lösung, die die verzögerte Erweiterung der Systemvariablen %ERRORLEVEL% ausnutzt:

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%L in ('ipconfig') do (
    echo %%L | findstr /r "^[A-Z]" 1>NUL
    if !errorlevel! == 0 set "_int=%%L"
    echo %%L | findstr /c:%1 1>NUL
    if !errorlevel! == 0 (
       set "_int=!_int::=!"
       echo !_int:* adapter =!
       goto:eof
    )
)

Es kann folgendermaßen aufgerufen werden: find_int.cmd 192.168.1.100

2
SΛLVΘ

Vielen Dank für die Mühe an alle. Es scheint, dass es mehrere Hürden gibt:

  • die Anzahl der einem Adapter zugewiesenen IP-Adressen
  • die Sprache des Betriebssystems

Das -Bx- und Regex-Zeug scheint leicht zu brechen, also habe ich nach etwas gegoogelt, das ich selbst implementieren könnte, und mir das folgende C # -Programm ausgedacht, das die IP-Adresse als Parameter (IP2Adapter <IP>) verwendet:

using System;
using System.Net.NetworkInformation;
using System.Net.Sockets;

namespace IP2Adapter
{
    class Program
    {
        static void Main(string[] args)
        {
            var adapters = NetworkInterface.GetAllNetworkInterfaces();
            foreach (var adapter in adapters)
            {
                var ipProps = adapter.GetIPProperties();
                foreach (var ip in ipProps.UnicastAddresses)
                {
                    if ((adapter.OperationalStatus == OperationalStatus.Up)
                        && (ip.Address.AddressFamily == AddressFamily.InterNetwork))
                    {
                        if (ip.Address.ToString() == args[0])
                        Console.Out.WriteLine(adapter.Name);
                    }
                }
            }
        }
    }
}
1
Thomas Weller

Unter Windows 10 Powershell kann dies folgendermaßen erreicht werden:

Get-NetIPAddress -IPAddress '192.168.2.4' | %{$_.InterfaceAlias};

Dies ergibt ein Ergebnis wie Wi-Fi.

Wobei Sie InterfaceAlias für jede andere Objekteigenschaft einsetzen können.

Um alle Eigenschaften abzurufen, lassen Sie einfach die Pipes weg und führen Sie Folgendes aus: Get-NetIPAddress -IPAddress '192.168.2.4'.

Andere netzwerkadapterbezogene Eigenschaften (wie z. B. Beschreibung) können normalerweise basierend auf InterfaceAlias oder InterfaceIndex abgefragt werden, z.

Get-NetAdapter -InterfaceAlias Wi-Fi | %{$_.InterfaceDescription};

Welche geben so etwas wie: Intel(R) Dual Band Wireless-AC 8265.

Lesen Sie mehr in den Dokumenten: https://docs.Microsoft.com/en-us/powershell/module/nettcpip/get-netipaddress?view=win10-ps

0
MrMeszaros