SOCKS5 bağlantı noktalarını Go'da iki big-endian bayt olarak kodlayın
Değişken uzunluklu bir ikili dizeyi dilimlemek yerine SOCKS5 bağlantı noktası alanları için Go'nun binary.BigEndian yardımcılarını kullanın.
SOCKS5 bağlantı noktası alanları ağ bayt sırasında iki işaretsiz bayttır: en anlamlı bayt önce gelir. Go'da, önceden doğrulanmış bir uint16'yı doğrudan kodlayın:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)encoding/binary içe aktarın. 1080 numaralı bağlantı noktası için elde edilen onaltılık baytlar 04 38. 4 numaralı bağlantı noktası için bunlar 00 04; baştaki sıfır sabit genişlikli alanın parçasıdır.
Girdi daha büyük bir tamsayı veya dize olarak başlıyorsa, uint16'ya dönüştürmeden önce sayısal aralığını doğrulayın. Dönüştürme, aralık dışı bir değer bildirmek yerine yüksek bitleri atabilir.
Bir SOCKS5 yanıtında BND.PORT alanını, yani sunucunun bağlı bağlantı noktası alanını seri hale getirin. İkisi de iki bayt kapladığı için istenen hedef bağlantı noktasını o alana kopyalamayın. Kodlanmış alanı, uzunluğu ATYP'ye bağlı olan yanıt adresinden sonra yerleştirin.