```bash
#!/bin/sh
# 사용법 표시 함수
usage() {
echo "Usage: $0 -p PORT -f OUTPUT_FILE"
exit 1
}
# 옵션 초기화
PORT=""
OUTPUT_FILE=""
# 옵션 파싱
while getopts "p:f:" opt; do
case $opt in
p)
PORT="$OPTARG"
;;
f)
OUTPUT_FILE="$OPTARG"
;;
\?)
usage
;;
esac
done
# 필수 옵션 확인
if [ -z "$PORT" ] || [ -z "$OUTPUT_FILE" ]; then
usage
fi
# TCP 서버 실행
while true; do
nc -l -p "$PORT" | while read -r line; do
# 현재 시간을 포맷에 맞춰서 가져옴
current_time=$(date "+%Y-%m-%d %H:%M:%S")
# 수신한 패킷과 시간 정보를 출력
echo "$current_time - $line"
# 파일에 저장 (append 모드)
echo "$current_time - $line" >> "$OUTPUT_FILE"
done
done
```
이 스크립트는 무한 루프를 통해 계속해서 클라이언트의 연결을 수락하고, 연결이 끊어지면 다시 대기하여 새로운 연결을 수락합니다. 계속해서 수신된 패킷과 시간 정보를 출력하고 지정된 파일에 저장합니다. 이렇게 하면 `-k` 옵션을 사용할 수 없는 `nc`에서도 동작할 것입니다.