IP için ağ arabirimini bulma komutu


14

İle ipconfigağ bağdaştırıcılarının listesini ve ayarlarını gösterebilirim, örneğin IP adresi.

Belirli bir IP adresi için ağ bağdaştırıcısının adını gösteren bir ters komut arıyorum.

ipconfigGibi bir komut ile çıkışını filtreleme denedim ipconfig | find "192.168.2.4"ama sonra adaptör adı gitti.

Benim çıktı ipconfig(zor kısmı burada bir adaptör üzerinde birkaç adres var gibi görünüyor):

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:
...

Belirli bir yerel adres için mi, yoksa belirli bir uzak adrese ulaşmak için hangi arabirim yönlendirmesinin kullandığını öğrenmek için?
Ben Voigt

@BenVoigt: bir ağ arabirimine atanmış bir adrestir, bu nedenle sonuç yalnızca bir bağdaştırıcı olmalıdır. Yönlendirme ile ilgili olsaydı, sonuç birçok adaptör olabilir (potansiyel olarak farklı metriklerle).
Thomas Weller

Yanıtlar:


8

Belirli bir IP adresi için ağ bağdaştırıcısının adını nasıl görüntülerim?

Bu çözüm yok değil (herhangi bir harici komutları gerektiren pcre2grep, sedvs.).

Aşağıdaki toplu iş dosyasını kullanın (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

Kullanımı:

getname ipaddress

Misal:

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

Daha fazla okuma


1
Bu ilginç David ... neredeyse programlama! Fikriniz beni düşündürdü, toplu çözümümü
gönderiyorum

3
It @SalvoF edilir programlama. Toplu değişkenler vardır goto, for, if, fonksiyonlar, makrolar ... devamını gerekmez ne? ;)
DavidPostill

Ağ yapılandırmama ne olduğunu merak edene kadar bunu bilmiyordum :-)
Thomas Weller

@ThomasWeller Nasıl olduğunu henüz biliyor musunuz ?
DavidPostill

Tam olarak değil. 2 DSL hattımı kurduğumda kesinlikle oldu. 2 adet DSL modemim var. DCHP ile yarıştılar, bu yüzden sabit bir adres oluşturdum. Ancak bu sadece bir DSL modem kullandı, ikincisini yok saydı. Bazı meslektaşlar, 2 sabit adres ayarlayarak 2 modem için çalışmasını sağladı. O zamandan beri, bazı toplu iş dosyalarım (ve diğer şeyler) beklendiği gibi çalışmıyor. Dolayısıyla soru.
Thomas Weller

6

Bu PS bir astarı kullanabilirsiniz:

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

Doğrudan komut satırından kullanmak için:

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

ya da yeniden kullanmak isterseniz bir betiğe koyun ve adresi bir parametre yapın

Düzenleme: Win / Ipconfig'de gösterildiği gibi bir ad almak için:

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

(aracı değişkenlere atama sadece onu biraz daha okunabilir yapmak içindir)


Bu harika ve HW adını döndürüyor. Sistemimde $powershelltanımsız olsa da, bu komutları powershell -ckomut isteminden başlatırım . PS komut satırında 1. bir astar da çalışır.
SΛLVΘ

1
@ThomasWeller, aslında sorunuz başına ağ bağdaştırıcınızın adıdır. Ama kontrol edeyim, mantıksal ad da elde edilebilir olmalı
wmz

