PowerShell小技巧之发送TCP请求
å¾å¤æ¶åæ们éè¦éè¿Socketåéç¹å®çTCP请æ±ç»æå¡å¨çç¹å®ç«¯å£æ¥å®ç°æ¢æµæå¡å¨çæå®ç«¯å£æå¼å¯çæå¡ãå¾å¤è¯è¨é½æç¸åºçæ¹æ³å®ç°ä¸è¿°éæ±ï¼å½ç¶ï¼PowerShellä¹ä¸ä¾å¤ï¼æ¯å¦æ们è¦åéä¸ä¸ªç®åçhttp请æ±å°æå®çwebæå¡å¨ï¼
GET / HTTP/1.1
Host:cn.bing.com
è¿éæ们æ³è¯·æ±å¾®è½¯å¿åºçä¸æé¦é¡µï¼å¦æéè¦éè¿PowerShellåcn.bing.comæå¡å¨åéget请æ±ï¼å°±éè¦å建ä¸ä¸ªSystem.Net.Sockets.TcpClient对象ï¼åæå®çæå¡å¨å端å£åé请æ±ã
å·ä½ä»£ç å¦ä¸ï¼
代码如下:
=====æ件åï¼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
æ§è¡ææå¦å¾æ示ï¼
éè¦è¯´æçæ¯ï¼ç±äºé¡µé¢è¿åçå容太é¿äºï¼è¿éè³å°æ¯å°è¿åçå容ç¼åå¨ä¸ä¸ªåééï¼å¹¶åªè¾åºäºåéç头10è¡ã
æäºè¿ä¸ªèæ¬ï¼æ们就å¯ä»¥åæå®çwebæå¡å¨åéç¹å®ç请æ±ï¼æ¥å®ç°æ¨¡æç»éåæä½çåè½äºã
相关推荐
wangqd 2020-11-09
liupengqwert 2020-10-28
一叶梧桐 2020-10-14
lzzyok 2020-10-10
88550291 2020-08-21
yang0cs 2020-07-04
MichelinMessi 2020-06-13
fengshantao 2020-06-11
安得情怀似旧时 2020-06-11
llxxyy0 2020-06-05
houjinkai 2020-06-03
Dukezhao 2020-05-29
yshlovelx 2020-05-27
dancheng 2020-05-26
songjie 2020-02-14
TMD咯MySQL 2020-05-09
简单的快乐 2020-05-09
爱传文档 2020-05-04