首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个脚本是如何随机生成IP地址的?

这个脚本是如何随机生成IP地址的?
EN

Unix & Linux用户
提问于 2018-07-13 10:25:07
回答 2查看 995关注 0票数 -1

有人能解释一下下面的代码是如何工作的吗?我知道它会随机产生一个IP地址,但我不明白是如何产生的。

代码语言:javascript
运行
复制
while
  set $(dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1)
  [ $1 -lt 224 ] &&
  [ $1 -ne 10 ] &&
  { [ $1 -ne 192 ] || [ $2 -ne 168 ]; } &&
  { [ $1 -ne 172 ] || [ $2 -lt 16 ] || [ $2 -gt 31 ]; }
do :; done
ip_address=$1.$2.$3.$4
EN

回答 2

Unix & Linux用户

发布于 2018-07-13 10:33:53

命令

代码语言:javascript
运行
复制
dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1

生成数据,如

代码语言:javascript
运行
复制
     251 113 126 026

ddurandom设备中读取四个字节,然后将其转换为一系列无符号整数,每个整数为1字节,每个整数都带有od

这是通过命令替换($(...))传递给D6的,set将将位置参数$1$2$3$4设置为整数。

然后对这些整数执行一些检查,循环一直持续到其中一个测试失败。循环体中的:是无操作的,只需要满足shell的语法。

另一种产生随机IP地址的方法(不在私有地址范围内):

代码语言:javascript
运行
复制
$ nmap -n -iR 10 -sL | awk '/report for/ { print $NF }'
221.37.208.42
121.3.97.158
203.225.119.103
145.139.220.88
95.153.25.126
149.73.57.221
165.178.177.39
11.187.21.175
175.211.240.124
130.89.42.47
票数 3
EN

Unix & Linux用户

发布于 2018-07-13 11:25:56

就像克色兰达所说的,dd | od$1..$4设置为四个随机的8位整数,这些整数可以被看作是IPv4地址的四个八位数。

但是,脚本中的测试看起来很奇怪。记住,只要测试为真,循环就会重复,或者当测试失败时结束。然后,第一个测试将第一个八进制与224进行比较,当它等于或大于它时失败。因此,您将获得大于或等于224.0.0.0的IP地址。这些都是多播或预留地址,所以很难看出生成器有什么实际用途。

其他测试也将接受私有使用范围,但它们比224..255小得多,因此您几乎看不到任何测试。

如果目的是生成可路由地址,则测试的含义应该倒转。

至于od -An -tu1手册页解释了开关。-An阻止打印地址,-tu1将输入作为一个字节的无符号整数:

文件偏移量的-A, --address-radix=RADIX输出格式;基数是[doxn]的一种,对于十进制、八进制、十六进制或非-t, --format=TYPE类型,D11类型由以下一个或多个规范组成:u[SIZE]无符号十进制,每整数大小字节。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/455081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档