PowerShell 多线程测试IP端口
2017-12-22 19:15
387 查看
最近在学Python的爬虫,昨天试着用多线程去使用不同的代理IP,基本原理是把所有的IP地址都放入一个队列,然后使用多线程地去读取队列里面的值。
今天突然想到,类似的方式在PowerShell里面能不能实现呢?PowerShell自己没有直接可以使用的队列模块,不过可以调用.Net里面的类来实现。
下面是一个简单的例子
结果如下
Waiting................................................................................All jobs completed!
Port ComputerName TCP
80 137.74.168.174 True
8080 103.28.161.68 True
53281 91.151.106.127 False
3128 177.136.252.7 True
80 47.89.22.200 True
8888 118.69.61.57 True
8080 192.241.190.167 True
80 185.124.112.130 True
3128 83.65.246.181 True
3128 79.137.42.124 True
8080 95.0.217.32 False
8080 104.131.94.221 True
65301 177.234.7.66 True
8080 37.57.179.2 False
8080 197.211.27.234 True
8080 139.59.117.11 True
8080 168.0.158.53 False
8080 154.48.196.1 True
8080 139.59.125.53 True
成功!
今天突然想到,类似的方式在PowerShell里面能不能实现呢?PowerShell自己没有直接可以使用的队列模块,不过可以调用.Net里面的类来实现。
下面是一个简单的例子
$queue = [System.Collections.Queue]::Synchronized( (New-Object System.Collections.Queue) ) $lines=gc C:\temp\thebigproxylist-17-12-20.txt foreach($line in $lines){ $queue.enqueue($line) } write-host $queue.count $Throttle = 5 #threads #脚本块,对指定的IP测试端口,结果保存在一个对象里面 $ScriptBlock = { Param ( [string]$value ) $ip=$value.Split(":")[0] $port=$value.Split(":")[1] $a=test-netconnection -ComputerName $ip -Port $port $RunResult = New-Object PSObject -Property @{ ComputerName=$ip Port=$port TCP=$a.TCPTestSucceeded } Return $RunResult } #创建一个资源池,指定多少个runspace可以同时执行 $RunspacePool = [RunspaceFactory]::CreateRunspacePool(1, $Throttle) $RunspacePool.Open() $Jobs = @() for($i=1;$i -lt 20;$i++){ $currentvalue=$queue.Dequeue() Write-Host $currentvalue $Job = [powershell]::Create().AddScript($ScriptBlock).addargument($currentvalue) $Job.RunspacePool = $RunspacePool $Jobs += New-Object PSObject -Property @{ Server = $currentvalue Pipe = $Job Result = $Job.BeginInvoke() } } #循环输出等待的信息.... 直到所有的job都完成 Write-Host "Waiting.." -NoNewline Do { Write-Host "." -NoNewline Start-Sleep -Seconds 1 } While ( $Jobs.Result.IsCompleted -contains $false) Write-Host "All jobs completed!" #输出结果 $Results = @() ForEach ($Job in $Jobs) { $Results += $Job.Pipe.EndInvoke($Job.Result) } $Results
结果如下
Waiting................................................................................All jobs completed!
Port ComputerName TCP
80 137.74.168.174 True
8080 103.28.161.68 True
53281 91.151.106.127 False
3128 177.136.252.7 True
80 47.89.22.200 True
8888 118.69.61.57 True
8080 192.241.190.167 True
80 185.124.112.130 True
3128 83.65.246.181 True
3128 79.137.42.124 True
8080 95.0.217.32 False
8080 104.131.94.221 True
65301 177.234.7.66 True
8080 37.57.179.2 False
8080 197.211.27.234 True
8080 139.59.117.11 True
8080 168.0.158.53 False
8080 154.48.196.1 True
8080 139.59.125.53 True
成功!
相关文章推荐
- 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量
- linux ping IP地址与telnet 测试IP端口
- JAVA SWING 多线程实现扫描同一个网段的IP,以及选定IP的端口
- 测试一台机器多个IP,相同端口的服务侦听
- PowerShell实现测试端口可用性脚本分享
- apache2.2单ip单端口多域名测试
- linux IP、端口连通性测试
- C#,多线程客户端IP端口扫描
- 测试IP和端口是否与网络连通
- 多线程设置超时 测试端口是否打开
- PowerShell脚本开发之对指定IP进行端口扫描
- java socket多线程并发消息读取".properties"文件ip和端口配置
- linux ping IP地址与telnet 测试IP端口
- 多网卡下对ServerSocket以TCP协议绑定IP和端口的测试
- PowerShell脚本开发之批量扫描IP和端口
- linux下测试某网址或IP端口能否访问
- linux ping IP地址与telnet 测试IP端口
- 快速测试指定IP和端口是否可以访问
- linux下测试某网址或IP端口能否访问