IP के लिए नेटवर्क इंटरफ़ेस खोजने के लिए कमांड


14

साथ ipconfigमैं, नेटवर्क एडेप्टर और उनकी सेटिंग की सूची दिखा सकते हैं आईपी पते जैसे।

मैं एक रिवर्स कमांड की तलाश कर रहा हूं जो किसी दिए गए आईपी पते के लिए नेटवर्क एडेप्टर का नाम प्रदर्शित करता है।

मैंने 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:
...

किसी दिए गए स्थानीय पते के लिए, या यह पता लगाने के लिए कि किसी विशेष दूरस्थ पते तक पहुंचने के लिए इंटरफ़ेस रूटिंग क्या उपयोग करता है?
बेन वोइगट

@BenVoigt: यह एक नेटवर्क इंटरफेस के लिए दिया गया पता है, इसलिए परिणाम केवल एक एडॉप्टर होना चाहिए। यदि यह रूटिंग के बारे में था, तो परिणाम कई एडेप्टर हो सकते हैं (संभवतः विभिन्न मैट्रिक्स के साथ)।
थॉमस वेलर

जवाबों:


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
दिलचस्प है डेविड ... लगभग प्रोग्रामिंग! आपके विचार से मुझे लगा, मैं अपने बैच समाधान
SΘLV

3
यह @SalvoF है प्रोग्रामिंग। बैच चर, है goto, for, if, काम करता है, मैक्रो ... क्या अधिक आप की जरूरत है? ;)
DavidPostill

मुझे यह तब तक नहीं पता था जब तक मुझे नहीं लगता था कि मेरे नेटवर्क कॉन्फिग :-) को क्या हुआ है
थॉमस वेलर

@ThomasWeller क्या आप जानते हैं कि यह कैसे हुआ?
DavidPostill

बिल्कुल नहीं। यह निश्चित रूप से तब हुआ जब मैंने अपनी 2 डीएसएल लाइनें स्थापित कीं। मेरे पास 2 डीएसएल मोडेम हैं। उन्होंने DCHP के साथ प्रतिस्पर्धा की, इसलिए मैंने एक निश्चित पता स्थापित किया। लेकिन वह केवल एक डीएसएल मॉडेम का उपयोग करता था, दूसरे की अनदेखी। कुछ सहयोगियों ने इसे 2 मोडेम के लिए काम किया, संभवतः 2 निश्चित पते सेट करके। उस समय से, मेरी कुछ बैच फ़ाइलें (और अन्य सामान) किसी भी अधिक अपेक्षा के अनुरूप काम नहीं कर रही हैं। इसलिए सवाल।
थॉमस वेलर

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कमांड प्रॉम्प्ट से उन कमांड को लॉन्च करता हूं । पीएस कमांड लाइन 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 मेरा संपादन जांचें जितना मैंने सोचा था उससे कहीं ज्यादा कठिन था! सौभाग्य से पीएस सपोर्ट करता है GetRelatedजो Associators ofतरीकों को थोड़ा आसान बनाता है ।
wmz

1
@ साल्लोव युप मैं इसे पाया
wmz

4

मैं एक रिवर्स कमांड की तलाश कर रहा हूं जो किसी दिए गए आईपी पते के लिए नेटवर्क एडेप्टर का नाम प्रदर्शित करता है।

मेरे द्वारा कोशिश की गई हर चीज के आधार पर, यह काम करना चाहिए आपको लगता है कि आपको यह जानकारी केवल आईपी पते से प्राप्त करने की आवश्यकता है जिसे आप पहले से ही अपने उदाहरण में निर्दिष्ट करते हैं।

आईपी ​​नेटवर्क के लिए इंटरएक्टिव प्रॉम्प्ट नेटवर्क कनेक्शन नाम प्राप्त करने के लिए

( निर्दिष्ट आईपी पते के लिए नेटवर्क कनेक्शन नाम प्राप्त करने के लिए उपयोग करें WMICऔर कुछ बैच FORलूप tokenऔर delimपार्सिंग।)

