Yksinkertaisen HTTP-verkkopalvelimen käyttäminen PowerShellin avulla

Testaustarkoituksiin tai yksinkertaisena tynkänä palvelun käyttöönottovaiheessa minun on säännöllisesti käytettävä yksinkertaista verkkopalvelinta Windowsissa. Voit välttää täysin varustetun IIS-asennuksen suorittamalla yksinkertaisen HTTP-verkkopalvelimen suoraan PowerShell-konsolista. Voit käyttää tällaista verkkopalvelinta missä tahansa TCP-portissa sisäänrakennetun palvelimen avullaSystem.Net.HttpListener.NET-luokka.

Avaa PowerShell-konsoli ja luo HTTP-kuuntelija:

$httpListener = New-Object System.Net.HttpListener

Määritä sitten kuunneltava portti. Tässä esimerkissä haluan käyttää HTTP-verkkopalvelinta portissa 9090.

$httpListener.Prefixes.Add("https://localhost:9090/")

  • Varmista, että muut prosessit eivät käytä tätä porttia. Voit selvittää, mikä prosessi kuuntelee TCP:tä tai UDP:tä Windowsissa.
  • Jos haluat kuunnella kaikissa verkkoliitännöissä, käytähttps://+:9090/osoite.

Käynnistä kuuntelija:

$httpListener.Start()

Voit käyttää erilaisia ​​todennustyyppejä (Basic, Digest, Windows, Negotiate tai NTLM) HttpListener-objektissasi tai sitoa SSL-varmenteen HTTPS:n käyttöönottamiseksi.

Jos suoritat tämän koodin, Windowsissa näkyy erillinen prosessi, joka odottaa yhteyttä portissa 9090. Tarkista se komennolla:

nestat –na 9090

tai näytä luettelo avoimista porteista PowerShellin avulla:

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, State | Sort-Object LocalPort |ft

Muista avata tämä portti Windows Defenderin palomuurissa. Voit nopeasti luoda säännön palomuuriportin avaamiseksi PowerShell-komennolla:

New-NetFirewallRule -DisplayName "AllowTestWebServer" -Direction Inbound -Protocol TCP –LocalPort 9090 -Action Allow

Luo nyt kiintolevyllesi tekstitiedosto HTML-koodilla, jonka haluat verkkopalvelimesi näyttävän. Esimerkiksi:

<!DOCTYPE html>
<html>
<head>
<title>
Lightweight PowerShell Web Server</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {background-color:#ffffff;background-repeat:no-repeat;background-position:top left;background-attachment:fixed;}
h1{font-family:Arial, sans-serif;color:#000000;background-color:#ffffff;}
p {font-family:Georgia, serif;font-size:14px;font-style:normal;font-weight:normal;color:#000000;background-color:#ffffff;}
</style>
</head>
<body>
<h1>Test web page </h1>
<p>This web page was generated by PowerShell using the System.Net.HttpListener class</p>
</body>
</html>

Tallensin tämän HTML-koodin tiedostoon C:\PS\testwebpage.html UTM-8-koodauksella.

Suorita sitten seuraavat komennot lukeaksesi HTML-tiedostosi ja lähettääksesi vastauksen käyttäjän selaimeen.

$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType="text/HTML"
$WebContent = Get-Content  -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()

Avaa HTTP-palvelimesi URL-osoite selaimessa (https://localhost:9090) tai käytä PowerShellia saadaksesi verkkosivun sisällön. Skripti palauttaa HTML-koodin vain kerran, minkä jälkeen kuuntelijasi pysäytetään automaattisesti (vain yksi käyttäjän pyyntö käsitellään).

Lisää luettavaa:Tumman verkon tosiasiat paljastettiin: myyttejä ja tilastoja salaisesta webistä

Vapauta TCP-portti:

$httpListener.Close()

Jos haluat HTTP-palvelimen jatkavan sivusi palauttamista, sinun on lisättävä silmukkaan PowerShell-koodi. Seuraava esimerkki käynnistää HTTP-palvelimen silmukassa, joka päättyy, kun mitä tahansa näppäintä painetaan PowerShell-konsolissa.

write-host "Press any key to stop the HTTP listener after next request"
while (!([console]::KeyAvailable)) {
$context = $httpListener.GetContext()
$context.Response.StatusCode = 200
$context.Response.ContentType="text/HTML"
$WebContent = Get-Content -Path "C:\PS\testwebpage.html" -Encoding UTF8
$EncodingWebContent = [Text.Encoding]::UTF8.GetBytes($WebContent)
$context.Response.OutputStream.Write($EncodingWebContent , 0, $EncodingWebContent.Length)
$context.Response.Close()
Write-Output "" # Newline
}
$httpListener.Close()

PowerShell-HTTP-palvelin pysyy toiminnassa, kunnes suljet PowerShell-konsolin tai lopetat istunnon käyttämällä.Closemenetelmä.

Voit suorittaa tämän PowerShell-komentosarjan Windows-palveluna.

Voit käyttää tällaista kevyttä verkkopalvelinta millä tahansa Windows-isännällä ilman Internet Information Services -palvelua tai muiden kolmannen osapuolen ohjelmistojen asennusta. Järjestelmänvalvojan oikeuksia ei vaadita. Voit käyttää tätä HTTPListeneria yksinkertaisena REST-palvelimena tai saada tietoja etätietokoneelta HTTP:n kautta.

Related Posts