我需要将IPv4地址拆分为八位字节,计算每个八位字节的MD5哈希值并打印为CGI输出:
IP1=$(echo ${REMOTE_ADDR} | tr "." " " | awk '{print $1'} | md5sum | cut -c1-32)
printf $IP1
在此示例中,REMOTE_ADDR = 192.168.20.100但是192的MD5给了我错误的MD5 IP1=6be7de648baa9067fa3087928d5ab0b4
,而应该是58a2fc6ed39fd083f55d4182bf88826d
如果我这样做:
cat /tmp/test.txt | md5sum | cut -c1-32
其中test.txt
包含192
,我得到了正确的MD5哈希,即58a2fc6ed39fd083f55d4182bf88826d
我在做什么错?
您的awk
的print
正在添加换行符,因此您要计算的是"192\n"
的md5,而不是"192"
。使用
IP1=$(printf "%s" "${REMOTE_ADDR%.*.*.*}" | md5sum | cut -c1-32)
相反,它使用外壳程序参数扩展删除IP地址的第一个八位字节以外的所有字节,并使用printf
写入而不包含换行符。