(परिणाम मान एक कमांड विंडो और एक संदेश बॉक्स विंडो के लिए प्रतिध्वनित होगा। यह सभी बैच स्क्रिप्ट है, लेकिन गतिशील रूप से किसी के लिए प्रक्रिया को सरल बनाने के लिए कुछ 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

सभी एक-लाइनर्स

नेटिव विन्डोज़ केवल सभी इंटरफेक्स (सभी IPv4 ADDRESSES) के साथ

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

यहाँ छवि विवरण दर्ज करें

केवल सभी इंटरकफेक्स (सभी IPv4 ADDRESSES) के साथ स्वाभाविक विंडो

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

यहाँ छवि विवरण दर्ज करें


PCRE2GREP का उपयोग करना (प्रति @SalvoF)

एकल आईपी पता निर्दिष्ट

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

सभी आईपी पते खोजें

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"

सभी आईपी पते खोजें (Regex (प्रति @SalvoF) साफ)

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

कृपया ध्यान दें कि pcre2grepमैंने कोशिश की @SalvoF प्रति के [+1]रूप में वह सुझाव दिया है, लेकिन .... का उपयोग कर FIND /Vऊपर लाइन से हटाने के DHCPलिए वांछित उत्पादन प्राप्त करने के लिए लगता है जैसा कि आप वर्णित है। मैंने इसके NETSHबजाय इस्तेमाल किया IPCONFIG


यह मेरी मशीनों (नेटवर्क मास्क, और इस तरह) पर कुछ अतिरिक्त जानकारी पकड़ता है। मेरा कहना यह था कि यदि आपके पास कई IP पते हैं, तो आप इंटरफ़ेस नाम पर जाने के लिए "निश्चित" नियम रखते हैं। प्रारंभिक क्यू है: एक आईपी नं। मुझे यह कैसे पता चलेगा कि यह किस इंटरफ़ेस से है? मैं सभी आईपी की तलाश नहीं कर रहा था।
S --LVΛ

2
आपके इनपुट के लिए धन्यवाद! BTW, मैंने देखा कि मेरी ओर से अग्रणी और अनुगामी लाइनें भाषा के मुद्दों के कारण थीं। उन पर नकेल कसने के लिए, आप इस बारे में क्या सोचते हैं? netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"(मैंने रेगेक्स को थोड़ा साफ किया)। मैं इस जगह के आसपास बहुत कुछ सीख रहा हूँ!
S --LVΛ

+1 सुझाव के लिए धन्यवाद। यह अभी भी मेरे उपयोग के लिए बहुत अधिक आउटपुट है।
थॉमस वेलर

3

ओपी के उदाहरण के बाद, और अधिक सटीक होने के लिए, मैं उपयोग करूंगा sed, जो इस ज़िप्ड फ़ाइल के \usr\local\wbinफ़ोल्डर के तहत पाया जा सकता है (अनएक्सट्यूट प्रोजेक्ट)।

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

-nगैर मिलान लाइनों को दबा देता है; पहला पैटर्न किसी भी लाइन को बड़े अक्षर से शुरू करता है, फिर hइसे होल्ड स्पेस पर रख देता है; दूसरा मैच वांटेड आईपी नंबर पर है: इस बिंदु पर, लाइन होल्डिंग इंटरफेस नाम को वापस बुलाया गया है ( g), अतिरिक्त प्रमुख पाठ छीन लिया गया ( s), और मुद्रित ( p)।


-B4लगभग काम करता है, यह सिर्फ मुझे उपसर्ग "ईथरनेट एडेप्टर" के साथ छोड़ देता है, जो कि एडॉप्टर नाम + असंबद्ध आउटपुट की 4 लाइनों से संबंधित नहीं है। लेकिन संदेश स्पष्ट है: ऐसा टूल ढूंढें जो इसे करता है :-)
थॉमस वेलर

1
क्या आप अपनी पोस्ट को अनफ़िल्टर्ड ipconfigआउटपुट दिखाने के लिए अपडेट कर सकते हैं ? (गोपनीयता के लिए डेटा को बदलना या बदलना)
SΘLV

ठीक है, जोड़ा गया। यह भी कई पते के साथ एडेप्टर को संभालने के लिए मुश्किल हो रहा है।
थॉमस वेलर

1
वह शानदार @PJMahoney है। हालांकि कई आईपी पतों के साथ आउटपुट क्या होगा? मैंने उपयोग करके एक सामान्य समाधान के लिए प्रयास किया sed; हो सकता है कि आपका समाधान भी उस लक्ष्य तक पहुंचने के लिए टल जाए।
S --LVΛ

अगर मैं एक और जोड़ दूं तो यह सेड एक काम करता है| 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 आउटपुट मेरी ज़रूरत के बहुत करीब है। धन्यवाद
थॉमस वेलर

मैंने sedएक-लाइनर को संपादित किया , इंटरफ़ेस नाम को एकमात्र आउटपुट के रूप में छोड़ दिया। बेशक, आप इसके लिए एक साधारण बैच फ़ाइल भी लिख सकते हैं, आईपी नं। तर्क के रूप में ( %1)।
S --LVΛ

@ThomasWeller ने इसे भी ट्यून किया। चीयर्स!
S --LVΛ

1

सभी के प्रयास के लिए धन्यवाद। ऐसा लगता है कि कई बाधाएँ हैं:

  • एक एडेप्टर को असाइन किए गए IP पतों की संख्या
  • ओएस की भाषा

सभी -Bxऔर रेगेक्स सामान आसानी से टूटने लगता है, इसलिए मैंने कुछ के लिए गुगली दी जिसे मैं खुद को लागू कर सकता था और निम्नलिखित सी # कार्यक्रम के साथ आया, जो आईपी पते को पैरामीटर के रूप में लेता है ( 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

विंडोज 10 पॉवर्सशेल पर, इसे निम्नलिखित के साथ प्राप्त किया जा सकता है:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.