2

使用 ash,我有一个 IP 地址作为变量

IP_ADDR=192.168.1.234

我想将 4 个字节写入二进制文件,然后重新读取它们并重新调整 IP 字符串。

我有以下可行的解决方案,但它似乎很老套——有更好的建议吗?

写:

 IP_ADDR=192.168.1.234
 serialHex=`printf '%02X' ${IP_ADDR//./ } | sed s/'\(..\)'/'\\\\x\1'/g`
 echo -n -e $serialHex | dd bs=1 of=/path/to/file seek=19 &> /dev/null

注意 seek=19 表示在二进制文件(字节 19)中写入的位置

读:

hexValues=`od -j 19 --read-bytes=4 --address-radix=n -t x1 /path/to/file` 
set $hexValues
for w; do echo -n "$((0x$w))."; done | sed s/.$//
4

1 回答 1

1
function ip_write {
    local FILE=$1 IP=$2 NUMS T
    IFS=. read -a NUMS <<< "$IP" 
    printf -v T '\\x%x\\x%x\\x%x\\x%x' "${NUMS[@]}"
    printf "$T" > "$FILE"
}

function ip_read {
    local FILE=$1 NUMS
    read -a NUMS < <(exec od -N4 -An -tu1 "$FILE")
    local IFS=.
    IP="${NUMS[*]}"
}

示例用法:

# Saves IP to file:
> ip_write ip.txt 10.0.0.1
> hexdump -C ip.txt
00000000  0a 00 00 01                                       |....|

# Reads IP from file:
> ip_read ip.txt
> echo "$IP"
10.0.0.1
于 2014-06-25T12:42:40.923 回答