IPのネットワークインターフェイスを検索するコマンド


12

ipconfig、ネットワークアダプターのリストとその設定(IPアドレスなど)を表示できます。

特定のIPアドレスのネットワークアダプターの名前を表示する逆引きコマンドを探しています。

ipconfig次のようなコマンドでの出力をフィルタリングしようとしましたipconfig | find "192.168.2.4"が、アダプタ名がなくなりました。

私の出力はipconfig次のとおりです(トリッキーな部分は、ここでは1つのアダプタに複数のアドレスがあるようです):

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

特定のローカルアドレスについて、または特定のリモートアドレスに到達するためにルーティングインターフェースが使用するものを見つけるには?
Ben Voigt

@BenVoigt:ネットワークインターフェースに割り当てられたアドレスであるため、結果は1つのアダプターのみになります。ルーティングに関するものである場合、結果は多くのアダプターになる可能性があります(異なるメトリックを持つ可能性があります)。
Thomas Weller

回答:


8

特定のIPアドレスのネットワークアダプターの名前を表示するにはどうすればよいですか?

このソリューションではないではない(任意の外部コマンドを必要とするpcre2grepsedなど)。

次のバッチファイル(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

使用法:

getname ipaddress

例:

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

参考文献


1
それは興味深いデビッドです...ほとんどプログラミング!あなたのアイデアは、私は私のバッチソリューション掲示よ、考えさせられました
SΛLVΘ

3
それは@SalvoF あるプログラミング。バッチは、変数、持っているgotoforif、関数、マクロを...あなたはより多くの何が必要なのですか?;)
DavidPostill

私はこれを知りませんでした。ネットワーク構成に何が起こったのかと思いました:-)
Thomas Weller

@ThomasWeller どうやってそれが起こったか知っていますか?
DavidPostill

ではない正確に。それは確かに私が2本のDSL回線を設定したときに起こりました。2つのDSLモデムを持っています。彼らはDCHPと競争したので、固定アドレスを設定しました。しかし、それは2つ目を無視して1つのDSLモデムのみを使用しました。一部の同僚は、2つの固定アドレスを設定することにより、2つのモデムで機能するようにしました。その時から、私のバッチファイル(およびその他のもの)の一部が期待どおりに機能しなくなりました。したがって問題。
Thomas Weller

6

このPS 1ライナーを使用できます。

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

コマンドラインから直接使用するには:

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

または、再利用したい場合は、スクリプトに入れてアドレスをパラメーターにします

編集:Win / Ipconfigに表示される名前を取得するには:

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

(中間変数への割り当ては、それをもう少し読みやすくするためだけです)


これはクールで、ハードウェア名を返します。私のシステムで$powershellは未定義ですが、powershell -cコマンドプロンプトからこれらのコマンドを起動します。PSコマンドラインでは、最初の1ライナーも実行されます。
SΛLVΘ

1
@ThomasWellerは、質問ごとに、実際にはネットワークアダプタの名前です。ただし、論理名も取得できるはずです
wmz

