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
)
)
3 Réponses :
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%
@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.
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%
Merci, c'est une solution intéressante
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%-----
Это на SU, superuser.com/questions/ 19992 /…
@ lucifer63 merci pour votre suggestion, cela ne répond pas à ma question!