時間サービス - 解釈バイト

時間サービス - 解釈バイト

xinetd特定のサービスのコメントを外してインストールと許可を試みましたechotimedaytime/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)日付は言うまでもなく、非常に異例です。

時間はバイナリとしてエンコードされますが、最も重要なのは、エポックが標準のUNIXエポック(1970-01-01 00:00:00)ではなく1900-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)'

datetimeあるいは、いくつかの追加操作でPythonオブジェクトに変換することもできます。

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

おすすめ記事