我试图制作一个工具来获取代理列表,你已经下载了一个免费代理网站的索引,我使用这个:
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)
其保存以创建临时文件。