Go에서 SOCKS5 포트를 2바이트 빅엔디언으로 인코딩하기
가변 길이 바이너리 문자열을 자르는 대신 SOCKS5 포트 필드에는 Go의 binary.BigEndian 도우미를 사용하세요.
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에 따라 달라지는 응답 주소 뒤에 배치합니다.