TA的每日心情 | 奋斗 2022-8-5 08:00 |
---|
签到天数: 265 天 [LV.8]以坛为家I
|
基于powershell多线程技术,搭载.net 的socket类和webapi的json数据解析,可以很方便的了解对方的外网主机和自己网络的服务和端口,
更专业,更高效,更智能
不仅能扫描单个IP,包含外网主机内网主机和本地内网,还能扫描局域网整个网段,带自定义端口扫描,还加入了文件共享资源探测功能,此工具只能用于检查网络,不能用于任何非法途径!!后果自负
有需要的小伙伴赶紧来下载哦,网络安全,我们都是专业的!
以下为部分核心代码
- [void][System.Reflection.Assembly]::LoadWithPartialName("System.Net")
- [void][System.Reflection.Assembly]::LoadWithPartialName("System.Net.Sockets")
- function Scanports ()
- {
- param([string]$ip_host,
- [parameter( Mandatory = $true,ParameterSetName = "single")][int]$port,
- [parameter( Mandatory = $true,ParameterSetName = "range")][ValidatePattern('^(((\d{1,5}-\d{1,5})|(\d{1,5}))\,*)*$')]$rangeports,
- [parameter( Mandatory = $true,ParameterSetName = "servers")][switch]$serverports,
- [int]$timeout=3) ###tcp连接超时时间
- $throttleLimit = 30 ###限制同时运行的线程数
- $SessionState = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
- $Pool = [runspacefactory]::CreateRunspacePool(1, $throttleLimit, $SessionState, $Host)
- $Pool.Open()
- $okports=@()
- $serports=@"
- ftp文件传输服务,21
- ssh超级终端服务,22
- telnet终端服务,23
- web网站服务,80
- web证书加密服务,443
- sqlserver数据库服务,1433
- mysql数据库服务,3306
- oracle数据库服务,1521
- smb共享文件服务,445
- dns域名解析服务,53
- Exchange imap服务,143
- PPTP远程隧道服务,1723
- POP3邮件传输服务,110
- SMTP邮件传输服务,25
- windows远程桌面服务,3389
- 域LDAP服务器,389
- 域全局编录服务器,3268
- windows更新wsus服务,8530
- DHCP服务,547
- web代理服务,8080
- "@|ConvertFrom-Csv -Header "描述","端口" -Delimiter ","; ##设置服务器常用端口
- if ($port -ne $null){ $okports+=$port}
- if ($rangeports -ne $null){
- #正确添加端口范围
- $rangeports -split ","|%{
- if ($_ -match '^\d{1,5}$'){
- $okports+=$_
- }
- if ($_ -match '^\d{1,5}-\d{1,5}$'){
- $ary=$_ -split '-'
- $okports+=$ary[0]..$ary[1]
- }
- }
- }
- if ($serverports){ $okports=$serports[0..$serports.length].端口}
- $handles=@() #全局线程句柄组对象
- $threads = @() #全局线程ID组对象
- for ($x = 0; $x -lt $okports.length; $x++) {
- [ScriptBlock]$task={
- param($ip_host,$ports,$timeout,[pscustomobject]$serports)
- #找mac
- $whomymac = Add-Type -memberDefinition @"
- [DllImport("Iphlpapi.dll")]public static extern int SendARP(Int32 dest,Int32 host,byte[] mac,ref Int32 length);
- [DllImport("Ws2_32.dll")]public static extern Int32 inet_addr(string ip);
- "@ -passthru -name MACSEE
- #找主机名,或是IP
- if($ip_host -match '\d+\.\d+\.\d+\.\d+'){
- ##如果是ip
- $hostname=[System.Net.Dns]::GetHostByAddress($ip_host).HostName
- $ip=$ip_host
- }
- else{
- $hostname=[System.Net.Dns]::GetHostByName($ip_host)
- $ip=($hostname.AddressList|%{$_.IPAddressToString}) -join ','
- $hostname=$ip_host
- }
- $aa=New-Object Byte[] 6;
- $ldest= $whomymac::inet_addr($ip)
- $len=6
- $res=$whomymac::SendARP($ldest,0,$aa,[ref]$len)
- $mac= [System.BitConverter]::ToString($aa,0,6)
- $tcp=New-Object System.Net.Sockets.TcpClient
- $tcp.Connect($ip_host,$ports)
- if ($? -ne $true){$success=$false}Else {$success=$true}
- $state=""|select "主机名","IP地址","MAC地址","端口","描述","状态"
- $index=$serports.端口.IndexOf($ports.ToString())
- if ($index -ne -1){$state.描述=$serports[$index].描述} else{$state.描述="未知"}
- $state.主机名=$hostname;$state.IP地址=$ip;$state.MAC地址=$mac;$state.端口=$ports
- if ($success){$state.状态="打开"}else{$state.状态="关闭"}
- return $state#|?{$_.状态 -eq "打开"}
- }
- ###任何[ScriptBlock]模块都要传递变量,不能直接用外面的要.AddArgument
- $powershell = [powershell]::Create().AddScript($task).AddArgument($ip_host).AddArgument($okports[$x]).AddArgument($timeout).AddArgument($serports)
- $powershell.RunspacePool = $Pool
- $handle=$powershell.BeginInvoke()
- $threads += $powershell
- $handles +=$handle
- }
- ##等待所有线程自动结束并返回结果.....
- $receivePS=@() #收集所有线程执行结果
-
- do {
- $i = 0
- $done = $true
- foreach ($handle in $handles) {
- if ($handle -ne $null) {
- if ($handle.IsCompleted) {
- $receivePS +=$threads[$i].EndInvoke($handle)
- $threads[$i].Dispose()
- $handles[$i] = $null
- } else {
- $done = $false
- }
- }
- $i++
- }
- if (-not $done) { Start-Sleep -Milliseconds 500}
- } until ($done)
- return $receivePS|?{$_.状态 -eq "打开"}
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|