Java SOCKS చిరునామాలోని ఋణ సంఖ్యలు ఋణ IP కావు
Java byte API తో SOCKS చిరునామా ఫీల్డ్లను విశ్లేషించేటప్పుడు వాటిని unsigned ప్రోటోకాల్ విలువలుగా చదవండి.
Java లో byte signed గా ఉంటుంది. అందువల్ల వైర్ విలువ 217 ఉన్న octet, byte శ్రేణి నుండి నేరుగా ముద్రించినప్పుడు ఋణ విలువగా కనిపించవచ్చు. ఇది ప్రాక్సీ చెల్లని ఋణ IP చిరునామాను పంపిందని అర్థం కాదు.
నిల్వ చేసిన విలువను unsigned పూర్ణాంకంగా మార్చండి, ఉదాహరణకు Byte.toUnsignedInt(value) ద్వారా, లేదా ఫీల్డ్ను చదివేటప్పుడు DataInputStream.readUnsignedByte() ఉపయోగించండి. నెట్వర్క్ క్రమంలోని పోర్ట్ కోసం, ఏ byte నైనా signed దశాంశ సంఖ్యగా పరిగణించకుండా పత్రీకరించిన రెండు-byte విలువను చదవండి.
ప్రాతినిధ్యాన్ని ఫ్రేమింగ్ నుండి వేరు చేయండి. సాకెట్ పఠనం అభ్యర్థించిన దానికంటే తక్కువ byte లను తిరిగి ఇవ్వవచ్చు. మొత్తం ఫీల్డ్ను చదవండి, ఆపై SOCKS సంస్కరణ మరియు చిరునామా రకం ప్రకారం అర్థం చేసుకోండి. SOCKS5 చిరునామాలలో IPv4 చిరునామా, IPv6 చిరునామా లేదా పొడవు-ఉపసర్గ కలిగిన డొమైన్ పేరు ఉండవచ్చు; స్థిరమైన నాలుగు-byte ఊహ వీటిలో ఒక రూపాన్ని మాత్రమే కవర్ చేస్తుంది.
ఋణంగా కనిపించే octet ను సరిచేయడం ప్రదర్శన సమస్యను పరిష్కరిస్తుంది. కానీ తప్పు ఆఫ్సెట్ నుండి చదవడం ప్రారంభించిన లేదా చిరునామా మధ్యలో ఆగిపోయిన parser ను అది సరిచేయదు.