Inetd

時間服務——解釋字節

  • July 19, 2015

我嘗試通過取消註釋來安裝和允許某些服務,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給出相同的結果)。

時間協議(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)))'

引用自:https://unix.stackexchange.com/questions/217018