Inetd
時間服務——解釋字節
我嘗試通過取消註釋來安裝和允許某些服務,
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)'
或者只需多做一點工作即可將其轉換為 Python
datetime
對象:python -c 'import struct, sys, datetime; print(datetime.datetime.utcfromtimestamp(int(struct.unpack(">L", sys.stdin.read())[0]-2208988800)))'