bash - 使用 bash 生成随机 IP 问题

标签 bash shell ip-address

我有一个 URL 列表,我正在尝试使用该列表构建防火墙日志。
例子:

$ cat urls.csv 

a.com

我知道如何使用直接提到的 IP 作为变量来构建日志。
$ cat processor.sh 

#!/bin/bash
filename="$1"
while read -r line
do
   URLS="$line"
   IP='10.109.1.1'
   today_date=`date +%d/%b/%Y`
   conact_1=" - - ["
   concat_2=":00:00:00 +0000] "
   date_concat=$conact_1$today_date$concat_2
   GET='"GET '
   protocol=' HTTP/1.1" 304 0 304 0 0 0 655 456 645 368 0'
   final_url=$IP$conact_1$today_date$concat_2$GET$URLS$protocol
   echo $final_url
done < "$filename"

结果:
$ bash processor.sh urls.csv

10.109.1.1 - - [22/Jul/2018:00:00:00 +0000] "GET a.com HTTP/1.1" 304 0 304 0 0 0 655 456 645 368 0 

现在,如果我有 50 or 100 或更多的日志行,我如何为 URL 总数生成随机 IP 并生成日志行?
$cat urls.csv

a.com
b.com
c.com
d.com
....

关于如何在 bash 中生成随机 IP 的任何建议?

预期结果:
$ bash processor.sh urls.csv

1.1.1.1 - - [22/Jul/2018:00:00:00 +0000] "GET a.com HTTP/1.1" 304 0 304 0 0 0 655 456 645 368 0
1.1.1.2 - - [22/Jul/2018:00:00:00 +0000] "GET b.com HTTP/1.1" 304 0 304 0 0 0 655 456 645 368 0
1.1.1.3 - - [22/Jul/2018:00:00:00 +0000] "GET c.com HTTP/1.1" 304 0 304 0 0 0 655 456 645 368 0
1.1.1.4 - - [22/Jul/2018:00:00:00 +0000] "GET d.com HTTP/1.1" 304 0 304 0 0 0 655 456 645 368 0
............

最佳答案

对于 IPv4,基础知识是:

printf "%d.%d.%d.%d\n" "$((RANDOM % 256))" "$((RANDOM % 256))" "$((RANDOM % 256))" "$((RANDOM % 256))"

您可能想过滤掉 192.168.0.0/1610.0.0.0/8以及许多其他地址。对于 IPv6,您可以尝试:
for ((i=0;i<8;i++)); do printf "%02x%02x:" $((RANDOM%256)) $((RANDOM%256)); done | sed 's/:$//'  

( $RANDOM 只生成最大到 2^15-1 的值,所以 $((RANDOM%65536)) 毫无意义)

关于bash - 使用 bash 生成随机 IP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51465253/

相关文章:

linux - 在文件中每第 n 次出现字符时插入内容

bash - 如何杀死shell的所有子进程?

linux - 在 bash 中循环遍历文件中的行,而不使用标准输入

vb.net - 返回IP地址/端口的套接字属性

bash - sh 中的 "${0%/*}"和 "${0##*/}"

linux - 时间 "command"让您的配置文件运行。是否有一个命令可以让您分析最大和平均内存消耗?

bash - awk 提取列但仅从一行中提取

linux - Git 部署回滚工作流程

c++ - 如何在卡萨布兰卡(CPP Rest SDK)中为客户提供特定的 IP 地址

c - 如何从 shell 脚本或 C 获取传入的 ssh/telnet 客户端本地 IP 地址