在grep(BASH)中需要帮助



我试图制作一个工具来获取代理列表,你已经下载了一个免费代理网站的索引,我使用这个:

wget http://free-proxy.cz/en/proxylist/country/all/https/ping/all

并输出类似的东西:

<script type="text/javascript">document.write(Base64.decode("MTg1LjExNC4xMzcuMTQ="))</script></td><td style=""><span class="fport" style=''>12195</span></td><td><small>HTTPS</small></td><td class="left"><div style="padding-left:2px"><img src="/flags/blank.gif" class="flag flag-ua" alt="Ukraine" /> <a href="/en/proxylist/country/UA/all/ping/all">Ukraine</a></div></td><td class="small"><small></small></td><td class="small"><small></small></td><td class="small"><small>High anonymity</small></td><td> <i class="icon-black icon-question-sign"></i></td><td><small>2.4%</small><div class="progress"><div class="fill" style="width:4%;background-color:red;"></div></div></td><td><div style="padding-left:5px"><small>649 ms</small> <div class="progress"><div class="fill" style="width:94%;background-color:#A5DA74;;"></div></div></div></td><td><small>8 hours ago</small></td></tr><tr><td style="text-align:center" class="left"><script type="text/javascript">document.write(Base64.decode("MTYxLjk3LjEzOC4yMzg="))</script></td><td style=""><span class="fport" style=''>3128</span></td><td>

正如你所看到的,IP是在base64中加密的,端口是正常的

我试着先编译base64代码,这就是工作↓

echo (outputs) | grep -Eo '("[A-Za-z0-9]{12,30}[=]{0,2}")' | cut -d '"' -f2

我用这个代码获取端口↓

echo (output) | grep -Eo "(class="fport" style=''>[0-9]{1,9})"  | cut -d '>' -f2

我怎么能把它混合在一起,做成那样

(base64 code):(port)

然后我想解密base64代码,让它看起来像:

IP:PORT

第一步

base64不是一种加密,而是一种编码。如果你正在Linux或其他Unix变体,命令base64,base64编码器/解码器,将预先安装。如果没有,它将很容易与您的依赖于操作系统的程序包管理器。然后请尝试执行:

base64 -d <<< "MTg1LjExNC4xMzcuMTQ="

它将输出:

185.114.137.14

第2步

然后我们可以将base64解码器与您的命令管道相结合。问题是base64编码忽略了换行符,我们需要处理管线逐行的结果。假设变量$output保持wget命令的输出,请尝试:

while IFS= read -r line; do
base64 -d <<< "$line"
echo
done < <(echo "$output" | grep -Eo '("[A-Za-z0-9]{12,30}[=]{0,2}")' | cut -d '"' -f2)

它将打印类似于:

185.114.137.14
161.97.138.238

<(command)表示法是过程替换echo .. grep .. cut管道通过stdin提供给while循环并且CCD_ 8循环逐行处理base64编码的字符串。

第3步

现在我们想要以IP:PORT的格式合并IP和PORT。我们可以使用paste命令。最终脚本将是:

paste -d ":" <(
while IFS= read -r line; do
base64 -d <<< "$line"
echo
done < <(echo "$output" | grep -Eo '("[A-Za-z0-9]{12,30}[=]{0,2}")' | cut -d '"' -f2)
) 
<(echo "$output" | grep -Eo "(class="fport" style=''>[0-9]{1,9})"  | cut -d '>' -f2)

输出:

185.114.137.14:12195
161.97.138.238:3128

paste命令将文件名作为参数。在这里我们可以利用以如下方式再次进行过程替换:paste <(command1) <(command2)其保存以创建临时文件。

相关内容

  • 没有找到相关文章

最新更新