通过PowerShell获取TCP响应(类Telnet)
来源:互联网 发布:淘宝如何设置两个客服 编辑:程序博客网 时间:2024/06/09 16:11
通常情况下,为了检测指定的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
再对比一下telnet的结果
结果是一样的,以后没有telnet也难不住大家了,have fun!^_^
作者: 付海军
出处:http://blog.csdn.net/fuhj02
版权:本文版权归作者和csdn共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://www.fuhaijun.com/
0 0
- 通过PowerShell获取TCP响应(类Telnet)
- JAVA通过TCP编程模拟telnet程序
- 通过PowerShell获取域名whois信息
- 通过PowerShell获取Windows系统密码Hash
- Powershell批量Telnet端口脚本
- 通过PowerShell操作SQLConnection .NET类
- 通过PowerShell操作SQLConnection .NET类
- 通过PowerShell操作SQLConnection .NET类
- iOS 通过NSURLSession只获取响应头
- 通过TCP请求,获取所有合约
- Logstash通过TCP获取log4j日志
- 通过telnet的攻击
- Powershell获取当前路径
- powershell 通过rtx安全日志获取用户的ip地址对应
- WinServer2008下通过powershell获取IIS等角色功能列表,保存至txt
- swift3.0通过响应链获取当前试图的控制器
- powershell 获取一个类的所有方法和属性
- 使用Powershell 的获取别的机器WMI类失败解决方法!
- struts2中autocompleter标签使用
- IOS开发-一些总结
- C++ STL 栈和队列的使用
- 方法中使用new,变量范围探索
- 2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工
- 通过PowerShell获取TCP响应(类Telnet)
- 自旋锁和互斥锁
- 输入一串数字,求比这个数大的下一个回文数
- DragonBones for Cocos2d-x
- HDU 4709 Herding
- akoj-1189-字符串去特定字符
- 快排
- 单例模式
- 表格框架(frame)属性