Para fins de teste ou como um esboço simples no estágio de implantação do serviço, preciso executar regularmente um servidor Web simples no Windows. Para evitar uma instalação completa do IIS, você pode executar um servidor Web HTTP simples diretamente do console do PowerShell. Você pode executar esse servidor web em qualquer porta TCP usando o integradoSystem.Net.HttpListenerClasse .NET.
Abra seu console do PowerShell e crie um ouvinte HTTP:
$httpListener = New-Object System.Net.HttpListener
Em seguida, especifique a porta para escutar. Neste exemplo, quero executar um servidor web HTTP na porta 9090.
$httpListener.Prefixes.Add("https://localhost:9090/")
- Certifique-se de que esta porta não esteja sendo usada por outros processos. Você pode descobrir qual processo está escutando um TCP ou UDP no Windows.
- Para ouvir em todas as interfaces de rede, use o
https://+:9090/endereço.
Inicie o ouvinte:
$httpListener.Start()
Você pode usar diferentes tipos de autenticação (Basic, Digest, Windows, Negotiate ou NTLM) em seu objeto HttpListener ou vincular um certificado SSL para implementar HTTPS.
Se você executar esse código, um processo separado aguardando conexão na porta 9090 aparecerá no Windows. Verifique usando o comando:
nestat –na 9090
ou exiba uma lista de portas abertas usando o PowerShell:
Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, State | Sort-Object LocalPort |ft


Lembre-se de abrir esta porta no Firewall do Windows Defender. Você pode criar rapidamente uma regra para abrir uma porta de firewall usando o comando do PowerShell:
New-NetFirewallRule -DisplayName "AllowTestWebServer" -Direction Inbound -Protocol TCP –LocalPort 9090 -Action Allow
Agora crie um arquivo de texto em seu disco rígido com o HTML que você deseja que seu servidor web exiba. Por exemplo:
<!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>


Salvei este código HTML em C:\PS\testwebpage.html com codificação UTM-8.
Em seguida, execute os seguintes comandos para ler seu arquivo HTML e enviar uma resposta ao navegador do usuário.
$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()


Abra o endereço URL do seu servidor HTTP em um navegador (https://localhost:9090) ou use o PowerShell para obter o conteúdo de uma página da web. O script retorna um código HTML apenas uma vez, após a qual seu ouvinte será interrompido automaticamente (apenas uma solicitação do usuário será processada).
Mais leitura:Fatos da Dark Web revelados: mitos e estatísticas sobre a Web secreta
Libere a porta TCP:
$httpListener.Close()
Se quiser que o servidor HTTP continue retornando sua página, você precisará adicionar o código do PowerShell ao loop. O exemplo a seguir inicia um servidor HTTP em um loop que termina quando qualquer tecla é pressionada no console do PowerShell.
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()
Um servidor HTTP do PowerShell permanece ativo até você fechar o console do PowerShell ou encerrar a sessão usando o comando.Closemétodo.
Você pode executar este script do PowerShell como um serviço do Windows.
Você pode executar um servidor web tão leve em qualquer host Windows sem serviços de informações da Internet ou instalação de outro software de terceiros. Não são necessários privilégios de administrador. Você pode usar este HTTPListener como um servidor REST simples ou para obter informações de um computador remoto via HTTP.















