시간 서비스 - 해석 바이트

시간 서비스 - 해석 바이트

xinetd특정 서비스의 주석 처리를 제거하여 설치 및 허용을 시도 했습니다 echo.timedaytime/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)))'

관련 정보