আইপি এর জন্য নেটওয়ার্ক ইন্টারফেস সন্ধানের আদেশ


14

সঙ্গে ipconfigআমি নেটওয়ার্ক অ্যাডাপ্টার এবং তাদের সেটিংস তালিকা দেখাতে পারেন যে 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:
...

প্রদত্ত স্থানীয় ঠিকানার জন্য, বা কোনও নির্দিষ্ট দূরবর্তী ঠিকানায় পৌঁছানোর জন্য কোন ইন্টারফেস রাউটিং ব্যবহার করে তা সন্ধান করতে?
বেন ভয়েগট

@ বেনভয়েগ্ট: এটি একটি নেটওয়ার্ক ইন্টারফেসের জন্য নির্ধারিত ঠিকানা, সুতরাং ফলাফলটি কেবলমাত্র একটি অ্যাডাপ্টারের হওয়া উচিত। যদি এটি রাউটিংয়ের বিষয়ে হয় তবে ফলাফলটি অনেকগুলি অ্যাডাপ্টার হতে পারে (সম্ভাব্যভাবে বিভিন্ন মেট্রিক সহ)।
টমাস ওয়েলার

উত্তর:


8

প্রদত্ত আইপি ঠিকানার জন্য আমি কীভাবে একটি নেটওয়ার্ক অ্যাডাপ্টারের নাম প্রদর্শন করব?

এই সমাধান নেই না কোন বাইরের কমান্ড (প্রয়োজন 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, ফাংশন, ম্যাক্রো ... আর কি প্রয়োজন? ;)
ডেভিডপস্টিল

আমার নেটওয়ার্ক কনফিগারেশনে কী ঘটেছে তা ভেবে অবধি আমি এটি জানতাম না :-)
টমাস ওয়েলার

@ থমাস ওয়ালার আপনি কি জানেন যে এটি কীভাবে ঘটল?
ডেভিডপস্টিল

বেপারটা এমন না. আমি যখন আমার 2 ডিএসএল লাইন স্থাপন করি তখন এটি অবশ্যই ঘটেছিল। আমার কাছে 2 ডিএসএল মডেম রয়েছে। তারা DCHP এর সাথে প্রতিযোগিতা করেছিল, তাই আমি একটি নির্দিষ্ট ঠিকানা সেট আপ করেছি। তবে এটি কেবল একটি ডিএসএল মডেম ব্যবহার করেছে, দ্বিতীয়টিকে উপেক্ষা করে। কিছু কৌলিকাগুলি 2 টি স্থির ঠিকানা স্থাপনের মাধ্যমে এটি 2 মোডেমের জন্য কাজ করে। সেই সময় থেকে, আমার ব্যাচের কয়েকটি ফাইল (এবং অন্যান্য স্টাফ) আর প্রত্যাশার মতো কাজ করছে না। সুতরাং প্রশ্ন।
টমাস ওয়েলার 21

6

আপনি এই পিএস ওয়ান লাইনারটি ব্যবহার করতে পারেন:

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

অথবা আপনি যদি এটি পুনঃব্যবহার করতে চান তবে এটি কোনও স্ক্রিপ্টে রেখে ঠিকানাটিকে একটি প্যারামিটার বানান

সম্পাদনা: উইন / আইপকনফিগে যেমন প্রদর্শিত হয় তেমন একটি নাম পেতে:

$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
@ থমাস ওয়ালার যা আপনার প্রশ্ন অনুযায়ী আপনার নেটওয়ার্ক অ্যাডাপ্টারের একটি নাম। তবে আমাকে পরীক্ষা করে দেখা যাক, যৌক্তিক নামটিও
প্রাপ্য

2
এটি অন্য এক টেবিল @Wmz এ পিএস শিলা যদিও: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
@ থমাস ওল্ডার আমার সম্পাদনা পরীক্ষা করুন। আমি যে ভাবা চেয়ে কঠিন ছিল! ভাগ্যক্রমে পিএস সমর্থন করে GetRelatedযা Associators ofপদ্ধতিগুলি কিছুটা সহজ করে।
wmz

1
@SalvoF হ্যাঁ আমি এটি পাওয়া
wmz

4

আমি একটি বিপরীত কমান্ড খুঁজছি যা প্রদত্ত আইপি ঠিকানার জন্য নেটওয়ার্ক অ্যাডাপ্টারের নাম প্রদর্শন করে।

আমি চেষ্টা করা সমস্ত কিছুর উপর ভিত্তি করে, এটি কাজ করা উচিত বলে মনে হচ্ছে আপনি যে আইপি ঠিকানাটি ইতিমধ্যে আপনার উদাহরণটিতে উল্লেখ করেছেন কেবলমাত্র এই তথ্যটি আপনার নেওয়া দরকার।

নেটওয়ার্ক সংযোগের নাম পেতে আইপি ঠিকানার জন্য ইন্টারেক্টিভ প্রম্পট

( নির্দিষ্ট আইপি ঠিকানার জন্য নেটওয়ার্ক সংযোগের নাম পেতে WMICকিছু ব্যাচ FORলুপ tokenএবং delimপার্সিং ব্যবহার করুন ))

