使用LinuxBash同时向多台主机发送http get请求

使用LinuxBash同时向多台主机发送http get请求,linux,bash,httprequest,wget,Linux,Bash,Httprequest,Wget,是否可以使用LinuxBash工具同时向多台主机发送HTTPGET请求 现在我知道了 wget -O- http://192.168.1.20/get_data-php > out.log 但是我需要请求所有的192.168.1.0/17IP。#/垃圾箱/垃圾箱 #!/bin/sh rm address.txt allout.txt # remove old file with addresses and contents nmap -n -sn 192.168.1.0/17 -oG -

是否可以使用LinuxBash工具同时向多台主机发送HTTPGET请求

现在我知道了

wget -O- http://192.168.1.20/get_data-php > out.log
但是我需要请求所有的
192.168.1.0/17
IP。

#/垃圾箱/垃圾箱
#!/bin/sh
rm address.txt allout.txt # remove old file with addresses and contents
nmap -n -sn 192.168.1.0/17 -oG - | awk '/Up$/{print $2}' > address.txt # get all active hosts and store into a file address.txt

while IFS="" read -r add || [ -n "$add" ]
do
  wget -q -O- http://"$add"/get_data-php > out"$add".log & # for every address create file with wget content
done < address.txt

wait

cat out*.log > allout.txt # put all .log file contents to allout.txt

rm -r out*.log # remove all created .log files
rm address.txt allout.txt#删除包含地址和内容的旧文件 nmap-n-sn192.168.1.0/17-oG-| awk'/Up$/{print$2}'>address.txt#获取所有活动主机并存储到文件address.txt中 而IFS=”“read-r add | |[-n“$add”] 做 wget-q-O-http://“$add”/get_data-php>out“$add”.log&#为每个地址创建包含wget内容的文件 完成allout.txt#将所有.log文件内容放入allout.txt rm-r out*.log#删除所有创建的.log文件
最简单的方法是使用bash-brace扩展:

。。。如果性能不是问题(因为它将按顺序运行请求)。


当然也有并行运行请求的方法,但我想这超出了这个问题的范围。

基于Drejc的回答,但可以避免弄乱临时文件,并且可以更好地处理低于主机数量的进程限制(例如,如果您有1000台主机)

#/垃圾箱/垃圾箱
nmap-T5-n-sn 192.168.1.0/17-oG-|
awk'/Up$/{print$2}'|
parallel-j0wget-q-O-http://{}/get_data-php>allout.txt

当然,您可以将它们全部放在后台(使用
&
),然后将结果连接到:
wget…>out1.txt&;wget…>out2.txt&。。。。;等待cat out*.txt>allout.txt
Btw,您确定
/17
?那将是
[192.168.0.1192.168.127.254]
(32766个地址)。是的,我对掩码有把握。这都是内部网络,所以没问题。但我更多的是考虑一些像wget这样的命令,在那里我可以使用网络掩码。或者可能是netcat…据我所知不是这样的-如果你找到一个,让它同时处理所有请求可能是不可能的。它可能会一次只做一个。当然不完全是同时,我想我最终会写一个简短的脚本,循环并请求甲烷储存。我接受了这个解决方案,因为它首先检查活动主机。我甚至不知道大括号扩展的可能性,非常感谢!我仍然习惯于先编写脚本来检查在线主机。
wget -O- http://192.168.{0..127}.{1..254}/get_data-php >>out.log