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) 날짜는 말할 것도 없고 매우 이례적입니다.
시간은 이진수로 인코딩되지만 가장 중요한 점은 에포크가 표준 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)))'