基于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 "打开"}
}
使用界面如下:
下载链接: https://pan.baidu.com/s/1ccGucRYyuZKcInobgzCnrg 提取码: vsyn 复制这段内容后打开百度网盘手机App,操作更方便哦