汇总下几个IP计算/转换的shell小脚本

简介:

1. IP转换为整数
 vi ip2num.sh
#!/bin/bash
# 所有用到的命令全是bash内建命令

IP_ADDR=$1
[[ "$IP_ADDR" =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] || { echo "ip format error."; exit 1; }

IP_LIST=${IP_ADDR//./ };
read -a IP_ARRAY <<<${IP_LIST};      

# 把点分十进制地址拆成数组(read的-a选项表示把输入读入到数组, 下标从0开始)

echo $(( ${IP_ARRAY[0]}<<24 | ${IP_ARRAY[1]}<<16 | ${IP_ARRAY[2]}<<8 | ${IP_ARRAY[3]} ));       # bash的$(()) 支持位运算

HEX_STRING=$(printf "0X%02X%02X%02X%02X\n" ${IP_ARRAY[0]} ${IP_ARRAY[1]} ${IP_ARRAY[2]} ${IP_ARRAY[3]});     

# 这里演示另外一种不使用位运算的方法
printf "%d\n" ${HEX_STRING};

# 参考自:http://hi.baidu.com/test/blog/item/8af8513da98b72eb3d6d9740.html
# 可以使用mysql的select inet_aton('${IP_ADDR}'); 来验证结果是否正确。


2. 整数转换为IP


> vi num2ip.sh
#!/bin/bash

N=$1

H1=$(($N & 0x000000ff))
H2=$((($N & 0x0000ff00) >> 8))
L1=$((($N & 0x00ff0000) >> 16))
L2=$((($N & 0xff000000) >> 24))

echo $L2.$L1.$H2.$H1

或者
#!/bin/bash

N=$1
declare -i H1="$N & 0x000000ff"
declare -i H2="($N & 0x0000ff00) >> 8"
declare -i L1="($N & 0x00ff0000) >> 16"
declare -i L2="($N & 0xff000000) >> 24"

echo "$L2.$L1.$H2.$H1"

# The variable is treated as an integer; arithmetic evaluation (see ARITHMETIC EVALUATION ) is performed when the variable is assigned a value.
# 参考自:https://dream4ever.org/archive/t-263202.html



下面这个是对的

#!/bin/bash

for a in `cat ./20150427-num-ip.txt`

do

N=$a

L2=$((($N & 0x000000ff) ))

L1=$((($N & 0x0000ff00) >> 8))

H2=$((($N & 0x00ff0000) >> 16))

H1=$((($N & 0xff000000) >> 24))

echo $a " " $L2.$L1.$H2.$H1  >> ./20150427-IP.txt

done



3. 把掩码长度转换成掩码
# 可以根据2修改下, 255.255.255.255的整型值是4294967295
#!/bin/bash

declare -i FULL_MASK_INT=4294967295
declare -i MASK_LEN=$1
declare -i LEFT_MOVE="32 - ${MASK_LEN}"

declare -i N="${FULL_MASK_INT} << ${LEFT_MOVE}"

declare -i H1="$N & 0x000000ff"
declare -i H2="($N & 0x0000ff00) >> 8"
declare -i L1="($N & 0x00ff0000) >> 16"
declare -i L2="($N & 0xff000000) >> 24"

echo "$L2.$L1.$H2.$H1"











本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1583506,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
27 3
|
6天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
26 0
|
7天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
8天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
26 1
|
12天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
143 0
|
12天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
136 0
|
16天前
|
弹性计算 Shell Linux
ecs服务器shell常用脚本练习(六)
【4月更文挑战第4天】shell代码训练(六)
109 0
|
23天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
106 1