Za pomocą ipconfig
mogę wyświetlić listę kart sieciowych i ich ustawień, np. Adres IP.
Szukam polecenia odwrotnego, które wyświetla nazwę karty sieciowej dla danego adresu IP.
Próbowałem filtrować dane wyjściowe ipconfig
za pomocą polecenia typu „ ipconfig | find "192.168.2.4"
ale”, ale nazwa adaptera zniknęła.
Moje dane wyjściowe ipconfig
to (podstępna część wydaje się, że mam tutaj kilka adresów na jednym adapterze):
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:
...
windows
networking
ip
batch-file
ip-address
Thomas Weller
źródło
źródło
Odpowiedzi:
Jak wyświetlić nazwę karty sieciowej dla danego adresu IP?
Rozwiązanie to nie wymaga żadnych zewnętrznych poleceń (
pcre2grep
,sed
itp).Użyj następującego pliku wsadowego (getname.cmd):
Stosowanie:
Przykład:
Dalsza lektura
źródło
goto
,for
,if
, funkcje, makra ... co więcej trzeba? ;)Możesz użyć tej wkładki PS one:
Aby użyć go bezpośrednio z wiersza poleceń:
lub jeśli chcesz go ponownie użyć, umieść go w skrypcie i ustaw adres jako parametr
Edytuj: aby uzyskać nazwę wyświetlaną w Win / Ipconfig:
(przypisanie do zmiennych pośrednich ma jedynie na celu uczynienie go nieco bardziej czytelnym)
źródło
$powershell
jest jednak niezdefiniowany, uruchamiam te polecenia za pomocąpowershell -c
wiersza polecenia. W wierszu poleceń PS działa również 1. linia jednoliniowa.powershell "$ip = '192.168.2.4';foreach($int in (gwmi Win32_NetworkAdapter)) {gwmi Win32_NetworkAdapterConfiguration -Filter """Index = $($int.index)""" | ? {$_.IPAddress -contains $ip} | % {$int.NetConnectionID} }"
GetRelated
coAssociators of
nieco ułatwia metody.W oparciu o wszystko, co próbowałem, powinno to działać. Wydaje się, że musisz uzyskać te informacje TYLKO z adresu IP, który już podałeś w swoim przykładzie.
INTERAKTYWNY PYTANIE O ADRES IP, ABY UZYSKAĆ NAZWĘ POŁĄCZENIA SIECIOWEGO
(Użyj
WMIC
i trochęFOR
pętli wsadowejtoken
idelim
parsowania, aby uzyskać nazwę połączenia sieciowego dla określonego adresu IP).(Wartość wyniku zostanie wyświetlona w oknie poleceń i oknie komunikatu. Jest to skrypt wsadowy, ale dynamicznie buduje niektóre funkcje skryptu VBS, aby uprościć proces każdemu, kto potrzebuje.)
WSZYSTKIE JEDNORAZOWE
NATIVE WINDOWS TYLKO Z NETSH WSZYSTKIMI INTERFEJSAMI (WSZYSTKIE ADRESY IPv4)
NATIVE WINDOWS TYLKO Z IPCONFIG WSZYSTKIMI INTERFEJSAMI (WSZYSTKIE ADRESY IPv4)
KORZYSTANIE Z PCRE2GREP (na @SalvoF)
OKREŚLONY JEDEN ADRES IP
ZNAJDŹ WSZYSTKIE ADRESY IP
ZNAJDŹ WSZYSTKIE ADRESY IP (Oczyszczony Regex (według @SalvoF))
Zauważ,
pcre2grep
że próbowałem jest według @SalvoF,[+1]
jak sugerował, ale użycie ....,FIND /V
aby usunąć powyższą linię,DHCP
wydaje się otrzymywać pożądane wyjście, jak opisano. UżyłemNETSH
raczej niżIPCONFIG
również.źródło
netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"
(Trochę wyczyściłem regex). Dużo się uczę w tym miejscu!Aby być bardziej dokładnym, podążając za przykładem OP, użyłbym
sed
, który można znaleźć w\usr\local\wbin
folderze tego skompresowanego pliku (projekt UnxUtils).-n
pomija niepasujące linie; pierwszy wzór znajduje dowolną linię rozpoczynającą się od dużej litery, a następnieh
odkłada ją na miejsce; drugie dopasowanie dotyczy żądanego numeru IP: w tym momencie przywoływana jest nazwa interfejsu wiersza (g
), usuwany jest dodatkowy wiodący tekst (s
) i drukowany (p
).źródło
-B4
prawie działa, po prostu zostawia mi prefiks „adapter Ethernet”, który nie należy do nazwy adaptera + 4 wiersze niepowiązanego wyjścia. Ale przesłanie jest jasne: znajdź narzędzie, które to zrobi :-)ipconfig
dane wyjściowe? (Ukryj lub zmień dane w celu zachowania prywatności)sed
; być może twoje rozwiązanie może zostać zmodyfikowane, aby osiągnąć ten cel.| sed -rn "s/^.* adapter (.*):/\1/p"
Dla przypomnienia, oto inne rozwiązanie wsadowe, które wykorzystuje opóźnione rozszerzenie
%ERRORLEVEL%
zmiennej systemowej:Można go wywołać w ten sposób:
find_int.cmd 192.168.1.100
źródło
sed
jednowierszowy, pozostawiając nazwę interfejsu jako jedyne wyjście. Oczywiście możesz również napisać prosty plik wsadowy, podając adres IP nr. jako argument (%1
).Dzięki za wysiłek wszystkim. Wydaje się, że istnieje kilka przeszkód:
Wszystkie
-Bx
rzeczy i Regex wydają się łatwo psować, więc poszukałem czegoś, co mógłbym zaimplementować i wymyśliłem następujący program C #, który przyjmuje adres IP jako parametr (IP2Adapter <IP>
):źródło
W systemie Windows 10 Powershell można to osiągnąć za pomocą:
To da wynik taki jak
Wi-Fi
.Gdzie możesz zastąpić
InterfaceAlias
dowolną inną właściwość obiektu.Aby uzyskać wszystkie właściwości, po prostu pominąć rur i uruchom:
Get-NetIPAddress -IPAddress '192.168.2.4'
.Inne właściwości związane z kartą sieciową (takie jak Opis) można zwykle przeszukiwać na podstawie
InterfaceAlias
lubInterfaceIndex
np .:Które dadzą coś takiego:
Intel(R) Dual Band Wireless-AC 8265
.Przeczytaj więcej na temat dokumentów: https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-netipaddress?view=win10-ps
źródło