类型:文件处理大小:11.3M语言:英语评分:5.0标签:立即下载。在前一篇文章中,公布了对指定IP进行批量端口扫描的方法和脚本,通过PowerShell发送和接收TCP和UDP报文包的方法,以及尝试通过PowerShell登录SQLServer服务的方法,构成了通过PowerShell操作网络状态的PSNet程序集。最近,通过不断的尝试,我们找到了一种在指定范围内扫描IP段和端口的方法。本文将介绍如何通过PowerShell批量扫描IP及其对应的端口。
在PSNet汇编的基础上进行扩展。首先,在$ env3360psspace/psnet/tcpop下创建脚本文件Invoke-ScanIPPort.ps1,并在$ en v 3360 PS space/PS net/tcpop/PS net . PS m1中添加对脚本文件的调用:$ env : psspace/PSNet/TCPOp/Invoke-scanipport . PS1
首先介绍下述代码中会出现的变量:-StartAddress[扫描的起始IP地址],和-EndAddress一起使用,[这个参数必须是] -EndAddress[扫描的结束IP地址]。[此参数必须是]-解析主机[尝试解析主机名]-扫描端口[扫描端口]。如果要扫描端口,此选项必须是-AllPort[扫描所有端口]。范围是1~65534(注意这个选项需要很长时间扫描。建议选择单个IP时使用。并且尽量少用)-StartPort[扫描的起始端口],与-EndPort结合使用。如果此选项和-Port选项同时存在,-Port参数将无效-EndPort[扫描的结束端口]-扫描期间默认会扫描端口,如果以后没有参数139、111、389、443、445、1080、1433、2001、2049、3001、3128、5222、666,则只扫描21、22、23、53、69、71、80、98
调用此函数的方法如下:invoke-scanipport-startaddress 192.168.10.1-endaddress 192 . 168 . 10 . 254 #扫描IP段invoke-scanipport-start地址192 . 168 . 10 . 1-end地址192 . 168 . 10 . 254-解析主机#扫描IP段。并尝试解析IP对应的主机名invoke-scan ipport-起始地址192 . 168 . 10 . 1-结束地址192 . 168 . 10 . 254-解析主机scanport #来扫描IP段。并尝试扫描默认端口invoke-scan ipport-起始地址192 . 168 . 10 . 1-结束地址192 . 168 . 10 . 254-解析主机-scan port-超时50 #扫描IP段并尝试扫描默认端口。端口扫描超时50毫秒。invoke-scan ipport-起始地址192 . 168 . 10 . 1-结束地址192 . 168 . 10 . 254-解析主机-scan port-端口80 #扫描IP段。并尝试扫描端口80 invoke-scan ipport-起始地址192 . 168 . 10 . 1-结束地址192 . 168 . 10 . 1-解析主机-scan port-all port #来扫描ip。并尝试扫描1到65534之间的所有端口。invoke-scanipport-起始地址192 . 168 . 10 . 1-结束地址192 . 168 . 10 . 254-scanport-star port 21-结束端口81 #扫描IP段之间主机的21和81之间的所有端口
上图为扫描过程中的图片
扫描后的结果:
代码如下:
functionInvoke-ScanIPPort { Param([参数(强制=$true,位置=0)][验证模式(' b d { 1,3}).d{1,3} .d{1,3} .d{1,3} b ')][字符串]$StartAddress,[参数(强制=$true,位置=1)][验证模式( b d { 1,3 } .d{1,3} .d{1,3} .d{1,3 } b ')][字符串]$EndAddress,[开关]$ResolveHost,[开关]$ScanPort,[开关]$AllPort,[int]$StartPort,[int]$EndPort,[int[]$ port=@(21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080,1433,2001,` 2049net。网络信息。ping }进程{ foreach($ ain($起始地址).拆分('.')[0].$EndAddress .拆分('.)[0])){ foreach($ bin($起始地址).拆分('.')[1].$EndAddress .拆分('.)[1])){ foreach($ CIN($ StartAddress)} .拆分('.')[2].$EndAddress .拆分('.)[2])){ foreach($ din($起始地址.拆分('.')[3].$EndAddress .拆分('.)[3])){ $ IP=' $ a . $ b . $ c . $ d '写进度-活动'扫描-状态' $ IP '-完成百分比($ d/($ EndAddress .拆分('.)[3]))*100)$pingStatus=$ping .发送(' $ip ',$ TiME)if($ PingStatus .status-eq ' success '){ if($ resolve host){ write-progress-activityresolve host-status ' $ IP '-完成百分比($ d/($ EndAddress .拆分('.)[3]))* 100)-Id1 $ getHostEntry=[Net .DNS]:开始条目($ ping状态).地址,$null,$ null)} if($ scan port){ if($ all port){ $ port=@(1.65534)} if($ StartPort-ne $ null-和$ end port-ne $ null){ $ port=@($ start port).$ end port)} $ openport=@()for($ I=1;$ I-le $ port .计数;$ I){ $ port=$ port[($ I-1)]写入-进度-活动端口扫描[$端口]$结果'-状态' $ IP '-完成百分比($ I/($端口.计数)* 100)-Id2 $客户端=新对象系统.净。插座。tcpclient $ Begin connect=$ client .BeginConnect($pingStatus).地址,$port,$null,$null)if($client .已连接){ $ open port=$ port } else { # WaitStart-Sleep-Milli $ TimeOutif($ client .已连接){ $ openport=$ port $ length=$ openport。长度$ result='[查找$ length端口.Lastport$port]'}}$client .close()} } if($ resolveHost){ $ HostName=([Net .DNS]:3360 endgethostentry([IAsyncResult]$ getHostEntry)).HostName } # ReturnObjectif($ open port-ne $ null){ write-host ' IP地址' ' $ IP ' if($ getHostEntry-ne $ null){ write-host ' HostName ' $ getHostEntry } write-host ' port ' $ open port } } } } } } End { }作者: 付海军出处:http://fuhj02.cnblogs.com版权:本文版权归作者和博客园共有转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