婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > PowerShell小技巧之發(fā)送TCP請(qǐng)求

PowerShell小技巧之發(fā)送TCP請(qǐng)求

熱門(mén)標(biāo)簽:印臺(tái)區(qū)呼叫中心外呼系統(tǒng) 騰訊地圖標(biāo)注中心怎么標(biāo)注 電話機(jī)器人公司招聘 如何根據(jù)經(jīng)緯度百度地圖標(biāo)注 六寸地圖標(biāo)注點(diǎn)怎么刪除 莫拉克電梯系統(tǒng)外呼怎么設(shè)置 萬(wàn)全縣地圖標(biāo)注app 新鄭電銷(xiāo)機(jī)器人一個(gè)月多少錢(qián) 地圖標(biāo)注的圖案

很多時(shí)候我們需要通過(guò)Socket發(fā)送特定的TCP請(qǐng)求給服務(wù)器的特定端口來(lái)實(shí)現(xiàn)探測(cè)服務(wù)器的指定端口所開(kāi)啟的服務(wù)。很多語(yǔ)言都有相應(yīng)的方法實(shí)現(xiàn)上述需求,當(dāng)然,PowerShell也不例外,比如我們要發(fā)送一個(gè)簡(jiǎn)單的http請(qǐng)求到指定的web服務(wù)器:
GET / HTTP/1.1
Host:cn.bing.com

這里我們想請(qǐng)求微軟必應(yīng)的中文首頁(yè),如果需要通過(guò)PowerShell向cn.bing.com服務(wù)器發(fā)送get請(qǐng)求,就需要?jiǎng)?chuàng)建一個(gè)System.Net.Sockets.TcpClient對(duì)象,向指定的服務(wù)器和端口發(fā)送請(qǐng)求。

具體代碼如下:

復(fù)制代碼 代碼如下:

        =====文件名:Send-TcpRequest.ps1=====
########################################
# Send-TcpRequest.ps1
## Send a TCP request to a remote computer, and return the response.
## If you do not supply input to this script (via either the pipeline, or the
## -InputObject parameter,) the script operates in interactive mode.
##
## Example:
##
## $http = @"
## GET / HTTP/1.1
## Host:cn.bing.com 
## `n`n
## "@
##
## $http | .\Send-TcpRequest cn.bing.com  80
########################################
param(
        [string] $remoteHost = "localhost",
        [int] $port = 80,
        [switch] $UseSSL,
        [string] $inputObject,
        [int] $commandDelay = 100
     )

[string] $output = ""

## Store the input into an array that we can scan over. If there was no input,
## then we will be in interactive mode.
$currentInput = $inputObject
if(-not $currentInput)
{
    $SCRIPT:currentInput = @($input)
}
$scriptedMode = [bool] $currentInput

function Main
{
    ## Open the socket, and connect to the computer on the specified port
    if(-not $scriptedMode)
    {
        write-host "Connecting to $remoteHost on port $port"
    }

    trap { Write-Error "Could not connect to remote computer: $_"; exit }
    $socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)

    if(-not $scriptedMode)
    {
        write-host "Connected. Press ^D followed by [ENTER] to exit.`n"
    }

    $stream = $socket.GetStream()

    if($UseSSL)
    {
        $sslStream = New-Object System.Net.Security.SslStream $stream,$false
        $sslStream.AuthenticateAsClient($remoteHost)
        $stream = $sslStream
    }

    $writer = new-object System.IO.StreamWriter $stream

    while($true)
    {
        ## Receive the output that has buffered so far
        $SCRIPT:output += GetOutput

        ## If we're in scripted mode, send the commands,
        ## receive the output, and exit.
        if($scriptedMode)
        {
            foreach($line in $currentInput)
            {
                $writer.WriteLine($line)
                $writer.Flush()
                Start-Sleep -m $commandDelay
                $SCRIPT:output += GetOutput
            }

            break
        }
        ## If we're in interactive mode, write the buffered
        ## output, and respond to input.
        else
        {
            if($output)
            {
                foreach($line in $output.Split("`n"))
                {
                    write-host $line
                }
                $SCRIPT:output = ""
            }

            ## Read the user's command, quitting if they hit ^D
            $command = read-host
            if($command -eq ([char] 4)) { break; }

            ## Otherwise, Write their command to the remote host
            $writer.WriteLine($command)
            $writer.Flush()
        }
    }

    ## Close the streams
    $writer.Close()
    $stream.Close()

    ## If we're in scripted mode, return the output
    if($scriptedMode)
    {
        $output
    }
}

## Read output from a remote host
function GetOutput
{
    ## Create a buffer to receive the response
    $buffer = new-object System.Byte[] 1024
    $encoding = new-object System.Text.AsciiEncoding

    $outputBuffer = ""
    $foundMore = $false

    ## Read all the data available from the stream, writing it to the
    ## output buffer when done.
    do
    {
        ## Allow data to buffer for a bit
        start-sleep -m 1000

        ## Read what data is available
        $foundmore = $false
        $stream.ReadTimeout = 1000

        do
        {
            try
            {
                $read = $stream.Read($buffer, 0, 1024)

                if($read -gt 0)
                {
                    $foundmore = $true
                    $outputBuffer += ($encoding.GetString($buffer, 0, $read))
                }
            } catch { $foundMore = $false; $read = 0 }
        } while($read -gt 0)
    } while($foundmore)

    $outputBuffer
}
. Main
該腳本使用方法如下:
$http = @"

GET / HTTP/1.1
Host:cn.bing.com
`n`n
"@
$http | .\Send-TcpRequest cn.bing.com 80

執(zhí)行效果如圖所示:

需要說(shuō)明的是,由于頁(yè)面返回的內(nèi)容太長(zhǎng)了,這里至少是將返回的內(nèi)容緩存在一個(gè)變量里,并只輸出了變量的頭10行。
有了這個(gè)腳本,我們就可以向指定的web服務(wù)器發(fā)送特定的請(qǐng)求,來(lái)實(shí)現(xiàn)模擬登陸和操作的功能了。

您可能感興趣的文章:
  • PowerShell小技巧之嘗試ssh登錄
  • PowerShell腳本開(kāi)發(fā)之收發(fā)TCP消息包
  • PowerShell腳本開(kāi)發(fā)之收發(fā)UDP消息包
  • PowerShell腳本開(kāi)發(fā)嘗試登錄SQL Server
  • PowerShell腳本開(kāi)發(fā)之批量掃描IP和端口
  • PowerShell腳本開(kāi)發(fā)之嘗試登錄ftp

標(biāo)簽:天水 南昌 疫苗接種 湘潭 喀什 襄陽(yáng) 汕頭 臨汾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PowerShell小技巧之發(fā)送TCP請(qǐng)求》,本文關(guān)鍵詞  PowerShell,小,技巧,之,發(fā)送,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PowerShell小技巧之發(fā)送TCP請(qǐng)求》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PowerShell小技巧之發(fā)送TCP請(qǐng)求的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 包头市| 宿州市| 濉溪县| 什邡市| 通榆县| 福建省| 襄垣县| 峨边| 五寨县| 崇文区| 镇坪县| 黄龙县| 通化市| 额济纳旗| 荔波县| 牟定县| 大丰市| 西乌珠穆沁旗| 玉门市| 滦平县| 泊头市| 获嘉县| 安吉县| 凤庆县| 金阳县| 水城县| 邹平县| 老河口市| 江阴市| 安康市| 萝北县| 仪陇县| 夹江县| 天津市| 苏尼特右旗| 乌鲁木齐县| 潼南县| 保定市| 崇明县| 丰宁| 丽水市|