Windows_PowerShell_icondość częste pytanie, jak się ma dynamiczny adres IP. najłatwiej oczywiście wejść na jakąś stronę, która ten adres pokazuje. ale lepiej napisać sobie skrypt (:

nie jest to skomplikowane, wystarczy użyć invoke-webRequest, który jest świetną przeglądarką textową. do testów wybrałem stronę 'http://whatismyipaddress.com’ ale można wybrać dowolny inny. po wejściu od razu widzę, że jestem przekierowany na 'http://whatismyipaddress.com/pl/moj-ip’. żeby oszczędzić sobie trochę grzebaniny robię inspekcję elementu, gdzie jest adres i widzę. że jest to DIV o ID=’section_left’. można to olać, ale przyda się żeby trochę zawęzić wyszukiwanie.

teraz z linii poleceń.

C:\...ive\_ScriptZ :))o- $page=invoke-WebRequest http://whatismyipaddress.com/pl/moj-ip

na początek trzeba się zaznajomić z obiektem więc warto sprawdzić:

C:\...ive\_ScriptZ :))o- $page

StatusCode        : 200
StatusDescription : OK
Content           : <!doctype html>
                    <html lang="pl">
                    <head>
                        <meta charset="utf-8">
                        <meta name="robots" content="noarchive">
                        <title>What Is My IP Address? NarzÄ?dzia do adresA3w IP i nie tylko</title>
                        <meta name="desc...
<CUT>

C:\...ive\_ScriptZ :))o- $page|gm
   TypeName: Microsoft.PowerShell.Commands.HtmlWebResponseObject

Name              MemberType Definition
----              ---------- ----------
Dispose           Method     void Dispose(), void IDisposable.Dispose()
Equals            Method     bool Equals(System.Object obj)
GetHashCode       Method     int GetHashCode()
GetType           Method     type GetType()
ToString          Method     string ToString()
AllElements       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection AllElements {get;}
BaseResponse      Property   System.Net.WebResponse BaseResponse {get;set;}
Content           Property   string Content {get;}
Forms             Property   Microsoft.PowerShell.Commands.FormObjectCollection Forms {get;}
Headers           Property   System.Collections.Generic.Dictionary[string,string] Headers {get;}
Images            Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Images {get;}
InputFields       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection InputFields {get;}
Links             Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Links {get;}
ParsedHtml        Property   mshtml.IHTMLDocument2 ParsedHtml {get;}
RawContent        Property   string RawContent {get;set;}
RawContentLength  Property   long RawContentLength {get;}
RawContentStream  Property   System.IO.MemoryStream RawContentStream {get;}
Scripts           Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Scripts {get;}
StatusCode        Property   int StatusCode {get;}
StatusDescription Property   string StatusDescription {get;}

polecam sprawdzić jeszcze $page.links oraz $page.images – może się kiedyś przydać. po wykonaniu

$page.AllElements|? id -eq 'section_left'

będzie już widać kawałek interesującego kodu. teraz trzeba wyłowić IP. do tego celu warto zrobić wyrażenie regularne, bo do tego są niezastąpione. np. takie super-proste, które po prostu szuka czterech liczb oddzielonych kropką, gdzie każda liczba ma od 1-3 cyfr:

[regex]$rxIP="\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}"

do celów skryptu można by się poważyć o napisanie porządnej walidacji, czyli dodatkowo, żeby te liczby miały wartości od 1-255. ale to nie ten wpis. po przepuszczeniu wyniku będzie wyświetlone IP:

C:\...ive\_ScriptZ :))o- $page.AllElements|? id -eq 'section_left'|%{ write-host -ForegroundColor Yellow $rxIP.Match($_.outerText)}

można teraz się dalej bawić, potestować na innych stronach, analizując elementy zwracanej strony. nie takie trudne (:

eN.

-o((:: sprEad the l0ve ::))o-

Comments (2)

Skomentuj nExoR Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.