目录扫描编写

Posted FireC@t @ Perl6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目录扫描编写相关的知识,希望对你有一定的参考价值。

1. 目录字典
2. HTTP::UserAgent
3. Start创建线程数(也可以用Proc::Async)

 

先创建一个导入字典的函数:

sub MAIN (Str $dict) {
        #判断是否是文件
        if $dict.IO.f {
            #不要把文件一次进数组, 一行一行读就行
            for $dict.IO.lines -> $line {
                  say $line;
            }
        }else {
            say $dict~ Not exists or not a file!;
            #不是文件或不存在就提示
        }
}

 

这样我们就能编历一个字典文件。

我们再设置用户传入一个 url或ip:

sub MAIN (Str $ip, Str $dict) {
        #
        #判断是否是文件
        if $dict.IO.f {
            #不要把文件一次进数组, 一行一行读就行
            for $dict.IO.lines -> $line {
              #拼接url

                  say $ip~/~$line;
            }
        }else {
            say $dict~ Not exists or not a file!;
            #不是文件或不存在就提示
        }
}

注意, 这里的 url我们没有检测是否输入合法。我们这里没有写测试函数。

 

再导入 HTTP::UserAgent 来访问 url:

use HTTP::UserAgent;
sub MAIN (Str $ip, Str $dict) {
        #
        #判断是否是文件
        if $dict.IO.f {
            #不要把文件一次进数组, 一行一行读就行
            for $dict.IO.lines -> $line {
              #拼接url
                  my $ua = HTTP::UserAgent.new;
                  my $target = $ip~/~$line;
                  my $html = $ua.get($target);
                  #查看状态码
                  say $html.status-line;
            }
        }else {
            say $dict~ Not exists or not a file!;
            #不是文件或不存在就提示
        }
}

 

我们把结果保存到一个文件:

use HTTP::UserAgent;
my $fp = open result.txt, :w;
sub MAIN (Str $ip, Str $dict) {
        #
        #判断是否是文件
        if $dict.IO.f {
            #不要把文件一次进数组, 一行一行读就行
            for $dict.IO.lines -> $line {
              #拼接url
                  my $ua = HTTP::UserAgent.new;
                  my $target = $ip~/~$line;
                  say Fetch: ~$target;
                  my $html = $ua.get($target);
                  #查看状态码
                  #say $html.status-line;
                  $fp.say($target => $html.status-line);
            }
        }else {
            say $dict~ Not exists or not a file!;
            #不是文件或不存在就提示
        }
}

 

我们准备创一个多线程的, 用start包住代码块, 再设置一个数组控制线程数量即可:

use HTTP::UserAgent;
my $fp = open result.txt, :w;
my @threads; #控制线程数目
sub MAIN (Str $ip, Str $dict) {
        #
        #判断是否是文件
        if $dict.IO.f {

            #不要把文件一次进数组, 一行一行读就行
            for $dict.IO.lines -> $line {
              push @threads, start {
                  #拼接url
                  my $ua = HTTP::UserAgent.new;
                  my $target = $ip~/~$line;
                  say Fetch: ~$target;
                  my $html = $ua.get($target);
                  #查看状态码
                  #say $html.status-line;
                  $fp.say($target => $html.status-line);
              };
              #控制线程 数
              if @threads == 4 {
                  await @threads;
                  @threads = [];
              }
            }
        }else {
            say $dict~ Not exists or not a file!;
            #不是文件或不存在就提示
        }
    await @threads; }

现在还有一个问题就是, 文件同时写入保存时, 可能会有问题, 我们最后加一个写 的Lock就行:

未完

 

以上是关于目录扫描编写的主要内容,如果未能解决你的问题,请参考以下文章

Huawei_Netconf_Ncclient

Android zxing Journeyapps 条码扫描器内部片段

目录扫描编写

尝试编写 MacOS 自动化脚本以根据扫描的输入创建递增文件夹

使用 Python 代码片段编写 LaTeX 文档

无法在片段中启动 qrCode 相机扫描仪