alphasec academy

(irm ipinfo.io/json).ip - szybki sposób na uzyskanie zewnętrznego adresu IP

Dodatkowe informacje

irm to alias na Invoke-RestMethod, który dostępny jest od Powershella 3.0:

PS /Users/drg> Get-Alias irm

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           irm -> Invoke-RestMethod

PS /Users/drg>
    

Serwis iponfo.io to jeden z wielu serwisów, który wyświetla informacje o adresie IP, z którego przychodzi request. Endpoint ipinfo.io/json zwróci informacje jako obiekt JSON.

Kiedy Invoke-RestMethod otrzyma takiego JSONa, od razu go sparsuje i zwróci obiekt. Żeby to udowodnić, wystarczy przekierować wynik irm do Get-Member (alias gm):

PS /Users/drg> irm ipinfo.io/json|gm


   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
city        NoteProperty string city=Kraków
country     NoteProperty string country=PL
hostname    NoteProperty string hostname=89-64-59-244.dynamic.chello.pl
ip          NoteProperty string ip=89.64.59.244
loc         NoteProperty string loc=50.0614,19.9366
org         NoteProperty string org=AS6830 Liberty Global B.V.
postal      NoteProperty string postal=04-190
readme      NoteProperty string readme=https://ipinfo.io/missingauth
region      NoteProperty string region=Lesser Poland
timezone    NoteProperty string timezone=Europe/Warsaw

PS /Users/drg>
        

Żeby pobrać konkretne pole tego obiektu, wykorzystamy notację kropkową - stąd (irm ipinfo.io/json).ip.

Inne serwisy tego typu, to np. ifconfig.me:

PS /Users/drg> irm ifconfig.me/all.json

ip_addr     : 89.64.59.244
remote_host : unavailable
user_agent  : Mozilla/5.0 (Macintosh; Darwin 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar  4 22:28:
              40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64; ) PowerShell/7.0.0
port        : 21940
method      : GET
via         : 1.1 google
forwarded   : 89.64.59.244, 216.239.38.21


PS /Users/drg>
    

Uwaga

Może się zdarzyć, że użycie Invoke-RestMethod (lub np. Invoke-WebRequest - iwr) nie powiedzie się, jeśli Internet Explorer nie został skonfigurowany przed pierwszym uruchomieniem. W takich okolicznościach (lub od razu, dla bezpieczeństwa) należy użyć opcji -UseBasicParsing (co można skrócić do -useb), co spowoduje, że wynik nie będzie parsowany przez silnik IE. Uwaga do uwagi: od Powershella 6.0 to nie jest już prawdą i -UseBasicParsing jest już zdeprecjonowane.

Przydatne linki


Subskrybuj

Jeśli chcesz otrzymywać nowe, mięsiste protipy na maila, a także zostać czasem powiadomiony o wartościowych wydarzeniach - dołącz do subskrybentów.