时间服务——解释字节

时间服务——解释字节

我尝试通过取消注释来安装xinetd和允许某些服务,例如echo, time,daytime/etc/inetd.conf

我用 nc 测试过:

$ nc localhost echo     #works like cat—✓
$ nc localhost daytime  #works like date—✓

但后来我尝试了:

$ nc localhost time
# => weird characters

好的,显然,时间给出了二进制时间戳。

所以我想我可以通过将其转换为数字并将其输入到来破译它date -d @$number

$ nc localhost time |wc -c #=>4 (4 bytes)
$ alias reverseBytes="perl -0777e 'print scalar reverse <>'"
$ date -d $(nc localhost time | reverseBytes | od -An -tu4|sed 's/^ */@/')

太酷了,现在我得到了人类可读的准确时间,只不过这一天是 70 年后的今天。

怎么了? (openbds-inetd给出相同的结果)。

答案1

时间协议(RFC 868)是很不寻常的,更不用说过时了。

时间以二进制编码,但最重要的是,纪元是 1900-01-01 00:00:00,而不是标准 UNIX 纪元 (1970-01-01 00:00:00)。

像这样解码它:

python -c 'import struct, sys; print(struct.unpack(">L", sys.stdin.read())[0]-2208988800)'

例如:

nc localhost time | python -c 'import struct, sys; print(struct.unpack(">L", sys.stdin.read())[0]-2208988800)'

或者只需多做一点工作即可将其转换为 Pythondatetime对象:

python -c 'import struct, sys, datetime; print(datetime.datetime.utcfromtimestamp(int(struct.unpack(">L", sys.stdin.read())[0]-2208988800)))'

相关内容