Polecenie w jednym wierszu w systemie Windows, aby uzyskać adres IP komputera przez moją sieć Wi-Fi

0

Mam konfigurację serwera Windows, w której chciałbym dynamicznie uzyskiwać adres IP serwera Wi-Fi.

Problem polega na tym, że ipconfig zwraca ogromny ciąg znaków, a skrypt, którego używam, potrzebuje adresu natychmiast. Czy jest jakieś polecenie, aby od razu to uzyskać? Jestem otwarty na pomysł zewnętrznego skryptu .bat lub oprogramowania mini CLI, które mogę zainstalować na serwerze, aby mój skrypt rozmawiał z tym skryptem w celu uzyskania adresu IP przez sieć Wi-Fi.

vDog
źródło
4
Nie ma czegoś takiego jak adres Wi-Fi - może to być adres IP, ale serwer zazwyczaj nie używa Wi-Fi. Jestem nieco zdezorientowany tym, czego naprawdę potrzebujesz.
Journeyman Geek
1
Czy PowerShell jest opcją dla języka skryptowego?
Scott Chamberlain
@ScottChamberlain Tak, jest.
vDog

Odpowiedzi:

3

W Powershell 2.0 i nowszych:

PS C:\Users\User> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPENABLED=TRUE | Select IPAddress

IPAddress
---------
{192.168.1.100, ****::****:****:****:****}

Zwróć uwagę, że da ci to wszystkie adresy IP na komputerze, istnieje możliwość filtrowania, aby odizolować tylko adres IPv4.

MrDoom
źródło
1

Trzeba uzyskać pewne informacje z systemu, aby uzyskać to działa idealnie. Wmic poda te informacje, jeśli poprosisz o to we właściwy sposób.

wmic nicconfigpoda informacje o wszystkich adapterach, niestety zakończone wierszem, którego notatnik nie może odczytać. Uruchom wmic nicconfig > file.txti otwórz plik.txt w notatniku ++ - Musisz znaleźć kolumnę o nazwie „Caption”. W moim przypadku jest to napisane [00000000] Qualcomm Atheros AR9485 Wireless Network Adapter- możesz użyć tego do wyszukiwania informacji o tym konkretnym adapterze.

Uruchomienie wmic nicconfig where Caption="[00000000] Qualcomm Atheros AR9485 Wireless Network Adapter" get ipaddresswyeksportuje wartości adresów IP lub tego konkretnego interfejsu w formacie {"192.168.1.137", "fe80::XXXX:XXXX:XXXX:XXXX"} (uruchamiam podwójny stos). Możesz po prostu użyć czegoś takiego jak cięcie GNU lub innego narzędzia, aby usunąć niepotrzebne znaki z wydruku.

Jak wskazano w komentarzach, PowerShell prawdopodobnie zrobi to wszystko, w tym pobieranie informacji z WMI i pobieranie informacji

Journeyman Geek
źródło
0

Możesz zmodyfikować poniższe, aby dopasować do swoich potrzeb.

@ECHO OFF
::=======================================================================
::  Author: Andrew Tsai
::  Date  : 04-15-2014
::=======================================================================
CLS
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

ECHO Retrieving MAC Addresses
FOR /F "tokens=1 delims= " %%a in ('getmac ^| findstr "\-" ^| findstr /v "00-50-56"')     do (
    SET vMAC=%%a
    SET vMAC=!vMAC:-=:!

    ECHO Retrieving Ethernet Adapter Name for !vMAC!
    %windir%\system32\wbem\wmic.exe /output:NICName.txt nic where MACAddress="!vMAC!"     get NetConnectionID
    for /F "skip=1 tokens=1 delims=" %%l in ('type "NICName.txt"') do (
        SET LAN_NAME=%%l
        REM Trim Trailing Spaces
        for /l %%m in (1,1,31) do if "!LAN_NAME:~-1!"==" " SETLAN_NAME=!LAN_NAME:~0,-1!
     )

    ECHO Retrieving IP
    FOR /F "tokens=2 delims= " %%a IN ('netsh int ipv4 show ipaddresses "!LAN_NAME!" ^| find "Parameters"') DO SET CurIP=%%a
)
FOR /F "tokens=2 delims= " %%a in ('%windir%\system32\nslookup myip.opendns.com resolver1.opendns.com ^| find "Address" ^| find ^/V "208.67.222.222"') DO SET ExtIP=%%a

ECHO.
ECHO Current LAN = !LAN_NAME!
ECHO Current MAC = !vMAC!
ECHO Current Internal IP = !CurIP!
ECHO Current External IP = !ExtIP!
ECHO.
REM SET LAN_NAME
REM SET vMAC
REM SET CurIP
REM SET ExtIP

ENDLOCAL
ENDLOCAL

:END
attca
źródło