IP의 네트워크 인터페이스를 찾기위한 명령


14

를 사용하면 ipconfig네트워크 어댑터 목록 및 해당 설정 (예 : IP 주소)을 표시 할 수 있습니다.

주어진 IP 주소에 대한 네트워크 어댑터의 이름을 표시하는 역방향 명령을 찾고 있습니다.

ipconfig같은 명령으로 출력을 필터링하려고 시도했지만 ipconfig | find "192.168.2.4"어댑터 이름이 사라졌습니다.

내 출력은 다음과 ipconfig같습니다 (까다로운 부분은 하나의 어댑터에 여러 개의 주소가있는 것 같습니다).

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

주어진 로컬 주소에 대해, 또는 특정 원격 주소에 도달하기 위해 어떤 인터페이스 라우팅이 사용되는지 알아 보려면
벤 Voigt

@ BenVoigt : 네트워크 인터페이스에 할당 된 주소이므로 결과는 하나의 어댑터 만 있어야합니다. 라우팅에 관한 것이라면 많은 어댑터가있을 수 있습니다 (잠재적으로 메트릭이 다름).
Thomas Weller

답변:


8

주어진 IP 주소에 대한 네트워크 어댑터의 이름을 어떻게 표시합니까?

이 솔루션은 않습니다 없습니다 (외부 명령을 요구 pcre2grep, sed등).

다음 배치 파일 (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
흥미 롭습니다. David는 거의 프로그래밍이되었습니다! 귀하의 아이디어로 생각합니다. 배치 솔루션을 게시하고 있습니다
SΛLVΘ

3
그것은 @SalvoF 되는 프로그램. 일괄 변수가있다 goto, for, if, 함수, 매크로 ... 더 당신이 필요합니까? ;)
DavidPostill

내가 :-) 내 네트워크 설정에 무슨 일이 일어 났는지 궁금 할 때까지 나는 이것을 몰랐다
토마스 웰러

@ThomasWeller 어떻게 발생했는지 아십니까?
DavidPostill

정확히. 2 DSL 회선을 설정할 때 확실히 일어났습니다. 2 개의 DSL 모뎀이 있습니다. 그들은 DCHP와 경쟁 했으므로 고정 주소를 설정했습니다. 그러나 그것은 하나의 DSL 모뎀 만 사용했으며 두 번째는 무시했습니다. 일부 colleages는 2 개의 고정 주소를 설정함으로써 2 개의 모뎀에서 작동하도록 만들었습니다. 그 이후로 일부 배치 파일 (및 기타 항목)이 더 이상 예상대로 작동하지 않습니다. 따라서 질문입니다.
Thomas Weller

6

이 PS 하나의 라이너를 사용할 수 있습니다.

$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}

(중간 변수에 대한 할당은 변수를 좀 더 읽기 쉽게 만드는 것입니다)


이것은 시원하며 HW 이름을 반환합니다. 내 시스템 $powershell에는 정의되어 있지 않지만 powershell -c명령 프롬프트에서 해당 명령을 시작 합니다. PS 명령 행에서 첫 번째 라이너도 실행됩니다.
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} }"
그렇습니다

1
@ThomasWeller 편집 내용을 확인하십시오. 생각보다 힘들 었어요! 다행스럽게도 PS는 방법을 약간 GetRelated쉽게 지원합니다 Associators of.
wmz

1
@SalvoF Yup 내가 찾은
wmz

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
입력 해 주셔서 감사합니다! BTW, 나는 내 측면의 선행 및 후행이 언어 문제로 인한 것으로 나타났습니다. 그것들을 피하기 위해 이것에 대해 어떻게 생각하십니까? netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"(정규식을 약간 청소했습니다). 나는 이곳을 많이 배웁니다!
SΛLVΘ 5

+1 제안 해 주셔서 감사합니다. 여전히 내 사용량에 비해 너무 많은 출력이 있습니다.
Thomas Weller

3

더 정확하게 말하면 OP의 예에 따라이 압축 파일 (UnxUtils 프로젝트) sed\usr\local\wbin폴더 아래에있는을 사용 합니다 .

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

-n일치하지 않는 줄을 억제합니다. 첫 번째 패턴은 대문자로 시작하는 행을 찾은 다음 h보류 공간에 둡니다. 두 번째 일치는 원하는 IP 번호입니다.이 시점에서 행 유지 인터페이스 이름이 호출 ( g)되고 추가 선행 텍스트가 제거되고 ( s) 인쇄됩니다 ( p).


-B4거의 작동하지만 접두어 "Ethernet adapter"라는 접두사를 남겨두고 어댑터 이름 + 관련없는 출력 4 줄에 속하지 않습니다. 그러나 메시지는 분명하다 : 그것을하는 도구를 찾아라 :-)
Thomas Weller

1
필터링되지 않은 ipconfig출력 을 표시하도록 게시물을 업데이트 할 수 있습니까? (개인 정보 보호를 위해 데이터를
폐기

좋아, 추가했다. 또한 여러 주소를 가진 어댑터를 처리하기가 까다로운 것 같습니다.
토마스 웰러

1
@PJMahoney가 훌륭합니다. 그래도 여러 IP 주소를 가진 결과는 무엇입니까? 나는 다음을 사용하여 일반적인 솔루션을 위해 노력했다 sed. 어쩌면 귀하의 솔루션도 그 목표에 도달하기 위해 조정될 수 있습니다.
SΛLVΘ

다른 것을 추가하면 sed 하나가 작동| sed -rn "s/^.* adapter (.*):/\1/p"
토마스 웰러

3

기록을 위해 여기에 또 다른 배치 솔루션이 있으며 %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 출력이 필요한 것에 매우 가깝습니다. 감사합니다
Thomas Weller

sed하나의 라이너를 편집하여 인터페이스 이름을 단독 출력으로 남겨 두었습니다. 물론 IP 배치 번호를 전달하는 간단한 배치 파일도 작성할 수 있습니다. 인수 ( %1)로.
SΛLVΘ

@ThomasWeller, 이것도 조정했습니다. 건배!
SΛLVΘ

1

노력해 주셔서 감사합니다. 몇 가지 장애물이있는 것 같습니다.

  • 어댑터에 지정된 IP 주소 수
  • OS의 언어

모든 -Bx정규식 항목이 쉽게 깨지는 것처럼 보였으므로 직접 구현할 수있는 것을 찾아서 IP 주소를 매개 변수 ( IP2Adapter <IP>) 로 사용하는 다음 C # 프로그램을 생각해 냈습니다 .

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.