Bash 中的并行迭代 IP 地址

2023-11-23

我正在处理一个大型私有 /8 网络,需要枚举正在侦听端口 443 并在其 HTTP HEADER 响应中声明特定版本的所有 Web 服务器。

一开始我想跑nmap使用 connect 扫描并通过输出文件 grep 自己,但这会引发许多误报nmap声明一个端口被“过滤”,而它实际上是“打开”的(使用连接扫描:nmap -sT -sV -Pn -n -oA foo 10.0.0.0/8 -p 443).

所以现在我想用 bash 编写一些脚本curl- 伪代码如下:

for each IP in 10.0.0.0/8  
do:  
    curl --head https://{IP}:443 | grep -iE "(Server\:\ Target)" > {IP}_info.txt;  
done  

由于我不太熟悉 bash,我不确定如何正确编写脚本 - 我必须:

  • 循环遍历所有IP
  • 确保只有 X 个威胁并行运行
  • 理想情况下,将输出剪切为仅在一个文件中记下匹配主机的 IP
  • 最好确保只记录匹配的服务器版本

任何建议或指出方向都将受到高度赞赏。


小规模 - 迭代

for a smallerIP 地址跨度可能会建议像这样迭代:

for ip in 192.168.1.{1..10}; do ...

如本文所述类似的问题.


大规模-并行!

鉴于您的问题涉及hugeIP 地址跨度您可能应该考虑采用不同的方法。

This begs供使用gnu并行.

使用 bash 在 bash 中并行迭代大范围的 IP 地址gnu并行需要将逻辑拆分为多个文件(供并行命令使用)。

ip2int

#!/bin/bash

set -e

function ip_to_int()
{
  local IP="$1"
  local A=$(echo $IP | cut -d. -f1)
  local B=$(echo $IP | cut -d. -f2)
  local C=$(echo $IP | cut -d. -f3)
  local D=$(echo $IP | cut -d. -f4)
  local INT

  INT=$(expr 256 "*" 256 "*" 256 "*" $A)
  INT=$(expr 256 "*" 256 "*" $B + $INT)
  INT=$(expr 256 "*" $C + $INT)
  INT=$(expr $D + $INT)

  echo $INT
}

function int_to_ip()
{
  local INT="$1"

  local D=$(expr $INT % 256)
  local C=$(expr '(' $INT - $D ')' / 256 % 256)
  local B=$(expr '(' $INT - $C - $D ')' / 65536 % 256)
  local A=$(expr '(' $INT - $B - $C - $D ')' / 16777216 % 256)

  echo "$A.$B.$C.$D"
}



scan_ip

#!/bin/bash

set -e

source ip2int

