设为首页收藏本站
查看: 6543|回复: 36

[其它] 原创powershell扫描网络主机示例,天下武功,唯快不破

  [复制链接]
  • TA的每日心情
    擦汗
    5 小时前
  • 签到天数: 100 天

    [LV.6]常住居民II

    发表于 2020-4-25 16:44:19 | 显示全部楼层 |阅读模式
    本帖最后由 zyfsky666 于 2020-4-25 16:48 编辑

    通过调用.net 对象socket和多线程完美快速扫描出站点或主机开放端口和共享资源,支持局域网主机,公共站点,本地外网扫描
    1. #Invoke-RestMethod -Uri "http://ip-api.com/json/202.101.224.69?lang=zh-CN"
    2. [void][System.Reflection.Assembly]::LoadWithPartialName("System.Net")
    3. [void][System.Reflection.Assembly]::LoadWithPartialName("System.Net.Sockets")
    4. $ErrorActionPreference='Suspend'
    5. function Scanports () #多线程端口扫描
    6. {
    7. param([string]$ip_host,
    8. [parameter( Mandatory = $true,ParameterSetName = "single")][int]$port,
    9. [parameter( Mandatory = $true,ParameterSetName = "range")][ValidatePattern('^\d{1,5}-\d{1,5}]$rangeports,
    10. [parameter( Mandatory = $true,ParameterSetName = "servers")][switch]$serverports,
    11. [int]$timeout=3) ###tcp连接超时时间
    12. $start=Get-Date #计时
    13. ##设置好线程
    14. $throttleLimit = 30 ###限制同时运行的线程数
    15. $SessionState = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
    16. $Pool = [runspacefactory]::CreateRunspacePool(1, $throttleLimit, $SessionState, $Host)
    17. $Pool.Open()
    18. $okports=@()
    19. $serports=@"
    20. ftp文件传输服务,21
    21. ssh超级终端服务,22
    22. telnet终端服务,23
    23. web网站服务,80
    24. web证书加密服务,443
    25. sqlserver数据库服务,1433
    26. mysql数据库服务,3306
    27. oracle数据库服务,1521
    28. smb共享文件服务,445
    29. dns域名解析服务,53
    30. Exchange imap服务,143
    31. PPTP远程隧道服务,1723
    32. POP3邮件传输服务,110
    33. SMTP邮件传输服务,25
    34. windows远程桌面服务,3389
    35. 域LDAP服务器,389
    36. 域全局编录服务器,3268
    37. windows更新wsus服务,8530
    38. DHCP服务,547
    39. web代理服务,8080
    40. "@|ConvertFrom-Csv -Header "描述","端口" -Delimiter ","; ##设置服务器常用端口
    41. if ($port -ne $null){ $okports+=$port}
    42. if ($rangeports -ne $null){
    43. $ary=$rangeports -split '-'
    44. $okports=$ary[0]..$ary[1]
    45. #$okports
    46. }
    47. if ($serverports){ $okports=$serports[0..$serports.length].端口}
    48. $handles=@() #全局线程句柄组对象
    49. $threads = @() #全局线程ID组对象
    50. for ($x = 0; $x -lt $okports.length; $x++) {
    51. #$okports[$x]
    52. #执行的任务模块

    53. [ScriptBlock]$task={
    54. param($ip_host,$ports,$timeout,[pscustomobject]$serports)
    55. #找mac
    56.   $whomymac = Add-Type -memberDefinition @"
    57.   [DllImport("Iphlpapi.dll")]public static extern int SendARP(Int32 dest,Int32 host,byte[] mac,ref Int32 length);
    58.   [DllImport("Ws2_32.dll")]public static extern Int32 inet_addr(string ip);
    59. "@ -passthru -name MACSEE
    60. #找主机名,或是IP
    61. if($ip_host -match '\d+\.\d+\.\d+\.\d+'){
    62. ##如果是ip
    63. $hostname=[System.Net.Dns]::GetHostByAddress($ip_host).HostName
    64. $ip=$ip_host
    65. }
    66. else{
    67. $hostname=[System.Net.Dns]::GetHostByName($ip_host)
    68. $ip=($hostname.AddressList|%{$_.IPAddressToString}) -join ','
    69. $hostname=$ip_host
    70. }
    71. $aa=New-Object Byte[] 6;
    72. $ldest= $whomymac::inet_addr($ip)
    73. $len=6
    74. $res=$whomymac::SendARP($ldest,0,$aa,[ref]$len)
    75. $mac= [System.BitConverter]::ToString($aa,0,6)
    76. $tcp=New-Object System.Net.Sockets.TcpClient
    77. $tcp.Connect($ip_host,$ports)
    78. if ($? -ne $true){$success=$false}Else {$success=$true}
    79. $state=""|select "主机名","IP地址","MAC地址","端口","描述","状态"
    80. $index=$serports.端口.IndexOf($ports.ToString())
    81. if ($index -ne -1){$state.描述=$serports[$index].描述} else{$state.描述="未知"}
    82. $state.主机名=$hostname;$state.IP地址=$ip;$state.MAC地址=$mac;$state.端口=$ports
    83. if ($success){$state.状态="打开"}else{$state.状态="关闭"}
    84. return $state|?{$_.状态 -eq "打开"}
    85. }

    86. ###任何[ScriptBlock]模块都要传递变量,不能直接用外面的要.AddArgument
    87. $powershell = [powershell]::Create().AddScript($task).AddArgument($ip_host).AddArgument($okports[$x]).AddArgument($timeout).AddArgument($serports)
    88. $powershell.RunspacePool = $Pool
    89. $handle=$powershell.BeginInvoke()
    90. $threads += $powershell
    91. $handles +=$handle
    92. }
    93. ##等待所有线程自动结束并返回结果.....
    94. $receivePS=@() #收集所有线程执行结果
    95.    Write-Host "正在扫描,请稍等"
    96. do {
    97.   $i = 0
    98.   $done = $true
    99.   foreach ($handle in $handles) {
    100.     if ($handle -ne $null) {
    101.       if ($handle.IsCompleted) {
    102.    Write-Host "▇" -NoNewline -ForegroundColor Red
    103.        $receivePS +=$threads[$i].EndInvoke($handle)
    104.         $threads[$i].Dispose()
    105.         $handles[$i] = $null
    106.       } else {
    107.         $done = $false
    108.       }
    109.     }
    110.     $i++
    111.   }
    112.   if (-not $done) { Start-Sleep -Milliseconds 500}
    113. } until ($done)
    114. $jishi=(New-TimeSpan $start).TotalMinutes
    115. $js="{0:F2}" -f $jishi
    116. Write-Host "共耗时$($js)秒" -ForegroundColor Green
    117. return $receivePS|ft -AutoSize|Out-String
    118. }
    119. class ipgotoseek
    120. {
    121. [ValidateSet("localip", "lanip","wanip")]
    122. [string]$ip
    123. # Constructor
    124.    ipgotoseek([string]$_IP)
    125.    {
    126.        $this.ip =$_IP      
    127.    }
    128. # Instance method
    129. [string] ipapp([string] $ipsocket="127.0.0.1")
    130. {
    131. [string]$reports="";$rep=$null;$ok=$null ##报告初始化
    132. if ($this.ip -eq "localip"){
    133. try{
    134. $ipstring=Invoke-RestMethod -Uri "http://pv.sohu.com/cityjson?ie=utf-8"
    135. $ipstring=$ipstring -replace '(.*)(\{.*\})(.*)','$2'
    136. $ipok=($ipstring.trim()|ConvertFrom-Json).cip
    137. $ez=(Invoke-RestMethod -Uri "http://ip-api.com/json/$($ipok)?lang=zh-CN"|Out-String).trim()
    138. #获取计算机IP地址,取IP不为空的网卡IP地址
    139. $ips = gwmi Win32_NetworkAdapterConfiguration |?{ $_.IPAddress -ne $null}
    140. $ipdata=$null
    141. foreach ($ip in $ips )
    142. {
    143. #查找对应网速
    144. $ok=Get-WmiObject -Class Win32_NetworkAdapter -Filter "DeviceID='$($ip.Index)'"|Select-Object Description,speed,MACAddress
    145. $ipdata+="网卡名称:$($ip.Description) IP地址:$($ip.IPAddress[0]) 速率:$($ok.speed/1000/1000)M MAC地址:$($ok.MACAddress)`n`r"
    146. $ipsocket=$($ip.IPAddress[0])
    147. }
    148. $ipdata=$ipdata.Substring(0,$ipdata.Length-2)

    149. $reports= "本机局域网IP:`r`n$($ipdata)`r`n"
    150. $reports+=“本地IP地址开放端口详情:`r`n"+(Scanports -ip_host $ipsocket -serverports).trim()+“`r`n本地外网IP:`r`n$($ez)`r`n”
    151. $rep=Scanports -ip_host $ipok -serverports
    152. $reports+="外网IP开放端口详情"+$rep.trim()
    153. return $reports
    154. }
    155. catch{return $Error[0].Exception.Message}   
    156. }
    157. elseif(
    158. $this.ip -eq "lanip"
    159. )
    160. {
    161. #找mac
    162.   $whomymac = Add-Type -memberDefinition @"
    163.   [DllImport("Iphlpapi.dll")]public static extern int SendARP(Int32 dest,Int32 host,byte[] mac,ref Int32 length);
    164.   [DllImport("Ws2_32.dll")]public static extern Int32 inet_addr(string ip);
    165. "@ -passthru -name MACSEE
    166. #找主机名,或是IP
    167. if($ipsocket -match '\d+\.\d+\.\d+\.\d+'){
    168. ##如果是ip
    169. try{$hostname=[System.Net.Dns]::GetHostByAddress($ipsocket).HostName}catch{$hostname="未知"}
    170. $ipz=$ipsocket
    171. }
    172. else{
    173. $hostname=[System.Net.Dns]::GetHostByName($ipsocket)
    174. $ipz=($hostname.AddressList|%{$_.IPAddressToString}) -join ','
    175. $hostname=$ipsocket
    176. }
    177. $aa=New-Object Byte[] 6;
    178. $ldest= $whomymac::inet_addr($ipz)
    179. $len=6
    180. $res=$whomymac::SendARP($ldest,0,$aa,[ref]$len)
    181. $mac= [System.BitConverter]::ToString($aa,0,6)
    182. $state=""|select "主机名","IP地址","MAC地址","状态"
    183. $state.主机名=$hostname;$state.IP地址=$ipz;$state.MAC地址=$mac

    184. if ($mac -match '^00.*'){$state.状态="离线"} else{$state.状态="在线";$rep=Scanports -ip_host $ipsocket -serverports}
    185. $reports= ($state|Out-String)+"`r`n"+“该IP地址开放端口详情:`r`n"+$rep
    186. $zy=(& net view $ipz )|Out-String
    187. $reports=$reports+"共享资源`r`n"+$zy
    188. return $reports
    189. }

    190. else
    191. {
    192. try{$ok=Invoke-RestMethod -Uri "http://ip-api.com/json/$($ipsocket)?lang=zh-CN"|Out-String}catch{}
    193. $rep=Scanports -ip_host $ipsocket -serverports
    194. $reports="该外网IP来源:"+$ok.TrimEnd()+"`r`n"+"开放端口详情:`r`n"+$rep
    195. return $reports
    196. }
    197. }
    198. }
    199. cls
    200. ####局域网IP或主机名扫描
    201. $ipclass=new-object ipgotoseek("lanip")
    202. $ipclass.ipapp("10.230.165.48")
    203. ###广域网IP或域名扫描
    204. $ipclass= [ipgotoseek]::new("wanip")
    205. $ipclass.ipapp("www.baidu.com")|Out-File -FilePath d:\result.txt -Encoding default -Force
    206. Invoke-Item d:\result.txt
    207. #####本机及外网IP
    208. $ipclass= [ipgotoseek]::new("localip")
    209. $ipclass.ipapp($sb);
    复制代码



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
  • TA的每日心情
    开心
    前天 08:25
  • 签到天数: 130 天

    [LV.7]常住居民III

    发表于 2020-4-25 20:32:03 | 显示全部楼层
    楼主,我觉得我现在遇到的问题和你发表的帖子有点联系,不知道你是否知道?想请教你一下?是关于powerploit的无条件运行的内网主机探测这一块?我下午搞了一下感觉搞不出来,所以想请教你一下?具体命令是powerploit从github里远程下载invoke-portscan.ps1然后探测,但是我发现我用windows2008 r2在cmd里远程下载然后扫描搭建的域的时候,提示基础链接已经关闭,求大佬指点
    回复 支持 3 反对 0

    使用道具 举报

  • TA的每日心情
    擦汗
    5 小时前
  • 签到天数: 100 天

    [LV.6]常住居民II

     楼主| 发表于 2020-4-25 16:50:07 | 显示全部楼层
    powershell,windows核心脚本技术1                                        http://www.cnhonkerarmy.com/thread-247450-1-1.html
    powershell,windows核心脚本技术2,变量,伟大的变量       http://www.cnhonkerarmy.com/thread -247461-1-1.html
    powershell,windows 核心脚本技术3运算符                         http://www.cnhonkerarmy.com/thread-247468-1-1.html
    powershell,windows核心脚本技术3(补充)循环和条件,结构化语句      http://www.cnhonkerarmy.com/thread-250711-1-1.html
    powershell,windows核心脚本技术4函数和函数库                http://www.cnhonkerarmy.com/thread-247489-1-1 .html
    powershell,windows核心脚本技术5函数参数的补充            http://www.cnhonkerarmy.com/thread-247492-1-1.html
    powershell,windows核心脚本技术6哈希表的使用               http://www.cnhonkerarmy.com/thread-247534-1-1.html
    powershell,windows核心脚本技术7自定义对象                     http://www.cnhonkerarmy.com/thread-247722-1-1.html
    powershell, Windows核心脚本技术8异常处理                        http://www.cnhonkerarmy.com/thread-247738-1-1.html
    powershell,Windows核心脚本技术9处理XML                      http://www.cnhonkerarmy.com/thread-247781-1 -1.html
    powershell,windows核心脚本技术10类和对象                         http://www.cnhonkerarmy.com/thread-247985-1-1.html
    powershell,windows核心脚本技术11正则表达式的应用             http:// www .cnhonkerarmy.com / thread-248072-1-1.html
    powershell,windows 核心脚本技术12 l像sql一样操作表数据    http://www.cnhonkerarmy.com/thread-248530-1-1.html
    powershell,windows核心脚本技术13提速和多线程-1    http://www.cnhonkerarmy.com/thread-250250-1-1.html
    powershell,windows核心脚本技术13提速和多线程-2    http:// www .cnhonkerarmy.com / thread-250390-1-1.html
    回复 支持 2 反对 1

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 103 天

    [LV.6]常住居民II

    发表于 2020-4-25 18:17:09 | 显示全部楼层
    已收藏,感谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 57 天

    [LV.5]常住居民I

    发表于 2020-4-25 19:18:29 | 显示全部楼层
    下载后,它说找不到应用程序。是怎么一回事?

    点评

    win10下不会报错,win7,08升级powershell到5.1版本  发表于 2020-4-25 21:00
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 22:00
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2020-4-25 19:27:10 | 显示全部楼层

    已收藏,感谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-5-11 09:39
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2020-4-25 20:03:13 | 显示全部楼层
    楼主棒棒哒,欧耶
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 34 天

    [LV.5]常住居民I

    发表于 2020-4-25 21:04:21 | 显示全部楼层
    感谢分享               
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-5-12 08:41
  • 签到天数: 62 天

    [LV.6]常住居民II

    发表于 2020-4-25 21:32:20 | 显示全部楼层
    感谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 57 天

    [LV.5]常住居民I

    发表于 2020-4-25 22:27:55 | 显示全部楼层
    那要怎样才能升级到Windows10?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19 小时前
  • 签到天数: 202 天

    [LV.7]常住居民III

    发表于 2020-4-26 01:24:48 | 显示全部楼层

    已收藏,感谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    17 分钟前
  • 签到天数: 62 天

    [LV.6]常住居民II

    发表于 2020-4-26 02:20:54 | 显示全部楼层
    已收藏,感谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-5-23 09:30
  • 签到天数: 33 天

    [LV.5]常住居民I

    发表于 2020-4-26 07:57:40 | 显示全部楼层
    可以啊。楼主厉害
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-5-20 08:41
  • 签到天数: 61 天

    [LV.6]常住居民II

    发表于 2020-4-26 09:07:24 | 显示全部楼层
    感谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-5-9 10:24
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2020-4-27 14:05:23 | 显示全部楼层
    我的天,好东西,收藏了收藏了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /1 下一条

    红盟社区--中国红客联盟 

    Processed in 0.108873 second(s), 31 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表