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

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

最近在学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

成功!

转载地址:http://zzwjx.baihongyu.com/

你可能感兴趣的文章
react-native问题入门
查看>>
Mysql5.7忘记root密码及mysql5.7修改root密码的方法
查看>>
jQuery 数据列表插件
查看>>
Ajax的基本用法
查看>>
使用Python开发环境Wing IDE如何设立项目详解
查看>>
Android MVP,MVVM
查看>>
部署Nas后采用Mobox企业云盘来提升Nas的管理功能
查看>>
老男孩培训视频听课笔记七(在51cto上听的)--5.8 64bit 基础优化
查看>>
nginx 自动备份,日志切割脚本
查看>>
Linux gcc for 循环中 i=i++ 会造成死循环问题及 ++i / i++ 汇编分析
查看>>
IOS8插件Demo(Today Extension)
查看>>
Linux 常用命令
查看>>
reflect
查看>>
URL与ASCII
查看>>
Windows Server 2008防火墙配置
查看>>
linux常用命令小记
查看>>
Jetty9安装部署
查看>>
ISA2004防火墙配置教程
查看>>
bash的变量类别,引号
查看>>
LAMP搭建5:安装discuz
查看>>