Go లో SOCKS5 పోర్టులను రెండు బిగ్-ఎండియన్ బైట్లుగా ఎన్కోడ్ చేయండి
మారే పొడవు గల బైనరీ స్ట్రింగ్ను కత్తిరించడం బదులు SOCKS5 పోర్ట్ ఫీల్డ్ల కోసం Go యొక్క binary.BigEndian సహాయకులను ఉపయోగించండి.
SOCKS5 పోర్ట్ ఫీల్డ్లు నెట్వర్క్ బైట్ క్రమంలో రెండు సంజ్ఞలేని బైట్లు: అత్యంత ముఖ్యమైన బైట్ మొదట వస్తుంది. Go లో, ఇప్పటికే ధృవీకరించిన uint16 ను నేరుగా ఎన్కోడ్ చేయండి:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)encoding/binary ను దిగుమతి చేయండి. పోర్ట్ 1080 కోసం, ఫలిత హెక్సాడెసిమల్ బైట్లు 04 38. పోర్ట్ 4 కోసం, అవి 00 04; ముందు సున్నా స్థిర-వెడల్పు ఫీల్డ్లో భాగం.
ఇన్పుట్ పెద్ద పూర్ణాంకం లేదా స్ట్రింగ్గా ప్రారంభమైతే, uint16 కు మార్చే ముందు దాని సంఖ్యా పరిధిని ధృవీకరించండి. మార్పిడి పరిధి వెలుపలి విలువను నివేదించడం బదులు ఉన్నత బిట్లను విస్మరించవచ్చు.
SOCKS5 ప్రతిస్పందనలో, BND.PORT ను క్రమానుగతం చేయండి, అంటే సర్వర్ యొక్క బద్ధమైన పోర్ట్ ఫీల్డ్. రెండూ రెండు బైట్లను ఆక్రమిస్తాయని మాత్రమే అభ్యర్థించిన గమ్యస్థాన పోర్టును ఆ ఫీల్డ్లోకి కాపీ చేయవద్దు. ఎన్కోడ్ చేసిన ఫీల్డ్ను ప్రతిస్పందన చిరునామా తర్వాత ఉంచండి; దాని పొడవు ATYP పై ఆధారపడి ఉంటుంది.