设为首页收藏本站
查看: 5268|回复: 5

[脚本语言] powershell快速扫描网络主机多功能版本

[复制链接]
  • TA的每日心情
    奋斗
    2022-8-5 08:00
  • 签到天数: 265 天

    [LV.8]以坛为家I

    发表于 2022-3-27 16:50:58 | 显示全部楼层 |阅读模式
    基于powershell多线程技术,搭载.net 的socket类和webapi的json数据解析,可以很方便的了解对方的外网主机和自己网络的服务和端口,
    更专业,更高效,更智能
    不仅能扫描单个IP,包含外网主机内网主机和本地内网,还能扫描局域网整个网段,带自定义端口扫描,还加入了文件共享资源探测功能,此工具只能用于检查网络,不能用于任何非法途径!!后果自负
    有需要的小伙伴赶紧来下载哦,网络安全,我们都是专业的!
    以下为部分核心代码
    1. [void][System.Reflection.Assembly]::LoadWithPartialName("System.Net")
    2. [void][System.Reflection.Assembly]::LoadWithPartialName("System.Net.Sockets")
    3. function Scanports ()
    4. {
    5. param([string]$ip_host,
    6. [parameter( Mandatory = $true,ParameterSetName = "single")][int]$port,
    7. [parameter( Mandatory = $true,ParameterSetName = "range")][ValidatePattern('^(((\d{1,5}-\d{1,5})|(\d{1,5}))\,*)*$')]$rangeports,
    8. [parameter( Mandatory = $true,ParameterSetName = "servers")][switch]$serverports,
    9. [int]$timeout=3) ###tcp连接超时时间

    10. $throttleLimit = 30 ###限制同时运行的线程数
    11. $SessionState = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
    12. $Pool = [runspacefactory]::CreateRunspacePool(1, $throttleLimit, $SessionState, $Host)
    13. $Pool.Open()
    14. $okports=@()
    15. $serports=@"
    16. ftp文件传输服务,21
    17. ssh超级终端服务,22
    18. telnet终端服务,23
    19. web网站服务,80
    20. web证书加密服务,443
    21. sqlserver数据库服务,1433
    22. mysql数据库服务,3306
    23. oracle数据库服务,1521
    24. smb共享文件服务,445
    25. dns域名解析服务,53
    26. Exchange imap服务,143
    27. PPTP远程隧道服务,1723
    28. POP3邮件传输服务,110
    29. SMTP邮件传输服务,25
    30. windows远程桌面服务,3389
    31. 域LDAP服务器,389
    32. 域全局编录服务器,3268
    33. windows更新wsus服务,8530
    34. DHCP服务,547
    35. web代理服务,8080
    36. "@|ConvertFrom-Csv -Header "描述","端口" -Delimiter ","; ##设置服务器常用端口
    37. if ($port -ne $null){ $okports+=$port}
    38. if ($rangeports -ne $null){
    39. #正确添加端口范围
    40. $rangeports -split ","|%{
    41. if ($_ -match '^\d{1,5}$'){
    42. $okports+=$_
    43. }
    44. if ($_ -match '^\d{1,5}-\d{1,5}$'){
    45. $ary=$_ -split '-'
    46. $okports+=$ary[0]..$ary[1]
    47. }
    48. }

    49. }
    50. if ($serverports){ $okports=$serports[0..$serports.length].端口}
    51. $handles=@() #全局线程句柄组对象
    52. $threads = @() #全局线程ID组对象
    53. for ($x = 0; $x -lt $okports.length; $x++) {


    54. [ScriptBlock]$task={
    55. param($ip_host,$ports,$timeout,[pscustomobject]$serports)
    56. #找mac
    57.   $whomymac = Add-Type -memberDefinition @"
    58.   [DllImport("Iphlpapi.dll")]public static extern int SendARP(Int32 dest,Int32 host,byte[] mac,ref Int32 length);
    59.   [DllImport("Ws2_32.dll")]public static extern Int32 inet_addr(string ip);
    60. "@ -passthru -name MACSEE
    61. #找主机名,或是IP
    62. if($ip_host -match '\d+\.\d+\.\d+\.\d+'){
    63. ##如果是ip
    64. $hostname=[System.Net.Dns]::GetHostByAddress($ip_host).HostName
    65. $ip=$ip_host
    66. }
    67. else{
    68. $hostname=[System.Net.Dns]::GetHostByName($ip_host)
    69. $ip=($hostname.AddressList|%{$_.IPAddressToString}) -join ','
    70. $hostname=$ip_host
    71. }
    72. $aa=New-Object Byte[] 6;
    73. $ldest= $whomymac::inet_addr($ip)
    74. $len=6
    75. $res=$whomymac::SendARP($ldest,0,$aa,[ref]$len)
    76. $mac= [System.BitConverter]::ToString($aa,0,6)
    77. $tcp=New-Object System.Net.Sockets.TcpClient
    78. $tcp.Connect($ip_host,$ports)
    79. if ($? -ne $true){$success=$false}Else {$success=$true}
    80. $state=""|select "主机名","IP地址","MAC地址","端口","描述","状态"
    81. $index=$serports.端口.IndexOf($ports.ToString())
    82. if ($index -ne -1){$state.描述=$serports[$index].描述} else{$state.描述="未知"}
    83. $state.主机名=$hostname;$state.IP地址=$ip;$state.MAC地址=$mac;$state.端口=$ports
    84. if ($success){$state.状态="打开"}else{$state.状态="关闭"}
    85. return $state#|?{$_.状态 -eq "打开"}
    86. }
    87. ###任何[ScriptBlock]模块都要传递变量,不能直接用外面的要.AddArgument
    88. $powershell = [powershell]::Create().AddScript($task).AddArgument($ip_host).AddArgument($okports[$x]).AddArgument($timeout).AddArgument($serports)
    89. $powershell.RunspacePool = $Pool
    90. $handle=$powershell.BeginInvoke()
    91. $threads += $powershell
    92. $handles +=$handle
    93. }
    94. ##等待所有线程自动结束并返回结果.....
    95. $receivePS=@() #收集所有线程执行结果
    96.    
    97. do {
    98.   $i = 0
    99.   $done = $true
    100.   foreach ($handle in $handles) {
    101.     if ($handle -ne $null) {
    102.       if ($handle.IsCompleted) {

    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. return $receivePS|?{$_.状态 -eq "打开"}
    115. }
    复制代码








    本帖子中包含更多资源

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

    x
  • TA的每日心情
    开心
    29 分钟前
  • 签到天数: 875 天

    [LV.10]以坛为家III

    发表于 2022-3-27 17:15:54 | 显示全部楼层
    希望楼主这个系列可以一直做下去,真的实用,谢谢
    回复 支持 反对

    使用道具 举报

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

    [LV.8]以坛为家I

    发表于 2022-3-28 08:03:43 | 显示全部楼层
    谢谢分享,楼主加油
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-9-20 11:32
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2022-3-31 15:53:45 | 显示全部楼层
    楼主楼主,下次可以附个教程吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    29 分钟前
  • 签到天数: 875 天

    [LV.10]以坛为家III

    发表于 2022-3-31 22:13:49 | 显示全部楼层
    hacker_liao 发表于 2022-3-31 15:53
    楼主楼主,下次可以附个教程吗?

    其实以前这位大大发过非常非常非常相信的教学       
    回复 支持 反对

    使用道具 举报

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

    [LV.8]以坛为家I

    发表于 2022-4-1 17:39:00 | 显示全部楼层
    hacker_liao 发表于 2022-3-31 15:53
    楼主楼主,下次可以附个教程吗?

    我赞成你的说法
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    红盟社区--红客联盟 

    Processed in 0.062333 second(s), 22 queries.

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

    备案号:冀ICP备20006029号-1 Powered by HUC © 2001-2021 Comsenz Inc.

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

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

    Honor accompaniments. theme macfee

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