if [[ $# -ne 1 ]]; then
    echo "Usage: $(basename "$0") ip_address_number"
    exit 1
fi

CONNECT_TIMEOUT=2 # in seconds
IP_ADDRESS="$(int_to_ip ${1})"

set +e
data=$(curl --head -vs -m ${CONNECT_TIMEOUT} https://${IP_ADDRESS}:443 2>&1)
exit_code="$?"
data=$(echo -e "${data}" | grep "Server: ")
     # wasn't sure what are you looking for in your servers
set -e

if [[ ${exit_code} -eq 0 ]]; then
    if [[ -n "${data}" ]]; then
        echo "${IP_ADDRESS} - ${data}"
    else
        echo "${IP_ADDRESS} - Got empty data for server!"
    fi
else
    echo "${IP_ADDRESS} - no server."
fi



扫描范围

#!/bin/bash

set -e

source ip2int

START_ADDRESS="10.0.0.0"
NUM_OF_ADDRESSES="16777216" # 256 * 256 * 256

start_address_num=$(ip_to_int ${START_ADDRESS})
end_address_num=$(( start_address_num + NUM_OF_ADDRESSES ))

seq ${start_address_num} ${end_address_num} | parallel -P0 ./scan_ip

# This parallel call does the same as this:
#
# for ip_num in $(seq ${start_address_num} ${end_address_num}); do
#     ./scan_ip ${ip_num}
# done
#
# only a LOT faster!


迭代方法的改进:

原生 for 循环的运行时间(对于 256*256*256 个地址估计需要 200 天)改进为一天以内根据@skrskrskr。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 中的并行迭代 IP 地址 的相关文章

  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 用于编译和运行 C++ 的 bash 脚本

    我正在尝试进入 C 但必须使用冗长的命令通过命令行运行东西很烦人 所以我想制作一个 bash 脚本来简化过程并运行这些命令 bin bash if 1 start then cd CCPP cd HelloWorld g Wall W We
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 在 bash 中添加(收集)退出代码

    我需要依赖于脚本中的几个单独的执行 并且不想将它们全部捆绑在一个丑陋的 if 语句中 我想使用退出代码 每次执行并添加它 最后 如果这个值超过阈值 我想执行一个命令 伪代码 ALLOWEDERROR 5 run something RESU
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 获取最新远程提交的 SHA1 [重复]

    这个问题在这里已经有答案了 可能的重复 git bash 如何检查是否有新的提交可用 https stackoverflow com questions 6006759 git bash how to check if theres a n
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http

随机推荐

  • 使用 https 代理运行 AngularJS Protractor

    尝试运行量角器时 我在命令行中收到以下错误 gt 致命错误 量角器退出 代码 1 我需要代理到 https 测试服务器 我该如何实现这个目标 我听从了这个建议Github问题 但我仍然收到上述错误 这是我的配置文件 A reference
  • 如何使用 Allocations 将数组值传入和传出 Android RenderScript

    我最近一直在使用 RenderScript 目的是创建一个程序员可以轻松使用的 API 类似于 Microsoft Accelerator 的工作方式 我目前遇到的麻烦是 我想在 RenderScript 层之间传递值 并让所有内容以尽可能
  • 如何从 iPhone 视频录制中实时捕捉逐帧图像

    我正在尝试实时测量所选颜色的饱和度 如下所示 我正在关注本指南来自苹果 我更新了代码以使用 ARC 当然还使我的视图控制器成为AVCaptureVideoDataOutputSampleBufferDelegate 但我不知道如何实际开始捕
  • 如何在没有 BOM 的情况下重定向 PowerShell 中的输入?

    我正在尝试通过以下方式重定向 PowerShell 中的输入 Get Content input txt my program args 问题是管道 UTF 8 文本前面带有 BOM 0xEFBBBF 而我的程序无法正确处理它 一个最小的工
  • 如何从 R 编写 PostgreSQL 中的表?

    目前 要在 PostgreSQL 表中插入数据 我必须创建一个空表 然后执行insert into table values 连同数据框一起折叠成包含所有值的单个字符串 它不适用于大型数据帧 The dbWtriteTable 不适用于 P
  • 如何通过 C 预处理器打印磅/散列?

    我需要帮助执行以下操作 预处理器宏标签 x 应输出 x 例如 define label x 如果我调用 label aname 输出应为 aname 不带引号 我知道 以下尝试是错误的 define label x x leads to x
  • GCC 致命错误:stdio.h:没有这样的文件或目录

    我正在尝试使用 GCC 4 9 实验性 在 OS X 10 9 上用 C 编译程序 由于某种原因 我在编译时收到以下错误 gcc fatal error stdio h No such file or directory 然后我尝试了一个简
  • ASP.NET 与 WCF 聊天

    我正在寻找为 ASP NET 页面实现聊天室界面 我正在学习 WCF 它似乎适合聊天应用程序 在我深入研究 WCF 之前 我想确定它是在 ASP NET 中开发聊天应用程序的正确选择 有人可以提供任何反馈吗 我发现了一些主要使用 Silve
  • grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, 中的警告:字符 0x20 的字体宽度未知

    我想使用免费字体Lato in ggplot2因为我的 R markdown 文档的其余部分就是用这种字体设置的 该字体已安装在我的系统上 并且可以在字体簿中找到 只有一次 所有可用字体均加载extrafont封装并注册在extrafont
  • 使用 python 3.3.4 和 RotatingFileHandler 时出现 PermissionError

    我正在尝试为我使用 python 3 3 4 和 PyQt4 编写的 GUI 应用程序获取旋转日志文件 我的主脚本中有以下代码片段 import logging import resources logger logging getLogg
  • Angular - 构建模块的最佳实践

    我是角度新手 所以请耐心等待 前几天我正在阅读一篇文章 文档 其中强调了在应用程序中构建模块的最佳方法 但只能粗略地记住它 App controllers App services angular module App App contro
  • QTableView:更改双精度值的精度

    如果模型返回双精度值作为 EditRole 则 假设 QDoubleSpinBox 被 QTableView 用作编辑器 如何改变该控制的精度 解释了 QTableView 中 QDoubleSpinBox 的精度行为here 所以要解决这
  • JavaScript 字体规格

    给定 1 字体系列和 2 unicode 字符代码 是否可以在 JavaScript 中生成如下所示的图像 http www freetype org freetype2 docs tutorial metrics png 基本上 我想 显
  • 连接拒绝 MongoDB errno 111

    我有一个运行 Ubuntu 12 04 LTS 和 MongoDB 实例的 Linode 服务器 服务正在运行并且可以在本地连接 但我无法从外部源连接到该服务器 我已将这两条规则添加到我的 IP 表中 其中 是我想要连接的服务器 如本节中所
  • 在 POM 的 Maven 存储库条目中,默认情况下是否启用快照?

    A Maven POM可以定义一个 存储库 例如
  • 无法获取 BatchBridge,请确保您的捆绑包正确打包

    我正在尝试运行我创建的反应本机应用程序 当我最初在手机中运行它时 我看到以下屏幕 我尝试运行 react native start 当我运行它时 我得到以下输出 当它停止在 初始化包管理器 时 我在另一个终端中运行了 react nativ
  • 让 ffmpeg 与 Heroku 一起工作

    我尝试为我的 Heroku Rails 应用程序安装 ffmpeg 但现在我的应用程序崩溃了 我使用以下命令添加了一个构建包 heroku config add BUILDPACK URL https github com shunjiko
  • 从 .NET Windows 服务启动进程

    我正在尝试从 NET Windows 服务启动控制台应用程序 该服务在 Windows 2008 服务器上运行 我使用 Process Start 运行控制台应用程序并且它运行 我可以在任务管理器中看到它 但我从未取回进程 ID 并且对 P
  • R 中的 function(x):在不定义函数的情况下编写“函数”?

    我已经多次遇到这个概念 但不知道它的名称 因此无法通过谷歌搜索来了解更多信息 基本上 当查看其他人编写的函数甚至简单命令时 我经常会看到类似的内容 apply dataset 1 2 function x 10 x 在这种情况下 我能够以某
  • Bash 中的并行迭代 IP 地址

    我正在处理一个大型私有 8 网络 需要枚举正在侦听端口 443 并在其 HTTP HEADER 响应中声明特定版本的所有 Web 服务器 一开始我想跑nmap使用 connect 扫描并通过输出文件 grep 自己 但这会引发许多误报nma