SOCKS5 포트 필드는 네트워크 바이트 순서의 부호 없는 2바이트이며, 최상위 바이트가 먼저 옵니다. Go에서는 이미 검증된 uint16을 그대로 인코딩합니다.

var field [2]byte
binary.BigEndian.PutUint16(field[:], port)

encoding/binary를 임포트합니다. 포트 1080의 경우 결과 16진수 바이트는 04 38입니다. 포트 4의 경우 00 04입니다. 앞의 0도 고정 폭 필드의 일부입니다.

입력이 더 큰 정수나 문자열로 시작한다면 uint16으로 변환하기 전에 숫자 범위를 검증하세요. 변환은 범위를 벗어난 값을 보고하는 대신 상위 비트를 버릴 수 있습니다.

SOCKS5 응답에서는 BND.PORT, 즉 서버의 바인딩된 포트 필드를 직렬화합니다. 둘 다 2바이트를 차지한다는 이유만으로 요청된 목적지 포트를 그 필드에 복사하지 마세요. 인코딩된 필드는 길이가 ATYP에 따라 달라지는 응답 주소 뒤에 배치합니다.

관련 글