博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PowerShell 多线程测试IP端口
阅读量:7014 次
发布时间:2019-06-28

本文共 2154 字,大约阅读时间需要 7 分钟。

最近在学Python的爬虫,昨天试着用多线程去使用不同的代理IP,基本原理是把所有的IP地址都放入一个队列,然后使用多线程地去读取队列里面的值。

今天突然想到,类似的方式在PowerShell里面能不能实现呢?PowerShell自己没有直接可以使用的队列模块,不过可以调用.Net里面的类来实现。

下面是一个简单的例子

$queue = [System.Collections.Queue]::Synchronized( (New-Object System.Collections.Queue) )$lines=gc C:\temp\thebigproxylist-17-12-20.txtforeach($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.." -NoNewlineDo {   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

成功!

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/2053707,如需转载请自行联系原作者
你可能感兴趣的文章
SQL2005中时,Diagrams的问题
查看>>
[转]软件架构的一致性
查看>>
拨云见日,任重道远 ——第六届云计算大会感悟
查看>>
PID控制器的应用:控制网络爬虫抓取速度
查看>>
cad中关于点样式点的绘制
查看>>
学习计划--20160424
查看>>
CentOS VMware 下SSH配置方法详解
查看>>
PHP错误级别 error_reporting() 函数详解
查看>>
jdk环境变量配置
查看>>
为网卡配置多个IP地址(windows)
查看>>
句柄的理解
查看>>
手机网络连接问题
查看>>
Go -- runtime.Gosched()的作用分析
查看>>
Java Lambda 表达式 对 Map 对象排序
查看>>
WIndows 使用VS编译 Lua5
查看>>
转 VB ListView控件各种操作详解
查看>>
查看name的状态,是属于active还是standby
查看>>
<LeetCode OJ> 337. House Robber III
查看>>
PSR规范
查看>>
[Javascript] this in Function Calls
查看>>