2
別のテーブル@wmzにあります。PSは岩かかわら:powershell "$ip = '192.168.2.4';foreach($int in (gwmi Win32_NetworkAdapter)) {gwmi Win32_NetworkAdapterConfiguration -Filter """Index = $($int.index)""" | ? {$_.IPAddress -contains $ip} | % {$int.NetConnectionID} }"
SΛLVΘ

1
@ThomasWeller編集内容を確認してください。思ったより大変でした!さいわい、PSはGetRelatedAssociators ofメソッドを少し簡単にする方法をサポートしています。
wmz 2015年

1
@SalvoFうん、見つけました
wmz 2015年

4

特定のIPアドレスのネットワークアダプターの名前を表示する逆引きコマンドを探しています。

私が試したすべてに基づいて、これはうまくいくはずです。この情報は、例ですでに指定しているIPアドレスからのみ取得する必要があると言うようです。

ネットワーク接続名を取得するためのIPアドレスの対話型プロンプト

(指定されたIPアドレスのネットワーク接続名を取得するために、WMICいくつかのバッチFORループtokendelim解析を使用します。)

(結果の値は、コマンドウィンドウとメッセージボックスウィンドウにエコーされます。これはすべてバッチスクリプトですが、動的にいくつかのVBSスクリプト関数を構築して、必要な人のためにプロセスを簡略化します。)

@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

オールワンライナー

NETSHのすべてのインターフェイス(すべてのIPv4アドレス)でのみネイティブウィンドウ

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

ここに画像の説明を入力してください

IPCONFIGすべてのインターフェイス(すべてのIPv4アドレス)を使用する場合のみネイティブウィンドウ

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

ここに画像の説明を入力してください


PCRE2GREPの使用(@SalvoFごと)

単一のIPアドレスが指定されました

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

すべてのIPアドレスを検索

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"

すべてのIPアドレスを検索(クリーンアップされた正規表現(@SalvoFごと))

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

ことに注意してくださいpcre2grepしようとした私は@SalvoFあたりのある[+1]彼が提案したが....使用するものとしてFIND /V含む上記の行を削除するには、DHCPあなたが説明するように所望の出力を得るように思われます。私が使用NETSHするのではなくIPCONFIG、同様。


これにより、私のマシンに関する追加情報(ネットワークマスクなど)が取得されます。私のポイントは、複数のIPアドレスがある場合、インターフェイス名を取得するための「固定」ルールを使用しなくなることです。最初のQは、IP番号が指定されていることです。それが属しているインターフェイスを見つけるにはどうすればよいですか?すべてのIPを探していたわけではありません。
SΛLVΘ

2
入力ありがとうございます!ところで、私は私の側の先頭と末尾の行が言語の問題が原因であることに気づきました。それらを回避するために、これについてどう思いますか?netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"(私は正規表現を少し掃除しました)。この辺りで色々学んでいます!
SΛLVΘ

+1提案をありがとう。それでも、私の使用には出力が多すぎます。
Thomas Weller

3

より正確には、OPの例に従って、このzipファイル(UnxUtilsプロジェクト)のフォルダーのsed下にあるを使用し\usr\local\wbinます。

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

-n一致しない行を抑制します。最初のパターンは大文字で始まるすべての行を見つけ、次にh保留スペースに置きます。2番目の一致は必要なIP番号にあります。この時点で、インターフェイス名を保持する行が呼び出され(g)、余分な先行テキストが削除され(s)、印刷されます(p)。


-B4ほぼ機能しますが、「イーサネットアダプター」というプレフィックスが残りますが、これはアダプター名と無関係の出力の4行に属していません。しかし、メッセージは明確です。それを行うツールを見つけてください:-)
Thomas Weller '22

1
投稿を更新して、フィルタリングされていないipconfig出力を表示できますか?(プライバシーのために難読化または変更データ)
SΛLVΘ

はい、追加しました。また、複数のアドレスを持つアダプターを処理するのは難しいようです。
Thomas Weller、

1
それは素晴らしい@PJMahoneyです。しかし、複数のIPアドレスを持つ出力は何でしょうか?私はを使用して一般的な解決策を模索しましたsed。多分あなたの解決策もその目標を達成するために調整することができます。
SΛLVΘ

sedは、もう1つ追加すると機能します| sed -rn "s/^.* adapter (.*):/\1/p"
Thomas Weller、

2

参考までに、ここに別のバッチソリューションがあり%ERRORLEVEL%ます。システム変数の遅延展開を利用します。

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

この方法で呼び出すことができます: find_int.cmd 192.168.1.100


へへ。それは、きちんとした純粋なバッチソリューションです。よくやった;)
DavidPostill

+1出力は私が必要としているものに非常に近いです。ありがとう
トーマスウェラー

sedインターフェース名を唯一の出力として残して、ワンライナーを編集しました。もちろん、そのための簡単なバッチファイルを記述して、IP番号を渡すこともできます。引数として(%1)。
SΛLVΘ

@ThomasWeller、これも調整しました。乾杯!
SΛLVΘ

1

皆さんの努力に感謝します。いくつかのハードルがあるようです:

  • アダプターに割り当てられたIPアドレスの数
  • OSの言語

-BxとRegexのすべてが簡単に壊れるように見えるので、自分で実装できるものを探して、次のC#プログラムを思い付きました。これは、IPアドレスをパラメーター(IP2Adapter <IP>)として受け取ります。

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では、これは次の方法で実現できます。

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

これにより、などの結果が得られWi-Fiます。

InterfaceAlias他のオブジェクトプロパティの代わりに使用できる場所。

すべてのプロパティを取得するには、パイプを省略して、次を実行しますGet-NetIPAddress -IPAddress '192.168.2.4'

その他のネットワークアダプター関連のプロパティ(説明など)は通常、InterfaceAliasまたはInterfaceIndexに基づいて照会できます。

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

これは次のようなものになりますIntel(R) Dual Band Wireless-AC 8265

ドキュメントの詳細を読む:https : //docs.microsoft.com/en-us/powershell/module/nettcpip/get-netipaddress? view=win10- ps

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.