1. 程式人生 > >通過PowerShell獲取TCP響應(類Telnet)

通過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

image

再對比一下telnet的結果

image

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

作者: 付海軍
出處:http://fuhj02.cnblogs.com
版權:本文版權歸作者和部落格園共有
轉載:歡迎轉載,為了儲存作者的創作熱情,請按要求【轉載】,謝謝
要求:未經作者同意,必須保留此段宣告;必須在文章中給出原文連線;否則必究法律責任
個人網站: http://www.fuhaijun.com/

相關推薦

通過PowerShell獲取TCP響應(Telnet)

通常情況下,為了檢測指定的TCP埠是否存活,我們都是通過telnet指定的埠看是否有響應來確定,然而預設情況下win8以後的系統預設是不安裝telnet的。設想一下如果你黑進了一個伺服器,上面沒裝telnet,但是為了進一步滲透進內網,需要探測內部伺服器特定埠是否開啟,同時你還不願意安裝telnet,擔心引起

通過介面獲取所有實現以及通過註解獲取實現的思路

近日,工作上被安排修改專案,別人寫的一套內外網同步系統,修改成一套上報下發系統,處理很複雜,在原先那人的基礎上修改了不少原始碼,比較痛苦的是修改他的原始碼,必須要看懂全部程式碼,改的才能順利進行下去,其實這是違反面向物件的一項重要原則——開閉原則,像這樣的程式碼,換個人寫,

【java】如何通過反射獲取泛型

核心程式碼:(編寫在父類中) public class BaseDaoImpl<T> implements BaseDao<T> {     private Class<

通過PowerShell傳送TCP請求

很多時候我們需要通過Socket傳送特定的TCP請求給伺服器的特定埠來實現探測伺服器的指定埠所開啟的服務。很多語言都有相應的方法實現上述需求,當然,PowerShell也不例外,比如我們要傳送一個簡單的http請求到指定的web伺服器: GET / HTTP/1.1 Host:cn.bing.com

通過PowerShell獲取域名whois資訊

Whois 簡單來說,就是一個用來查詢域名是否已經被註冊,以及註冊域名的詳細資訊的資料庫(如域名所有人、域名註冊商、域名註冊日期和過期日期等)。通過域名Whois伺服器查詢,可以查詢域名歸屬者聯絡方式,以及註冊和到期時間。通常情況下,whois資訊均為真實資訊,通過whois資訊可以找到域名註冊人的很多真實資

python網絡編程,通過服務名稱和會話型(tcp,udp)獲取端口號,簡單的異常處理

one span try num python網絡 int 代碼 sys.argv 通過 作為一個php程序員,同時有對網絡方面感興趣,php就比較蛋疼了,所以就抽了些時間看python 之前學python基礎因為工作原因,斷斷續續的看了個基礎,差不多是可以寫代碼了 最近在

通過js獲取class名的函數封裝

clas ret -1 .class class urn getclass ++ 不同 通過className獲取元素,不同的瀏覽器會有不同的支持情況,所以為了兼容各個瀏覽器在這裏,我寫了幾個函數獲取className的值 function byclass(classn){

php 通過curl獲取遠程數據,返回的是一個數組型的字符串,高手幫忙如何將這個數組型的字符串變成數組。

bsp 選項 con 獲取 pan 如果 clas exe transfer 如 Array([0] => Array([0] => Array([kd_status] => 已簽收[kd_time] => 2014-04-30 18:59:43 [

finfo_open函數不支持,通過二進制流獲取文件

jpg fun bmp gpo png ria open ret from public function getMime() { // $finfo = finfo_open(FILEINFO_MIME_TYPE);

C#通過反射獲取中的方法和參數個數,反射調用方法帶參數

new [] 反射 電腦 ram col sta body create using System; using System.Reflection; namespace ConsoleApp2 { class Program { sta

java通過反射獲取私有的構造方法,及反射擦除泛型數據型約束

code for循環 getmethod 不能 添加 class win flag ring /* * 反射獲取私有的構造方法運行 * 不推薦,破壞了程序的安全性,封裝性 * 暴力私有 */ public class ReflectDemo4 {

Java 自定義註解&通過反射獲取、方法、屬性上的註解

反射 JAVA中的反射是執行中的程式檢查自己和軟體執行環境的能力,它可以根據它發現的進行改變。通俗的講就是反射可以在執行時根據指定的類名獲得類的資訊。   註解的定義 註解通過 @interface 關鍵字進行定義。 /** * 自定義註解 *

spring專案中 通過自定義applicationContext工具獲取到applicationContext上下文物件

spring專案在伺服器啟動的時候 spring容器中就已經被建立好了各種物件,在我們需要使用的時候可以進行呼叫. 工具類程式碼如下 import org.springframework.beans.BeansException; import org.springframewo

通過反射獲取上的註解

@AnnotationField(tableName = "tb_animal", flag = 0)//使用多個註解值,中間用,割開,如果不想使用預設值,可以在註解中為其重新賦值 @AnnotationTest1("tb_animal") public class Animal { priva

過載和覆蓋的區別,通過反射獲取泛型實際型別,列舉要點,五個最常用的集合之間的區別和聯絡,final總結

java面試碰到過的題目之方法過載和覆蓋的區別。 1. 過載方法必須滿足以下條件:  i. 方法名相同。 ii. 方法的引數型別、個數、順序至少有一項不同。 iii. 方法的返回型別可以不相同。 iv. 方法的修飾符可以不相同。 2. 重寫方法必須滿足以下條件:  i. 子

uLua通過反射獲取成員

在Unity中使用ulua框架進行熱更新時,有的時候需要在不更新整包的情況下增加一些小功能,而這期間會用到一些沒有wrap到的Mono屬性或者方法,此時可以用過呼叫tolua的反射獲取。 C#程式碼: using UnityEngine; namespace T

可用來獲取HttpServletResponse響應的資料的包裝器

/** * * MyResponseWrapper * 自定義HttpServletResponse包裝器類,在過濾器中使用,可用於獲取response響應的資料; * 使用方法:在過濾器中的doFilter方法中,建立這個類的物件,包裝原始的response, * 然後將包裝類物件作為引數

C#通過反射獲取中的方法和引數個數,反射呼叫方法帶引數

using System; using System.Reflection; namespace ConsoleApp2 { class Program { static void Main(string[] args)

ios通過字串獲取

兩種方法都可以,第二種的話需要加入執行時的標頭檔案<objc/runtime.h> 1、Class ModelClass = NSClassFromString(className)

java通過反射獲取名、屬性名稱以及@Table註解上的表名稱

import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; import java.lang.reflect.Field; import java.