PowerShell小技巧之獲取TCP響應(yīng)(類Telnet)
通常情況下,為了檢測(cè)指定的TCP端口是否存活,我們都是通過(guò)telnet指定的端口看是否有響應(yīng)來(lái)確定,然而默認(rèn)情況下win8以后的系統(tǒng)默認(rèn)是不安裝telnet的。設(shè)想一下如果你黑進(jìn)了一個(gè)服務(wù)器,上面沒(méi)裝telnet,但是為了進(jìn)一步滲透進(jìn)內(nèi)網(wǎng),需要探測(cè)內(nèi)部服務(wù)器特定端口是否打開(kāi),同時(shí)你還不愿意安裝telnet,擔(dān)心引起管理員注意。那么好吧,在這個(gè)情況下你需要我的這個(gè)腳本。由于它是原生態(tài)的PowerShell語(yǔ)句完成,木有telnet你也照樣能檢測(cè)TCP端口的情況了。
下面首先上代碼,后面進(jìn)行講解:
=====文件名:Get-TCPResponse.ps1=====
Function Get-TCPResponse {
<# Author:fuhj(powershell#live.cn ,http://fuhaijun.com)
.SYNOPSIS
Tests TCP port of remote or local system and returns a response header
if applicable
.DESCRIPTION
Tests TCP port of remote or local system and returns a response header
if applicable
If server has no default response, then Response property will be NULL
.PARAMETER Computername
Local or remote system to test connection
.PARAMETER Port
TCP Port to connect to
.PARAMETER TCPTimeout
Time until connection should abort
.EXAMPLE
Get-TCPResponse -Computername pop.126.com -Port 110
Computername : pop.126.com
Port : 110
IsOpen : True
Response : +OK Welcome to coremail Mail Pop3 Server (126coms[75c606d72bf436dfbce6.....])
Description
-----------
Checks port 110 of an mail server and displays header response.
#>
[OutputType('Net.TCPResponse')]
[cmdletbinding()]
Param (
[parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Alias('__Server','IPAddress','IP','domain')]
[string[]]$Computername = $env:Computername,
[int[]]$Port = 25,
[int]$TCPTimeout = 1000
)
Process {
ForEach ($Computer in $Computername) {
ForEach ($_port in $Port) {
$stringBuilder = New-Object Text.StringBuilder
$tcpClient = New-Object System.Net.Sockets.TCPClient
$connect = $tcpClient.BeginConnect($Computer,$_port,$null,$null)
$wait = $connect.AsyncWaitHandle.WaitOne($TCPtimeout,$false)
If (-NOT $wait) {
$object = [pscustomobject] @{
Computername = $Computer
Port = $_Port
IsOpen = $False
Response = $Null
}
} Else {
While ($True) {
#Let buffer
Start-Sleep -Milliseconds 1000
Write-Verbose "Bytes available: $($tcpClient.Available)"
If ([int64]$tcpClient.Available -gt 0) {
$stream = $TcpClient.GetStream()
$bindResponseBuffer = New-Object Byte[] -ArgumentList $tcpClient.Available
[Int]$response = $stream.Read($bindResponseBuffer, 0, $bindResponseBuffer.count)
$Null = $stringBuilder.Append(($bindResponseBuffer | ForEach {[char][int]$_}) -join '')
} Else {
Break
}
}
$object = [pscustomobject] @{
Computername = $Computer
Port = $_Port
IsOpen = $True
Response = $stringBuilder.Tostring()
}
}
$object.pstypenames.insert(0,'Net.TCPResponse')
Write-Output $object
If ($Stream) {
$stream.Close()
$stream.Dispose()
}
$tcpClient.Close()
$tcpClient.Dispose()
}
}
}
}
首先創(chuàng)建一個(gè)System.Net.Sockets.TCPClient對(duì)象,去連接指定的域名和端口,瞬間斷開(kāi)的那是服務(wù)器沒(méi)開(kāi)那個(gè)端口,直接被拒絕了,如果沒(méi)拒絕,那就等著服務(wù)器端給你響應(yīng),然后讀取字節(jié)流拼接起來(lái)進(jìn)行解析。
最后需要強(qiáng)調(diào)的是需要對(duì)打開(kāi)的流和TCP連接進(jìn)行關(guān)閉,以便釋放資源
調(diào)用方法如下:
Get-TCPResponse -Computername pop.126.com -Port 110
再對(duì)比一下telnet的結(jié)果
結(jié)果是一樣的,以后沒(méi)有telnet也難不住大家了,have fun!^_^
相關(guān)文章
PowerShell Out-File追加字符串到文件末尾的方法
這篇文章主要介紹了PowerShell Out-File追加字符串到文件末尾的方法,只要加一個(gè)-Append參數(shù)即可實(shí)現(xiàn)追加內(nèi)容需求,需要的朋友可以參考下2014-08-08Powershell實(shí)現(xiàn)加密解密文本文件方法實(shí)例
這篇文章主要介紹了Powershell實(shí)現(xiàn)加密解密文本文件方法實(shí)例,本文直接給出加密和解密代碼實(shí)例,需要的朋友可以參考下2015-04-04Powershell小技巧之使用Jint引擎在PowerShell中執(zhí)行Javascript函數(shù)
這里演示如何利用PowerShell將一段Javascript函數(shù)字符串交給Jint引擎去執(zhí)行。方法很簡(jiǎn)單,希望對(duì)大家有所幫助2014-09-09PowerShell入門教程之Cmd命令與PowerShell命令相互調(diào)用的方法
這篇文章主要介紹了PowerShell入門教程之Cmd命令與PowerShell命令相互調(diào)用的方法,本文講解了在Cmd命令中調(diào)用PowerShell命令、在PowerShell命令中調(diào)用Cmd命令的方法,需要的朋友可以參考下2014-10-10powershell解決win10開(kāi)始菜單和通知中心無(wú)法打開(kāi)
這篇文章主要介紹了powershell解決win10開(kāi)始菜單和通知中心無(wú)法打開(kāi)的相關(guān)資料,需要的朋友可以參考下2015-10-10PowerShell數(shù)組結(jié)合switch語(yǔ)句產(chǎn)生的奇特效果介紹
這篇文章主要介紹了PowerShell數(shù)組結(jié)合switch語(yǔ)句產(chǎn)生的奇特效果介紹,產(chǎn)生了類似枚舉的效果,需要的朋友可以參考下2014-08-08PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法
這篇文章主要介紹了PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法,也就是原樣輸出字符串,不理會(huì)字符串可能包含的換行符、變量等,需要的朋友可以參考下2014-08-08