1
votes

Adresse IP d'Ethernet spécifique en tant que variable CMD

Je dois vérifier mon adresse IP toutes les 10 minutes et l'écrire dans un fichier csv, si elle a changé. Cependant, j'ai plusieurs cartes réseau en cours d'utilisation. Comment puis-je obtenir l'adresse IP d'une carte spécifique dans CMD en utilisant son adresse MAC?

Voir ci-dessous pour la modification de la réponse à une autre question de @mousio a>. Cela n'a pas fonctionné pour moi!

Ethernet adapter Ethernet 3:

   Connection-specific DNS Suffix  . : xyz.xyz.com
   Description . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Connection
   Physical Address. . . . . . . . . : 11-11-11-11-11-11
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : 1111::1111:1111:1111:111111(Preferred)
   IPv4 Address. . . . . . . . . . . : 111.11.11.11(Preferred)
   Subnet Mask . . . . . . . . . . . : 111.111.1.1
   Lease Obtained. . . . . . . . . . : Thursday, July 25, 2019 9:51:30 AM
   Lease Expires . . . . . . . . . . : Monday, August 26, 2019 12:33:23 PM
   Default Gateway . . . . . . . . . : 111.11.1.1
   DHCP Server . . . . . . . . . . . : 111.11.11.11
   DHCPv6 IAID . . . . . . . . . . . : 111111111
   DHCPv6 Client DUID. . . . . . . . : 11-11-11-11-11-11-11-11-11-11-11-11-11-11
   DNS Servers . . . . . . . . . . . : 111.11.11.11
                                       111.11.11.11
   NetBIOS over Tcpip. . . . . . . . : Enabled

Voir ci-dessous une partie de la réponse pour ipconfig / all

@echo off
setlocal enabledelayedexpansion
set "MAC1=Physical Address"
set "MAC2=11-11-11-11-11-11"
set MACfound=false
for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do (
    set "item1=%%f"
    set "item2=%%g"
    if /i "!item1!"=="!MAC1!" if "!item2!"=="!MAC2!" (
        set MACfound=true
    ) else if not "!item1!"=="!item:IPv4 Address=!" if "!MACfound!"=="true" (
        echo Your IP Address is: %%g
        set MACfound=false
    )
)


2 commentaires

Это на SU, superuser.com/questions/ 19992 /…


@ lucifer63 merci pour votre suggestion, cela ne répond pas à ma question!


3 Réponses :


2
votes

IPconfig est difficile à analyser car les informations nécessaires sont réparties sur plusieurs lignes. Utilisez les bons outils. Je recommande wmic :

@echo off
set parent=%~dp0%
CD "%parent%"
setlocal enabledelayedexpansion
for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a"
rem echo All Addresses: %adresses%
for %%a in (%adresses%) do (
  echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a
  echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a
)
set ip4=%ip4:~1%
set ip6=%ip6:~1%

echo ip4_address
echo %ip4%

Remarque: le format de l'adresse MAC est différent en wmic (deux points au lieu de tirets). N'oubliez pas d'échapper au = .

Edit: pour séparer les adresses IPv4 et IPv6, il suffit de diviser la chaîne avec un autre pour boucle:

@echo off
echo -- IP ADDRESS UPDATER, PLEASE DO NOT CLOSE! --
set parent=%~dp0%
CD "%parent%"
setlocal enabledelayedexpansion
for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a"

for %%a in (%adresses%) do (
  echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a
  echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a
)
set ip4_old=%ip4:~1%
set ip6_old=%ip6:~1%
set "ip4=%ip4*=%"
set "ip6=%ip6*=%"

call ip_writer > ip_file.csv

:loop
for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a"

for %%a in (%adresses%) do (
  echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a
  echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a
)
set ip4_new=%ip4:~1%
set ip6_new=%ip6:~1%
set "ip4=%ip4*=%"
set "ip6=%ip6*=%"

if not "%ip4_new%"=="%ip4_old%" (
    call ip_writer > ip_file.csv
    set ip4_old=%ip4_new%
)

set "ip4_new=%ip4*=%"    

timeout 600 /nobreak > nul
goto loop

Edit (par Mosy): Code pour accomplir toutes les tâches requises, c'est-à-dire écrire l'adresse IP dans un fichier csv et mettre à jour toutes les 10 minutes s'il a changé:

En gros, il y aura deux fichiers batch dans le même chemin, le premier s'appelle ip_main.bat et contient:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a"
echo All Addresses: %adresses%
for %%a in (%adresses%) do (
  echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a
  echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a
)
echo IPv4-Address(es): %ip4:~1%
echo IPv6-Address(es): %ip6:~1%


2 commentaires

@stephen J'ai fait ça mais j'obtiens bot IPv4 et (je suppose) IPv6 par exemple 111.11.11.11 "," aa11 :: a111: 1aaa: aaa8: a1a1 Comment puis-je les obtenir en deux variables séparées?


merci beaucoup c'est ce que je voulais. J'ai modifié votre réponse pour ajouter toutes les autres tâches requises au cas où quelqu'un d'autre voudrait faire la même chose et aurait besoin d'un indice.



1
votes

Voici une autre façon de procéder.

FOR /F "tokens=1-2" %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration |" ^
    "Where-Object { $_.MACAddress -match '11:11:11:11:11:11' } |" ^
    "ForEach-Object { '{0} {1}' -f $_.IPAddress[0], $_.IPAddress[1] }"') DO (
    SET "IPV4ADDR=%%~A"
    SET "IPV6ADDR=%%~B"
)
ECHO IPV4ADDR is %IPV4ADDR%
ECHO IPV6ADDR is %IPV6ADDR%


1 commentaires

Merci, c'est une solution intéressante



0
votes

Obtenir un Ip local depuis Mac

    setlocal enabledelayedexpansion
    set "i=0"
    for /f "tokens=2 delims={} skip=1" %%i in ('wmic nicconfig get IPAddress /value' )         do (
    echo %%i|find "." >nul && set "ip4[!i!]=%%i
    set /a "i+=1"
    )
    set /a "i-=1"
    for /l %%a in (0,1,%i%) do (
        set ip4ip6=!ip4[%%a]!"
        for /f tokens^=1^,2^,3^ delims^=^" %%a in (!ip4ip6!) do (
            set temp=%%a
            set tempMac=%%c
        )
        if "!temp:~0,12!" equ "192.168.137." (
            set localIp=!temp!
            set localMac=!tempMac!
        ) else if "!temp:~0,8!" equ "127.0.0." (
            set localIp=!temp!
            set localMac=!tempMac!
        ) else if "!temp:~0,12!" equ "Some.else.IP." (
            set localIp=!temp!
            set localMac=!tempMac!
        )
    )
    echo ----%localIp%-----
    echo ----%localMac%-----

Obtenir un Mac depuis un Ip local

    setlocal enabledelayedexpansion
    set Mac=hy80::c1sd:6452:4t5:d574
    set "i=0"
    for /f "tokens=2 delims={} skip=1" %%i in ('wmic nicconfig get IPAddress /value' )                 do (
    echo %%i|find "." >nul && set "ip4[!i!]=%%i
    set /a "i+=1"
    )
    set /a "i-=1"
    for /l %%a in (0,1,%i%) do (
        set ip4ip6=!ip4[%%a]!"
        for /f tokens^=1^,2^,3^ delims^=^" %%a in (!ip4ip6!) do (
            set temp=%%a
            set tempMac=%%c
        )
        if "!Mac!" equ "!tempMac!" (
            set localMac=!tempMac!
            set localIp=!temp!
        )
    )
    echo ----%localIp%-----
    echo ----%localMac%-----


0 commentaires