2
Başka bir masada @wmz. PS yine de powershell "$ip = '192.168.2.4';foreach($int in (gwmi Win32_NetworkAdapter)) {gwmi Win32_NetworkAdapterConfiguration -Filter """Index = $($int.index)""" | ? {$_.IPAddress -contains $ip} | % {$int.NetConnectionID} }"
sallıyor

1
@ThomasWeller Düzenlememi kontrol et. Düşündüğümden daha zor! Neyse ki PS GetRelatedhangi Associators ofyöntemleri biraz kolaylaştırır destekler .
wmz

1
@SalvoF Yup buldum
wmz

4

Belirli bir IP adresi için ağ bağdaştırıcısının adını gösteren bir ters komut arıyorum.

Denediğim her şeye dayanarak, bu çalışmanın SADECE örneğinizde zaten belirttiğiniz IP adresinden almanız gerektiğini söylüyorsunuz.

AĞ BAĞLANTI ADI ALMAK İÇİN IP ADRESİ İÇİN ETKİLEŞİMLİ İSTEM

( Belirli bir IP adresi için ağ bağlantısı adını almak üzere WMICve bazı toplu FORdöngü tokenve delimayrıştırma kullanın.)

(Sonuç değeri bir komut penceresi ve bir mesaj kutusu penceresine yankılanacaktır. Tüm toplu komut dosyasıdır, ancak ihtiyacı olan herkes için işlemi basitleştirmek için dinamik olarak bazı VBS komut dosyası işlevleri oluşturur.)

@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

TÜM TEK KAT

YALNIZCA TÜM ARAYÜZLERLE YERLİ PENCERELER (TÜM IPv4 ADRESLERİ)

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

resim açıklamasını buraya girin

YALNIZCA IPCONFIG TÜM ARAYÜZLERLE (TÜM IPv4 ADRESLERİ) YERLİ PENCERELER

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

resim açıklamasını buraya girin


PCRE2GREP KULLANMA (@SalvoF başına)

TEKLİ IP ADRESİ BELİRTİLDİ

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

TÜM IP ADRESLERİNİ BUL

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"

TÜM IP ADRESLERİNİ BUL (Temizlenmiş Normal İfade (@SalvoF başına))

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

pcre2grepBen denedim [+1]o önerildiği gibi @SalvoF başına olduğunu unutmayın ama FIND /Vyukarıdaki satırı kaldırmak için .... kullanarak DHCPtarif ettiğiniz gibi istenen çıktı almak gibi görünüyor. Ben de kullanmak NETSHyerine kullandım IPCONFIG.


Bu, makinelerim hakkında bazı ek bilgiler yakalar (ağ maskeleri ve benzeri). Demek istediğim, birden fazla IP adresiniz olması durumunda, arayüz adına ulaşmak için "sabit" bir kurala sahip olmamanızdı. İlk Q: bir IP no. ait olduğu arayüzü nasıl bulabilirim? Tüm IP'leri aramıyordum.
SΛLVΘ

2
Girdileriniz için teşekkür ederiz! BTW, yanımda önde gelen ve takip eden satırların dil sorunlarından kaynaklandığını fark ettim. Bunları atlatmak için bunun hakkında ne düşünüyorsun? netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"(Normal ifadeyi biraz temizledim). Bu yer çevresinde çok şey öğreniyorum!
SΛLVΘ

+1 Öneri için teşekkürler. Kullanımım için hala çok fazla çıktı var.
Thomas Weller

3

Daha doğru olmak için, OP'nin örneğini takip ederek, sed\usr\local\wbin , bu sıkıştırılmış dosyanın (UnxUtils projesi) klasörü altında bulunan kullanırım.

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

-neşleşmeyen çizgileri bastırır; ilk kalıp büyük harfle başlayan herhangi bir satırı bulur, ardından honu bekleme alanına koyar; ikinci eşleşme istenen IP numarasında: bu noktada, satır tutma arayüzü adı geri çağrılır ( g), fazladan önde gelen metin çıkarılır (s ) ve yazdırılır ( p).


-B4neredeyse işe yarıyor, sadece adaptör adı + 4 satır ilgisiz çıkışa ait olmayan "Ethernet adaptörü" önekiyle kalıyor. Ancak mesaj açık: bunu yapan bir araç bulun :-)
Thomas Weller

1
Filtrelenmemiş ipconfigçıktı göstermek için yayınınızı güncelleyebilir misiniz ? (Gizlilik için verileri
gizleme

Tamam, eklendi. Ayrıca, birden fazla adrese sahip adaptörleri işlemek zor görünüyor.
Thomas Weller

1
Bu parlak @PJMahoney. Yine de birden fazla IP adresli çıkış ne olurdu? Kullanarak genel bir çözüm için çaba gösterdim sed; belki de çözümünüz de bu hedefe ulaşmak için değiştirilebilir.
SΛLVΘ

Sed başka bir eklerseniz çalışır| sed -rn "s/^.* adapter (.*):/\1/p"
Thomas Weller

3

Sadece kayıt için, işte başka bir toplu çözüm, %ERRORLEVEL%sistem değişkeninin gecikmeli genişlemesinden yararlanıyor :

@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
    )
)

Bu şekilde çağrılabilir: find_int.cmd 192.168.1.100


Hehe. Bu temiz ve saf bir toplu çözümdür. Aferin;)
DavidPostill

+1 Çıktı ihtiyacım olana çok yakın. Teşekkürler
Thomas Weller

sedTek astarı düzenledim, arayüz adını tek çıktı olarak bıraktım . Tabii ki, IP numarasını geçerek bunun için de basit bir toplu iş dosyası yazabilirsiniz. argüman ( %1) olarak.
SΛLVΘ

@ThomasWeller, bunu da ayarladı. Şerefe!
SΛLVΘ

1

Çabalar için herkese teşekkürler. Birkaç engel var gibi görünüyor:

  • bir adaptöre atanan IP adresi sayısı
  • işletim sisteminin dili

Tüm -Bxve Regex şeyler kolayca kırılıyor gibi görünüyor, bu yüzden kendimi uygulayabilir bir şey için googled ve parametre ( IP2Adapter <IP>) olarak IP adresini alan aşağıdaki C # programı ile geldi :

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);
                    }
                }
            }
        }
    }
}

0

Windows 10 Powershell'de, aşağıdakilerle elde edilebilir:

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

Bu gibi bir sonuç verecektir Wi-Fi .

Nerede yer değiştirebilirsin? InterfaceAlias herhangi bir nesne özelliğini kullanabilirsiniz.

Tüm özellikleri elde etmek için boruları atlayın ve çalıştırın: Get-NetIPAddress -IPAddress '192.168.2.4' .

Ağ bağdaştırıcısı ile ilgili diğer özellikler (Açıklama gibi) genellikle InterfaceAliasveya aşağıdakilere dayalı olarak sorgulanabilir InterfaceIndex:

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

Hangi gibi bir şey verecektir: Intel(R) Dual Band Wireless-AC 8265 .

Dokümanlar hakkında daha fazla bilgi edinin : https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-netipaddress?view=win10-ps

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.