(ফলাফলের মানটি একটি কমান্ড উইন্ডো এবং একটি বার্তা বাক্স উইন্ডোতে প্রতিধ্বনিত হবে It's এটি সমস্ত ব্যাচের স্ক্রিপ্ট তবে প্রয়োজনের জন্য প্রক্রিয়াটি সহজ করার জন্য গতিশীলভাবে কিছু ভিবিএস স্ক্রিপ্ট ফাংশন তৈরি করে))

@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

সমস্ত একলাইনার

সব জাতীয় ইন্টারফেসের সাথেই কেবল উইন্ডোস (সমস্ত আইপিভি 4 ঠিকানা)

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

এখানে চিত্র বর্ণনা লিখুন

সমস্ত আইফোনফ্যাক্সের সাথে কেবল আইটেম উইন্ডোস (সমস্ত আইপিভি 4 ঠিকানা)

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

এখানে চিত্র বর্ণনা লিখুন


পিসিআরআর 2 গ্রিপ ব্যবহার করা (প্রতি স্যালভোএফ)

একক আইপি ঠিকানা নির্ধারিত

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"

সমস্ত আইপি ঠিকানাগুলি সন্ধান করুন (ক্লিন আপ আপ রেজেক্স (প্রতি @ সালভোএফ))

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

অনুগ্রহ করে নোট করুন যে pcre2grepআমি চেষ্টা করেছি @ সালভোএফ প্রতি [+1]তার পরামর্শ অনুসারে কিন্তু .... ব্যবহার করে FIND /Vউপরের লাইনটি সরিয়ে ফেলতে DHCPআপনি বর্ণিত হিসাবে পছন্দসই আউটপুট পাবে বলে মনে হচ্ছে। আমি NETSHবরং IPCONFIGভাল ব্যবহার ।


এটি আমার মেশিনগুলিতে কিছু কিছু অতিরিক্ত তথ্য (নেটওয়ার্ক মুখোশ এবং এই জাতীয় হিসাবে) ধরে। আমার বক্তব্যটি হ'ল যদি আপনার একাধিক আইপি অ্যাড্রেস থাকে তবে ইন্টারফেসের নাম পেতে আপনার একটি "নির্দিষ্ট" নিয়ম থাকা বন্ধ হয়ে যায়। প্রাথমিক প্রশ্নটি হল: একটি আইপি নং দেওয়া হয়েছে। এটি ইন্টারফেসের সাথে সম্পর্কিত কীভাবে করব? আমি সব আইপি খুঁজছিলাম না।
সেলভি

2
আপনার ইনপুট জন্য আপনাকে ধন্যবাদ! বিটিডাব্লু, আমি লক্ষ্য করেছি যে আমার পক্ষের নেতৃস্থানীয় এবং অনুসরণকারী লাইনগুলি ভাষা সংক্রান্ত সমস্যার কারণে ছিল। এগুলি রোধ করার জন্য, আপনি এই সম্পর্কে কী ভাবেন? netsh interface ip show config | pcre2grep "^[A-Z]|IP.*([0-9]{1,3}(\.|)){4}"(আমি রেজেক্সকে কিছুটা সাফ করেছি)। আমি এই জায়গা জুড়ে অনেক কিছু শিখছি!
সেলভি

+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আউটপুট দেখানোর জন্য আপনি কি আপনার পোস্ট আপডেট করতে পারবেন ? (গোপনীয়তার জন্য ডেটা
অবলম্বন

ঠিক আছে, যোগ করা হয়েছে। একাধিক ঠিকানা সহ অ্যাডাপ্টারগুলি পরিচালনা করাও জটিল বলে মনে হচ্ছে।
টমাস ওয়েলার

1
এটি উজ্জ্বল @ পিজেএমমাহিনী। যদিও একাধিক আইপি ঠিকানা দিয়ে আউটপুট হবে? আমি ব্যবহার করে একটি সাধারণ সমাধানের জন্য একটি প্রচেষ্টা করেছি 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


হে হে। এটি একটি ঝরঝরে বিশুদ্ধ ব্যাচের সমাধান। ভাল হয়েছে;)
ডেভিডপস্টিল

+1 আউটপুটটি আমার যা প্রয়োজন তা খুব কাছে। ধন্যবাদ
টমাস ওয়েলার

sedইন্টারফেসের নামটি একমাত্র আউটপুট হিসাবে রেখে আমি ওয়ান-লাইনার সম্পাদনা করেছি । অবশ্যই, আপনি এটির জন্য একটি সাধারণ ব্যাচের ফাইলও লিখতে পারেন, আইপি নং পাস করে। যুক্তি হিসাবে ( %1)।
সেলভি

@ থমাস ওয়ালার, এটিও সুর করেছেন। চিয়ার্স!
সেলভি Θ

1

সবাইকে চেষ্টা করার জন্য ধন্যবাদ। দেখে মনে হচ্ছে বেশ কয়েকটি বাধা রয়েছে:

  • অ্যাডাপ্টারের জন্য নির্ধারিত আইপি ঠিকানার সংখ্যা
  • ওএস এর ভাষা

সমস্ত -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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.