PowerShell 多线程测试IP端口

简介:

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

今天突然想到,类似的方式在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

成功!






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/2053707,如需转载请自行联系原作者

目录
相关文章
|
JSON 测试技术 API
优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言
REST Assured 是一个强大的 Java 库,用于简化 RESTful API 测试。本文详解了其核心功能:设置默认主机和端口以减少代码重复、发起 GET 请求并验证响应结果,以及通过断言确保接口行为符合预期。同时推荐 Apipost 工具,助力开发者提升 API 测试效率,实现更高效的接口管理与团队协作。掌握这些技巧,可显著优化测试流程与代码质量。
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
977 7
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
15357 7
|
网络协议 Ubuntu Linux
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
解决 `ssh: connect to host IP port 22: Connection timed out` 报错涉及检查 SSH 服务状态、防火墙配置、网络连通性和主机名解析等多个方面。通过逐步排查上述问题,并在 `scp` 命令中正确指定端口,可以有效解决连接超时的问题,确保文件传输的顺利进行。希望本文提供的解决方案能帮助您快速定位并解决该错误。
3956 3
|
网络安全 数据安全/隐私保护 Python
Python 渗透测试:文件传输爆破( 21端口 )
Python 渗透测试:文件传输爆破( 21端口 )
209 2
|
网络协议 Linux 网络安全
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
|
Linux
Linux telnet安装及端口测试联通性
Linux telnet安装及端口测试联通性
460 10
|
网络协议 Windows
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
4631 2
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
3561 1
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
453 0