一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - PowerShell - PowerShell小技巧之獲取TCP響應(類Telnet)

PowerShell小技巧之獲取TCP響應(類Telnet)

2020-06-24 10:33PowerShell教程網 PowerShell

這篇文章主要介紹了使用PowerShell獲取TCP響應(類Telnet)的小技巧,需要的朋友可以參考下

通常情況下,為了檢測指定的TCP端口是否存活,我們都是通過telnet指定的端口看是否有響應來確定,然而默認情況下win8以后的系統默認是不安裝telnet的。設想一下如果你黑進了一個服務器,上面沒裝telnet,但是為了進一步滲透進內網,需要探測內部服務器特定端口是否打開,同時你還不愿意安裝telnet,擔心引起管理員注意。那么好吧,在這個情況下你需要我的這個腳本。由于它是原生態的PowerShell語句完成,木有telnet你也照樣能檢測TCP端口的情況了。

下面首先上代碼,后面進行講解:

 

復制代碼 代碼如下:


        =====文件名: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()
            }
        }
    }
}

 

首先創建一個System.Net.Sockets.TCPClient對象,去連接指定的域名和端口,瞬間斷開的那是服務器沒開那個端口,直接被拒絕了,如果沒拒絕,那就等著服務器端給你響應,然后讀取字節流拼接起來進行解析。
最后需要強調的是需要對打開的流和TCP連接進行關閉,以便釋放資源
調用方法如下:

復制代碼 代碼如下:

Get-TCPResponse -Computername pop.126.com -Port 110
 

PowerShell小技巧之獲取TCP響應(類Telnet)

再對比一下telnet的結果

PowerShell小技巧之獲取TCP響應(類Telnet)

結果是一樣的,以后沒有telnet也難不住大家了,have fun!^_^

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草视频网站在线观看 | 欧美va天堂va视频va在线 | 99爱视频| 国产成人成人一区二区 | 日本 视频 在线 | 国产精品手机视频一区二区 | 精品久久久久久国产 | 亚洲男人的天堂网站 | 高h喷水荡肉爽文np肉色文 | 日本漫画无翼乌 | 天天摸天天操天天爽 | 日本www色 | 青青青青在线视频 | 91精品国产色综合久久 | 青草国产福利视频免费观看 | 国产精品成人免费 | 青草视频网| 久久毛片免费看一区二区三区 | 亚洲AV国产国产久青草 | 亚洲色图综合网 | 69日本xxxxxxxxx98| 国产精品久久久久久久久免费hd | 大香人蕉免费视频75 | 色偷偷91久久综合噜噜噜 | 亚洲欧洲日产国码无码av | 风间由美一区二区播放合集 | 久久精品麻豆国产天美传媒果冻 | 2020年国产精品午夜福利在线观看 | 日韩欧美中文字幕一区二区三区 | 特黄特级毛片免费视 | 变态女王麻麻小说在线阅读 | 春光乍泄在线 | 国内精品视频一区二区三区八戒 | 海角社区在线登录 | 久久青青草原综合伊人 | 青青草久| 国色天香社区视频免费观看3 | 果冻传媒和91制片厂网站软件 | 久久91精品国产91久久户 | 精品AV综合导航 | 小伙无套内射老女人 |